android實(shí)現(xiàn)小音頻頻繁播放
android中多媒體文件(音樂(lè)和視頻)的播放是用MediaPlayer方式是大家比較熟悉的,但是現(xiàn)在要來(lái)說(shuō)一下另外一種音樂(lè)文件播放的方式SoundPool,相比較而言,用MediaPlayer來(lái)播放音樂(lè)的話,占用的系統(tǒng)資源是很多的,加載資源也需要時(shí)間,所以它不適合用來(lái)頻繁播放小音頻文件,比如控件焦點(diǎn)、點(diǎn)擊時(shí)需要播放小音頻文件,這個(gè)時(shí)候用SoundPool來(lái)播放音頻文件,比用MediaPlayer來(lái)播放效率要高很多。這里也來(lái)說(shuō)說(shuō),如果用MediaPlayer來(lái)播放小音頻文件的話,會(huì)出現(xiàn)延時(shí),點(diǎn)擊了之后等會(huì)兒才出現(xiàn)聲音。所以,SoundPool比MediaPlayer更輕量級(jí),適合用于頻繁播放的小音頻文件。
下面就來(lái)說(shuō)說(shuō)它的用法:
第一步:放置目標(biāo)音頻文件
將音頻文件放在res/raw目錄下,這樣就可以通過(guò)R來(lái)引用它了。如果想放在Assert目錄下也是可以的,這里先放在raw下。
第二步:編寫(xiě)音頻播放的類(lèi)
public class MusicPlayer { private Context mContext ; private static MusicPlayer sInstance ; static class Type{ public final static int MUSIC_CLICK = 1 ; public final static int MUSIC_FOCUSED = 2 ; } private SoundPool mSp ; private Map<integer ,integer=""> sSpMap ; private MusicPlayer(Context context){ mContext = context ; sSpMap = new TreeMap<integer ,integer="">() ; mSp = new SoundPool(10 ,AudioManager.STREAM_MUSIC ,100) ; sSpMap.put(Type.MUSIC_CLICK, mSp.load(mContext, R.raw.click, 1)) ; sSpMap.put(Type.MUSIC_FOCUSED, mSp.load(mContext, R.raw.focused, 1)) ; } public static MusicPlayer getInstance(Context context){ if(sInstance == null) sInstance = new MusicPlayer(context) ; return sInstance ; } public void play(int type){ if(sSpMap.get(type) == null) return ; mSp.play(sSpMap.get(type), 1, 1, 0, 0, 1) ; } }
第三步:調(diào)用接口,播放音頻
// 在界面上需要這樣調(diào)用 // 初始化 mMusic = MusicPlayer.getInstance(MainActivity.this) ; // 在onClick中播放click時(shí)的聲音 mMusic.play(MusicPlayer.Type.MUSIC_CLICK) ; // 在onFocusChange中聚焦?fàn)顟B(tài)播放聚焦的聲音 mMusic.play(MusicPlayer.Type.MUSIC_FOCUSED) ;
如果想放在Assert中的話,要注意在引用音頻文件時(shí)要用AssetFileDescriptor,具體方式如下:
MediaPlayer mMediaPlayer = new MediaPlayer() ; AssetFileDescriptor fd = mContext.getAssets().openFd(“music/click.pm3”) ; // assert目錄下的music目錄 mMediaPlayer.setDataSource(fd.getFileDescriptor() ,fd.getStartOffset() ,fd.getLength()) ; mMediaPlayer.prepare() ; mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer arg0) { mMediaPlayer.release() ; } }) ; mMediaPlayer.setOnErrorListener(new OnErrorListener() { @Override public boolean onError(MediaPlayer arg0, int arg1, int arg2) { mMediaPlayer.release() ; return false; } }) ; mMediaPlayer.start() ;
注意:在用MediaPlayer時(shí)要記住釋放資源!在兩個(gè)回調(diào)接口中實(shí)現(xiàn)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 教你輕松制作Android音樂(lè)播放器
- android音樂(lè)播放簡(jiǎn)單實(shí)現(xiàn)的簡(jiǎn)單示例(MediaPlayer)
- Android簡(jiǎn)易音樂(lè)播放器實(shí)現(xiàn)代碼
- android暫?;蛲V蛊渌魳?lè)播放器的播放實(shí)現(xiàn)代碼
- Android實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放器(MediaPlayer)
- Android編程開(kāi)發(fā)音樂(lè)播放器實(shí)例
- Android仿搜狐視頻、微視等列表播放視頻功能
- Android開(kāi)發(fā)簡(jiǎn)易音樂(lè)播放器
- android實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放器
- Android小程序?qū)崿F(xiàn)音樂(lè)播放列表
相關(guān)文章
Android利用GridView實(shí)現(xiàn)單選效果
本篇文章主要介紹了Android利用GridView實(shí)現(xiàn)單選效果的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-05-05Android 提交或者上傳數(shù)據(jù)時(shí)的dialog彈框動(dòng)畫(huà)效果
我們?cè)谑褂弥Ц秾氈Ц兜臅r(shí)候會(huì)看到類(lèi)似這種彈框動(dòng)畫(huà)效果,下面通過(guò)實(shí)例代碼給大家分享android 提交或者上傳數(shù)據(jù)時(shí)的彈框動(dòng)畫(huà)效果,感興趣的的朋友參考下2017-07-07Android編程之創(chuàng)建自己的內(nèi)容提供器實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程之創(chuàng)建自己的內(nèi)容提供器實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了Android創(chuàng)建內(nèi)容提供器的原理、步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-08-08android中實(shí)現(xiàn)手機(jī)號(hào)碼的校驗(yàn)的示例代碼
本篇文章主要介紹了android中實(shí)現(xiàn)手機(jī)號(hào)碼的校驗(yàn)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09Android studio設(shè)計(jì)簡(jiǎn)易計(jì)算器
這篇文章主要為大家詳細(xì)介紹了Android studio設(shè)計(jì)簡(jiǎn)易計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04Flutter實(shí)現(xiàn)仿京東商品詳情底部操作欄
這篇文章主要為大家詳細(xì)介紹了Flutter如何仿京東實(shí)現(xiàn)商品詳情底部操作欄,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-06-06Android開(kāi)發(fā)之圖片壓縮工具類(lèi)完整實(shí)例
這篇文章主要介紹了Android開(kāi)發(fā)之圖片壓縮工具類(lèi),結(jié)合完整實(shí)例形式分析了Android針對(duì)圖片壓縮的相關(guān)屬性設(shè)置與轉(zhuǎn)換操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-11-11揭秘雙十一手機(jī)淘寶圖標(biāo)如何被動(dòng)態(tài)更換
這篇文章主要介紹了每到雙十一十二的時(shí)候Android手機(jī)動(dòng)態(tài)更換手機(jī)圖標(biāo)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08