Android中SoundPool 類使用利弊

來源:互聯網
上載者:User

在開發android軟體中,經常需要播放多媒體音頻檔案,通常會採用MediaPlayer類來執行此類操作。但MediaPlayer類佔用的資源比較多,對於遊戲等應用而言,會帶來效能上的降低。在Android中,專門提供了SoundPool類來執行此類音頻播放,SoundPool類佔用的CPU資源較少、反應較快。

SoundPool使用MediaPlaybackService將音頻流解碼為16位的PCM單聲道或者立體聲流。這有利於減小解碼造成的應用延遲。

SoundPool的常用方法包括:
load() //載入音頻檔案
pause() //暫停
play() //播放
resume() //恢複
setLoop() //設定迴圈模式
setOnLoadCompleteListener() //設定監聽器
setVolume() //設定音量
setRate() //設定播放速率

SoundPool類和其他音頻播放類相比,可以自行設定音頻播放時的品質、音量、播放速率等。並且它可以管理多個音頻流,每個流均擁有自己獨立的ID,對單個音頻流的管理均是通過其ID來進行的。SoundPool類適用的情境包括應用程式中的聲效(按鍵提示音、訊息等)、遊戲中密集而短暫的聲音(如多個飛船同時爆炸)。

SoundPool類的使用方法如下:

代碼10-5 SoundPool播放音訊一般過程

int srcQuality=100;
int waitMsec=1000;
float leftVolume=SILENT;
float rightVolume=LOUD;
int priority=1;
int loop=0;
float rate=1f;

SoundPool mSoundPool=new SoundPool(SOUNDPOOL_STREAMS, AudioManager.STREAM_MUSIC, srcQuality);
int sampleId1=mSoundPool.load(mContext, SOUND_A, PRIORITY);
int streamID=mSoundPool.play(sampleID, leftVolume, rightVolume, priority, loop, rate);
……

下面是某個網站提供的一個執行個體: SoundPool在Activity中的整合

import android.media.AudioManager;
import android.media.SoundPool;
public class android123 extends Activity {
private SoundPool snd;
private int hitOkSfx;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
snd=new SoundPool(10, AudioManager.STREAM_SYSTEM,5);
hitOkSfx=snd.load(context, R.raw.ok, 0);
Button btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
snd.play(hitOkSfx, 1, 1, 0, 0, 1);
}
);
}
}

SoundPool通過setLoop(int streamID, int loop)方法可以設定播放模式,當loop值為“-1”時,播放模式為迴圈模式;當loop值為“0”時,播放模式為單次模式;當loop值為一個正整數時,loop值意味著可以播放的次數。

SoundPool通過setRate(int streamID, float rate)方法可以設定播放速率,其範圍為0.5~2.0。當rate值為2.0時,意味著當前播放速率是原始速率的2倍,處於快進模式。

SoundPool通過setVolume(int streamID,float leftVolume, float rightVolume)方法可以設定音頻流的音量範圍。

另外,通過play()方法,SoundPool可以一次性設定播放模式、播放速率、音量範圍等。

需要注意的是,SoundPool目前存在著一些局限,如最大隻能申請1MB的記憶體空間等,另SoundPool提供了pause()和stop()方法,但這些方法目前存在一些Bug,建議不要輕易使用。SoundPool還存在著一些效率問題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.