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()