欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android實(shí)現(xiàn)小音頻頻繁播放

 更新時(shí)間:2020年01月10日 11:58:19   作者:愛(ài)碼士_yan  
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)小音頻頻繁播放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論