天天看點

【Android開發】多媒體應用開發-使用SoundPool播放音頻

由于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:

運作結果如圖

【Android開發】多媒體應用開發-使用SoundPool播放音頻

轉載請注明出處:http://blog.csdn.net/acmman/article/details/46551047

繼續閱讀