Android SoundPool 的简单使用
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
之前只知道Android中可以用MediapLayer播放音樂,原來今天才發(fā)現(xiàn)可以用SoundPool,用SoundPool可以播一些短的反應(yīng)速度要求高的聲音,比如游戲中的爆破聲,而MediapLayer適合播放長點(diǎn)的。?
一般在玩游戲的時候,特別是在射擊游戲中,經(jīng)常會出現(xiàn)“突突突的射擊”的聲音,聽起來好多聲音連發(fā)的效果。其實(shí)實(shí)現(xiàn)起來是不難的,都知道,在Java中有線程池的概念,那么,類似的,在Android中,也存在SoundPool的概念。
備注:聲音池默認(rèn)申請1M的內(nèi)存空間,所以不適合加載大文件。
SoundPool載入音樂文件使用了獨(dú)立的線程,不會阻塞UI主線程的操作。但是這里如果音效文件過大沒有載入完成,我們調(diào)用play方法時可能產(chǎn)生嚴(yán)重的后果,這里Android SDK提供了一個SoundPool.OnLoadCompleteListener類來幫助我們了解媒體文件是否載入完成,我們重載 onLoadComplete(SoundPool soundPool, int sampleId, int status) 方法即可獲得。?
從上面的onLoadComplete方法可以看出該類有很多參數(shù),比如類似id,是的SoundPool在load時可以處理多個媒體一次初始化并放入內(nèi)存中,這里效率比MediaPlayer高了很多。?
SoundPool類支持同時播放多個音效,這對于游戲來說是十分必要的,而MediaPlayer類是同步執(zhí)行的只能一個文件一個文件的播放。
SoundPool播放工具類代碼如下?:
package?com.sendinfo.cloudcheck.mediaplay;import?android.content.Context; import?android.media.AudioManager; import?android.media.SoundPool; import?android.media.SoundPool.OnLoadCompleteListener;public?class?SoundPoolUtil?{private?static?SoundPool?mSoundPool;public?static?SoundPool?create(Context?context,?int?resId)?{/***?初始化聲音池??*?參數(shù)1:在聲音池中最大的數(shù)量???*?參數(shù)2:流類型?默認(rèn)使用AudioManager.STREAM_MUSIC??*?參數(shù)3:質(zhì)量??默認(rèn)為0?這個值暫時沒影響*/if?(mSoundPool?==?null)?{mSoundPool?=?new?SoundPool(5,?AudioManager.STREAM_MUSIC,?0);}/***?load加載聲音??*?參數(shù)1:上下文*?參數(shù)2:音頻文件*?參數(shù)3:優(yōu)先級?默認(rèn)1?暫時沒影響*/final?int?soundId?=?mSoundPool.load(context,?resId,?1);mSoundPool.setOnLoadCompleteListener(new?OnLoadCompleteListener()?{@Overridepublic?void?onLoadComplete(SoundPool?soundPool,?int?sampleId,?int?status)?{/***?參數(shù)1:加載返回的聲音Id*?參數(shù)2:左聲道*?參數(shù)3:右聲道*?參數(shù)4:優(yōu)先級*?參數(shù)5:是否循環(huán)播放?0:不循環(huán)?-1:循環(huán)*?參數(shù)6:速率??0.5--2.0*/soundPool.play(soundId,?1.0f,?0.5f,?1,?0,?1.0f);}});return?mSoundPool;}/***?@Title:?dismisSoundPool?@Description:?釋放播放池?@param?設(shè)定文件?@return?void*?????????返回類型?@throws*/public?static?void?dismisSoundPool()?{if?(mSoundPool?!=?null)?{mSoundPool.release();mSoundPool?=?null;}}}音頻文件放在res/raw目錄下面???test.wav 如何調(diào)用?:??SoundPoolUtil.create(MainActivity.this,?R.raw.test);
?
?
?
?
?
?
轉(zhuǎn)載于:https://my.oschina.net/u/2320245/blog/536116
總結(jié)
以上是生活随笔為你收集整理的Android SoundPool 的简单使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring学习之AOP(面向切面编程)
- 下一篇: Android Studio快捷键快速入