android 小音頻頻繁播放

來源:互聯網
上載者:User

標籤:android   音頻播放   

android中多媒體檔案(音樂和視頻)的播放是用MediaPlayer方式是大家比較熟悉的,但是現在要來說一下另外一種音樂檔案播放的方式SoundPool,相比較而言,用MediaPlayer來播放音樂的話,佔用的系統資源是很多的,載入資源也需要時間,所以它不適合用來頻繁播放小音頻檔案,比如控制項焦點、點擊時需要播放小音頻檔案,這個時候用SoundPool來播放音頻檔案,比用MediaPlayer來播放效率要高很多。這裡也來說說,如果用MediaPlayer來播放小音頻檔案的話,會出現延時,點擊了之後等會兒才出現聲音。所以,SoundPool比MediaPlayer更輕量級,適合用於頻繁播放的小音頻檔案。

下面就來說說它的用法:

第一步:放置目標音頻檔案
將音頻檔案放在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) ;}}

第三步:調用介面,播放音頻
// 在介面上需要這樣調用// 初始化mMusic = MusicPlayer.getInstance(MainActivity.this) ;// 在onClick中播放click時的聲音mMusic.play(MusicPlayer.Type.MUSIC_CLICK) ;// 在onFocusChange中聚焦狀態播放聚焦的聲音mMusic.play(MusicPlayer.Type.MUSIC_FOCUSED) ;


如果想放在Assert中的話,要注意在引用音頻檔案時要用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() {@Overridepublic void onCompletion(MediaPlayer arg0) {mMediaPlayer.release() ;}}) ;mMediaPlayer.setOnErrorListener(new OnErrorListener() {@Overridepublic boolean onError(MediaPlayer arg0, int arg1, int arg2) {mMediaPlayer.release() ;return false;}}) ;mMediaPlayer.start() ;

  注意:在用MediaPlayer時要記住釋放資源!在兩個回調介面中實現。

android 小音頻頻繁播放

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.