由于mediaplayer占用資源較多,且不支援同時播放多個音頻,是以android還提供了另一個播放音頻的類-----soundpool。soundpool即音頻池,可以同時播放多個短小的音頻,而且占用的資源較少。soundpool适合在應用程式中播放按鍵音或消息提示音等,在遊戲中播放密集而短暫的聲音,如多個飛機爆炸的聲音等。使用soundpool播放音頻,首先需要建立soundpool對象,然後加載所需要播放的音頻,最後調用play()方法播放音頻,下面進行詳細介紹
1.建立soundpool對象
soundpool類提供了一個構造方法,用來建立soundpool對象,該構造方法的文法格式如下:
soundpool(int maxstreams,int streamtype,int srcquality);
其中,參數maxstreams用于指定可以容納多少個音頻;參數streamtype用于指定聲音類型,可以通過audiomanager類提供的常量進行指定,通常使用stream_music;參數srcquality用于指定音頻的品質,預設為0。
例如,建立可以容納10個音頻的soundpool對象,可以使用下面的代碼:
soundpool soundpool=new soundpool(10,audiomanager.stream_music,0);
2.加載所要放的音頻
可以用load()方法來加載要播放的音頻。load()方法的文法格式有以下4種:
a.public int load(context context,int resid,int priority);用于通過指定的資源id來加載音頻
b.public int load(string path,int priority);用于通過音頻檔案的路徑來加載音頻
c.public int load(assetfiledescriptor afd,int priority);用于從assetfiledescriptor所對應的檔案中加載音頻
d.public int load(filedescriptor fd,long offset,long length,int priority);用于加載filedescriptor對象中從offset開始,長度為length的音頻
例如,要通過資源id來加載音頻檔案ding.wav,可以使用下面的代碼:
soundpool.load(this,r.raw.ding,1);
3.播放音頻
調用soundpool對象的play()方法可以播放指定的音頻。play()方法的文法格式如下:
play(int soundid,float leftvolume,float rightvolume,int priority,int loop,float rate);
各個參數說明如下:
soundid:用于指定要播放的音頻,該音頻為通過load()方法傳回的音頻
leftvolume:用于指定左聲道的音量,取值範圍為0.0-1.0
rightvolume:用于指定右聲道的音量,取值範圍為0.0-1.0
priority:用于指定播放音頻的優先級,數值越大,優先級越高
loop:用于指定循環次數,0為不循環,-1為循環
rate:用于指定速率,正常為1,最低為0.5,最高為2
例如,要播放音頻資源中儲存的音頻檔案notify.wav,可以使用下面的代碼:
soundpool.play(soundpool.load(manactivity.this,r.raw.notify,1),1,1,0,0,1);
下面寫一個小執行個體,實作通過soundpool播放音頻:
音頻檔案放入位置如圖-10.12.a.jpg
布局檔案,實作四個按鈕("狗叫"按鈕,"鳥叫"按鈕,"鬧鈴聲"按鈕,"笑聲"按鈕)
res/layout/main.xml
mainactivity:
運作結果如圖
轉載請注明出處:http://blog.csdn.net/acmman/article/details/46551047