2014年1月5日 星期日

3D遊戲開發祥解-播放資源的音效範例

3D遊戲開發祥解-播放資源的音效範例


Sample3_1-Layout(Xml)


-GUI 由1個LinearLayout+4個Button組成


 


 









<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<Button
android:text="播放音效1"
android:id="@+id/Button01"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<Button
android:text="播放音效2"
android:id="@+id/Button02"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<Button
android:text="暫停音效1"
android:id="@+id/Button1Pause"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<Button
android:text="暫停音效2"
android:id="@+id/Button2Pause"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
</LinearLayout>


 


Sample3_1-Code


-透過SoundPool載入兩首資原音樂檔案:initSoundPool()


 


-


 









 

package wyf.zcl;

import java.util.HashMap;

import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MyActivity extends Activity {
/** Called when the activity is first created. */
SoundPool sp; //宣告一個SoundPool變數
HashMap<Integer,Integer> spMap; //宣告一個map變數
Button b1; //聲音播放按鈕
Button b1Pause; //聲音暫停按鈕
Button b2; //聲音播放按鈕
Button b2Pause; //聲音暫停按鈕
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initSoundPool(); //初始化SoundPool
b1=(Button)findViewById(R.id.Button01); //聲音播放按鈕產生實體
b2=(Button)findViewById(R.id.Button02); //聲音播放按鈕產生實體
b1Pause=(Button)findViewById(R.id.Button1Pause);
b2Pause=(Button)findViewById(R.id.Button2Pause);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playSound(1,1); //播放第一首音效,迴圈一遍
Toast.makeText(MyActivity.this, "播放音效1", Toast.LENGTH_SHORT).show();
}});
b1Pause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sp.pause(spMap.get(1));
Toast.makeText(MyActivity.this, "暫停音效1", Toast.LENGTH_SHORT).show();
}});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playSound(2,1); //播放第二首音效,迴圈一遍
Toast.makeText(MyActivity.this, "播放音效2", Toast.LENGTH_SHORT).show();
}});
b2Pause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sp.pause(spMap.get(2));
Toast.makeText(MyActivity.this, "暫停音效2", Toast.LENGTH_SHORT).show();
}});
}
public void initSoundPool(){ //初始化SoundPool
sp=new SoundPool(
5, //maxStreams 該參數為設置同時能夠播放多少音效
AudioManager.STREAM_MUSIC, //streamType 該參數設置音訊類型
0 //該參數設置音訊檔的品質,目前還沒有效果,設置為0(預設值)
);
spMap=new HashMap<Integer,Integer>();
spMap.put(1, sp.load(this, R.raw.attack02, 1));
spMap.put(2, sp.load(this, R.raw.attack14, 1));
}
public void playSound(int sound,int number){
AudioManager am=(AudioManager)this.getSystemService(android.content.Context.AUDIO_SERVICE);//產生AudioManager實體
float audioMaxVolumn=am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); //返回當前AudioManager物件的最大音量值
float audioCurrentVolumn=am.getStreamVolume(AudioManager.STREAM_MUSIC); //返回當前AudioManager物件的音量值
float volumnRatio=audioCurrentVolumn/audioMaxVolumn;
sp.play(
spMap.get(sound), //播放的音樂ID
volumnRatio, //左聲道音量
volumnRatio, //右聲道音量
1, //優先順序,0為最低
number, //迴圈次數,0無不迴圈,-1無永遠迴圈
1 //重播速度 ,該值在0.5~2.0之間,1為正常速度
);
}
}

 


 


沒有留言:

張貼留言