android實(shí)現(xiàn)小音頻頻繁播放
android中多媒體文件(音樂和視頻)的播放是用MediaPlayer方式是大家比較熟悉的,但是現(xiàn)在要來說一下另外一種音樂文件播放的方式SoundPool,相比較而言,用MediaPlayer來播放音樂的話,占用的系統(tǒng)資源是很多的,加載資源也需要時(shí)間,所以它不適合用來頻繁播放小音頻文件,比如控件焦點(diǎn)、點(diǎn)擊時(shí)需要播放小音頻文件,這個(gè)時(shí)候用SoundPool來播放音頻文件,比用MediaPlayer來播放效率要高很多。這里也來說說,如果用MediaPlayer來播放小音頻文件的話,會(huì)出現(xiàn)延時(shí),點(diǎn)擊了之后等會(huì)兒才出現(xiàn)聲音。所以,SoundPool比MediaPlayer更輕量級(jí),適合用于頻繁播放的小音頻文件。
下面就來說說它的用法:
第一步:放置目標(biāo)音頻文件
將音頻文件放在res/raw目錄下,這樣就可以通過R來引用它了。如果想放在Assert目錄下也是可以的,這里先放在raw下。
第二步:編寫音頻播放的類
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音樂播放器
- android音樂播放簡(jiǎn)單實(shí)現(xiàn)的簡(jiǎn)單示例(MediaPlayer)
- Android簡(jiǎn)易音樂播放器實(shí)現(xiàn)代碼
- android暫?;蛲V蛊渌魳凡シ牌鞯牟シ艑?shí)現(xiàn)代碼
- Android實(shí)現(xiàn)簡(jiǎn)單音樂播放器(MediaPlayer)
- Android編程開發(fā)音樂播放器實(shí)例
- Android仿搜狐視頻、微視等列表播放視頻功能
- Android開發(fā)簡(jiǎn)易音樂播放器
- android實(shí)現(xiàn)簡(jiǎn)單音樂播放器
- Android小程序?qū)崿F(xiàn)音樂播放列表
相關(guān)文章
Android利用GridView實(shí)現(xiàn)單選效果
本篇文章主要介紹了Android利用GridView實(shí)現(xiàn)單選效果的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-05-05
Android 提交或者上傳數(shù)據(jù)時(shí)的dialog彈框動(dòng)畫效果
我們?cè)谑褂弥Ц秾氈Ц兜臅r(shí)候會(huì)看到類似這種彈框動(dòng)畫效果,下面通過實(shí)例代碼給大家分享android 提交或者上傳數(shù)據(jù)時(shí)的彈框動(dòng)畫效果,感興趣的的朋友參考下2017-07-07
Android編程之創(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-08
android中實(shí)現(xiàn)手機(jī)號(hào)碼的校驗(yàn)的示例代碼
本篇文章主要介紹了android中實(shí)現(xiàn)手機(jī)號(hào)碼的校驗(yàn)的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
Android studio設(shè)計(jì)簡(jiǎn)易計(jì)算器
這篇文章主要為大家詳細(xì)介紹了Android studio設(shè)計(jì)簡(jiǎn)易計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
Flutter實(shí)現(xiàn)仿京東商品詳情底部操作欄
這篇文章主要為大家詳細(xì)介紹了Flutter如何仿京東實(shí)現(xiàn)商品詳情底部操作欄,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-06-06
Android開發(fā)之圖片壓縮工具類完整實(shí)例
這篇文章主要介紹了Android開發(fā)之圖片壓縮工具類,結(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

