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