Tuesday, January 8, 2013

[Android] 在 Android 裡播放音效(SoundPool)




main.xml


android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >





SoundPoolActivity

public class SoundPoolActivity extends Activity {



private static final int SOUND_COUNT = 2;

private int sneezeId;

private int tarzanId;

private SoundPool soundPool;



@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);



// 建立 SoundPool

// 第一個參數:SoundPool 不像 MediaPlayer 一個實體管理一個音樂檔案,SoundPool 可以一個實體管理多個檔案

// 第二個參數:串流類型

// 第三個參數:取樣品質,預設用 0

this.soundPool = new SoundPool(SOUND_COUNT, AudioManager.STREAM_MUSIC,

0);



// 載入音樂

// 不像前一個練習直接讀取 SD 卡的檔案,這邊是讀取 resource

this.sneezeId = this.soundPool.load(this, R.raw.sneeze, 1);

this.tarzanId = this.soundPool.load(this, R.raw.tarzan, 1);

}



public void onClick(View v) {

switch (v.getId()) {

case R.id.sneeze:

// 第二、三參數分別為左右喇叭的音量,可用 0 到 1

// 第四參數固定用 0

// 第五個參數為播放次數,0 為不重複,-1 為無限重複

// 第六個參數為播放速度,可用 0.5 到 2

this.soundPool.play(this.sneezeId, 1, 1, 0, 0, 1);

break;

case R.id.tarzan:

this.soundPool.play(this.tarzanId, 1, 1, 0, 0, 1);

break;

}

}

}



也可以呼叫 pause() 或 stop() 來控制播放。



和 MediaPlayer 一樣,SoundPool 不用以後要在 onPause() 或者 onDestroy() 裡呼叫 release() 釋放資源。

No comments:

Post a Comment