今天在使用soundpool进行音频播放时,发现两个小问题,搞了半天,最后发现并不是我们代码的问题!!
1、用模拟器播放时总是报E/FMQ: grantorIdx must be less than 3,然后不能播放声音,最后发现用手机就可以播放!!原因可能时网上说的windows的问题:
android - Android模拟器在访问视频解决方案时关闭(exoplayer) - 堆栈内存溢出 (stackoom.com)
2、soundpool只能播放6s左右,搞了半天发现这是soundpool的规定!!如果想延长播放时间,可以改音频文件,参考:
(25条消息) Android SoundPool只能播放6秒 mp3 文件_apk内置音乐时长限制_jiaqiangziji的博客-CSDN博客
另外,需要使用加载完成的监听器,不然手机上也播放不了:
try {
int soundId = soundPool.load(context.getAssets().openFd(
SOUNDS_FOLDER +"/"+boxBean.getName()),1);
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
soundPool.play(soundId,
1.0f,1.0f,1,0,1.0f);
}
});
} catch (IOException e) {
e.printStackTrace();
}
参考: