在开发中遇到了需要播放小音频的需求,第一时间想到了soundpool 但是遇到了两个坑,现在把解决方法分享给大家
1.soundpool加载以后,但是播放没有声音
@Override public void speak(Object content) { SoundPool mSoundPool = new
SoundPool(5, AudioManager.STREAM_ALARM, 5); int soundID = mSoundPool.load(
mContext,(Integer) content, Integer.MAX_VALUE); mSoundPool.play(soundID, 0.6f,
0.6f, 1, 0, 1); } 最后查阅api找到了问题所在, SoundPool提供了一个监听加载资源完成的回调public void
setOnLoadCompleteListener(OnLoadCompleteListener listener)只需要在这个回调中播放声音就好啦:
@Override public void speak(Object content) { SoundPool mSoundPool= new
SoundPool(5, AudioManager.STREAM_ALARM, 5); final int soundID = mSoundPool.load(
mContext,(Integer) content, Integer.MAX_VALUE);
mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override public void onLoadComplete(SoundPool soundPool, int sampleId, int
status) { mSoundPool.play(soundID, 0.6f, 0.6f, 1, 0, 1); } }); }
2.多次stop/pause停不下来
这个问题的坑在于每次播放soundPool.play(soundID, 0.6f, 0.6f, 1, 0, 1);以后在回调中的那个soundID就会改变:
` public final int play(int soundID, float leftVolume, float rightVolume,int
priority, int loop, float rate)` 尝试重新声明一个变量playId
来存放返回值,保证每次都是对同一个soundpool进行操作暂停和播放这样就解决问题了 playId= soundPool.play(ringId,
0.1f, 0.1f, 1, -1, 1); 在需要暂停的时候传这个playId

技术
©2019-2020 Toolsou All rights reserved,
hive大量小文件处理方法总结苹果不送充填器耳机真为环保?可能还是为了赚钱吧 Unity3D Input按键系统灰色预测使用正交表法设计测试用例函数基本定义和使用‘未完待续face_recognition的5个应用实例VaR - 风险价值 - 蒙特卡罗法 - Python一个猜数字的小游戏,用JavaScript实现k8s入门到放弃--k8s重要概念