您好,登錄后才能下訂單哦!
它適合播放那些需要反復播放,但時間較短的音效。它支持同時播放多種聲音,這些聲音在系統(tǒng)開始時會加載到列表中,按照這些聲音的id,我們可以調(diào)用這些音效。
1、創(chuàng)建一個SoundPool對象:new SoundPool(int maxStreams, int streamType, int srcQuality);
第一個參數(shù)為soundPool可以支持的聲音數(shù)量,這決定了Android為其開設多大的緩沖區(qū),第二個參數(shù)為聲音類型,最后參數(shù)為聲音品質(zhì),品質(zhì)越高,聲音效果越好,但耗費更多的系統(tǒng)資源。
2、從資源或者文件載入音頻流:
int load(Context context, int resId, int priority) //從APK資源載入
int load(FileDescriptor fd, long offset, long length, int priority) //從FileDescriptor對象載入
int load(AssetFileDescriptor afd, int priority) //從Asset對象載入
int load(String path, int priority) //從完整文件路徑名載入
priority為優(yōu)先級
3、播放聲音play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
第一個參數(shù)為id,id即為放入到soundPool中的順序,比如現(xiàn)在collide.wav是第一個,因此它的id就是1。第二個和第三個參數(shù)為左右聲道的音量控制。第四個參數(shù)為優(yōu)先級,由于只有這一個聲音,因此優(yōu)先級在這里并不重要。第五個參數(shù)為是否循環(huán)播放,0為不循環(huán),-1為循環(huán)。最后一個參數(shù)為播放比率,從0.5到2,一般為1,表示正常播放。
代碼如下:
private SoundPool soundPool;
soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 5);
final int load = soundPool.load(this, R.raw.wen, 1);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
soundPool.play(load, 1, 1, 0, 0, 1);
}
});
注意點:
1. SoundPool最大只能申請1M的內(nèi)存空間,這就意味著我們只能用一些很短的聲音片段,
而不是用它來播放歌曲或者做游戲背景音樂。
2. SoundPool提供了pause和stop方法,但這些方法建議最好不要輕易使用, 因為有些時候它們可能會使你的程序莫名其妙的終止。
3. SoundPool的效率問題。其實SoundPool的效率在這些播放類中算是很好的了,但是有的朋友在G1中測試它還是有100ms左右的延遲,這可能會影響用戶體驗。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。