Android使用SoundPool 短音效
前言
對(duì)于Android 一些簡(jiǎn)短音效,例如提示音,或者鈴聲,相對(duì)于使用MediaPlayer,SoundPool可以節(jié)省更多資源,并且可以同時(shí) 多個(gè)音效,而且可以針對(duì)不同音效設(shè)置不同 品質(zhì)
實(shí)現(xiàn)
SoundPool的具體作用,就不再闡述,直接貼代碼
private SoundPool.Builder spBuilder; private SoundPool soundPool; private Integer[] fmSound = FmManager.getRawAudios(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (null == spBuilder) { spBuilder = new SoundPool.Builder(); AudioAttributes.Builder builder = new AudioAttributes.Builder(); builder.setLegacyStreamType(AudioManager.STREAM_MUSIC); spBuilder.setAudioAttributes(builder.build()); spBuilder.setMaxStreams(10); } if (null == soundPool) { soundPool = spBuilder.build(); } } else { if (null == soundPool) { soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 10); //最多 10個(gè)音效,格式為Steam_music,音質(zhì)為10 } } soundPool.setOnLoadCompleteListener(this); if (null == fmArray) { fmArray = new SparseIntArray(); } if (null == streamArray) { streamArray = new SparseIntArray(); } for (int i = 0; i < fmSound.length; i++) { fmArray.put(i + 1, soundPool.load(this, fmSound[i], 1)); //將需要 的資源添加到SoundPool中,并保存返回的StreamID,通過StreamID可以停止某個(gè)音效 } private void playFmByPosition(int resultId) { if (null == soundPool || resultId < 0 || fmArray == null || fmArray.size() < 0 || streamArray == null) return; LogUtils.e(resultId + "------------" + fmArray.size()); if (resultId < fmArray.size()) { if (!FmPlaying.isPlay(resultId)) { int fmPlayId = soundPool.play(fmArray.get(resultId + 1), 1, 1, 0, -1, 1); streamArray.put(resultId, fmPlayId); FmPlaying.setPlay(resultId, true); } else { soundPool.stop(streamArray.get(resultId)); streamArray.removeAt(resultId); FmPlaying.setPlay(resultId, false); } } } static class FmPlaying { private static SparseBooleanArray playArray = new SparseBooleanArray(); public static boolean isPlay(int position) { return playArray.get(position, false); } public static void setPlay(int position, boolean play) { playArray.put(position, play); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:Android雙重SurfaceView實(shí)現(xiàn)彈幕效果
欄 目:Android
下一篇:使用SurfaceView實(shí)現(xiàn)視頻彈幕
本文標(biāo)題:Android使用SoundPool 短音效
本文地址:http://mengdiqiu.com.cn/a1/Android/9034.html
您可能感興趣的文章
- 01-10Android自定義View之繪制圓形頭像功能
- 01-10Android實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用實(shí)現(xiàn)方法詳解
- 01-10android實(shí)現(xiàn)記住用戶名和密碼以及自動(dòng)登錄
- 01-10android實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
- 01-10Android 友盟第三方登錄與分享的實(shí)現(xiàn)代碼
- 01-10android實(shí)現(xiàn)指紋識(shí)別功能
- 01-10Emoji表情在Android JNI中的兼容性問題詳解
- 01-10Android實(shí)現(xiàn)圓形漸變加載進(jìn)度條
- 01-10android開發(fā)環(huán)境中SDK文件夾下的所需內(nèi)容詳解
- 01-10android異步消息機(jī)制 源碼層面徹底解析(1)


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10Android自定義View之繪制圓形頭像功能
- 01-10Android實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用實(shí)現(xiàn)方
- 01-10android實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
- 01-10android實(shí)現(xiàn)記住用戶名和密碼以及自動(dòng)
- 01-10C++自定義API函數(shù)實(shí)現(xiàn)大數(shù)相乘算法
- 01-10Android 友盟第三方登錄與分享的實(shí)現(xiàn)代
- 01-10android實(shí)現(xiàn)指紋識(shí)別功能
- 01-10如何給Flutter界面切換實(shí)現(xiàn)點(diǎn)特效
- 01-10Android實(shí)現(xiàn)圓形漸變加載進(jìn)度條
- 01-10Emoji表情在Android JNI中的兼容性問題詳
隨機(jī)閱讀
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10delphi制作wav文件的方法