文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

android实现小音频频繁播放

2022-06-06 11:49

关注

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() {
    @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时要记住释放资源!在两个回调接口中实现。

您可能感兴趣的文章:Android MediaPlayer 音频倍速播放 调整播放速度问题Android MediaPlayer 播放音频的方式详解Android开发录音和播放音频的步骤(动态获取权限)Android使用SoundPool实现播放音频Android自定义View实现音频播放圆形进度条Android多媒体应用使用SoundPool播放音频Android多媒体应用使用MediaPlayer播放音频Android开发之MediaPlayer多媒体(音频,视频)播放工具类Android编程实现播放音频的方法示例Android录制声音文件(音频)并播放Android音频处理之通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能Android App中使用AudioManager类来编写音频播放器Android提高之MediaPlayer播放网络音频的实现方法


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯