Android SoundPool播放音效

所属分类:Android | 发布于 2023-12-14 22:05:13

2023年12月21日更新:官方貌似已经放弃SoundPool,直接使用MediaPlayer吧

最近才开始看android的官方文档,发现官方推出强大的Media3,使用ExoPlayer来播放音频和视频,现在android播放声音有两种方法:1、使用Media3;2、使用老的MediaPlayer。

2023年12月22日晚22时更新:官方貌似已经放弃SoundPool,这句话完全不对,播放音效还是用SoundPool吧

经过测试,MediaPlayer一次只能播放一个声音,而SoundPool一次可以播放多个声音

这怎么理解呢,页面有个按钮,要是是每点击一次就播放一次音效,再快速点击时差异就出现了,使用MediaPlayer的话,上一个声音没有播放完,下个点击播放请求又来了,这个时候,这个播放就被吃掉了,没啦;但是使用SoundPool就可以解决这个问题,点击多少次就播放多少次。

之前使用SoundPool没达到效果是因为用法不对,现在发现SoundPool和MediaPlayer用法是一个套路,要正确使用这两个需要解决两个问题:

1、第一次使用时,资源未加载完成就调用play方法导致第一次不能播放声音。

2、播放完成后,资源释放问题。

解决这两个问题,就可以随心所欲的使用MediaPlayer和SoundPool啦。

 

SoundPool用于播放时间较短的音效。

创建SoundPool管理对象

val audioAttributes = AudioAttributes.Builder()
            .setUsage(
                AudioAttributes.USAGE_ASSISTANCE_SONIFICATION
            )
            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
            .build()
val soundPool = SoundPool.Builder()
            .setMaxStreams(5)
            .setAudioAttributes(audioAttributes)
            .build()

加载音频文件

val soundId = soundPool.load(context, R.raw.great, 1)

播放音效

val streamId = soundPool.play(soundId, 1f, 1f, 0, 0, 1f)

暂停所有音频

soundPool.autoPause()

开始所有音频

soundPool.autoResume()

卸载音频文件

soundPool.unload(R.raw.great)

释放所有音频

soundPool.release()

 

文哥博客(https://wenge365.com)属于文野个人博客,欢迎浏览使用

联系方式:qq:52292959 邮箱:52292959@qq.com

备案号:粤ICP备18108585号 友情链接