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

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為正常速度
);
}
}
 

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *