我尝试在将它们加载到soundPool后同时播放3个midi文件(每个200Kb)。 播放命令后,我卸载每个流并释放soundPool。我将音量设置为1,手机不静音。(对不起语言)。 没有压榨或某事。
我该怎么办? thx提前
soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
soundPool.play(sound_id1, leftVolume, rightVolume, 1, 0, rate);
soundPool.play(sound_id2, leftVolume, rightVolume, 1, 0, rate);
soundPool.play(sound_id3, leftVolume, rightVolume, 1, 0, rate);
soundPool.unload(stream_id1);
soundPool.unload(stream_id2);
soundPool.unload(stream_id3);
soundPool.release();
编辑: 当Im处于调试模式并查看播放命令时,它工作得很好。 试图添加一个OnLoadCompleteListener仍然没有。
答案 0 :(得分:0)
不是在播放后立即卸载声音资源并释放SoundPool对象,而是创建一个Runnable来执行这些任务,并将其延迟发布给Handler。声明以下内容:
final Handler handler = new Handler();
Runnable delayedUnload = new Runnable()
{
@Override
public void run()
{
soundPool.unload(sound_id1);
soundPool.unload(sound_id2);
soundPool.unload(sound_id3);
soundPool.release();
}
};
然后在播放声音资源后发布Runnable:
soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
soundPool.play(sound_id1, leftVolume, rightVolume, 1, 0, rate);
soundPool.play(sound_id2, leftVolume, rightVolume, 1, 0, rate);
soundPool.play(sound_id3, leftVolume, rightVolume, 1, 0, rate);
handler.postDelayed(delayedUnload, 5 * 1000);
postDelayed()
中的第二个参数是以毫秒为单位的延迟;在这种情况下,延迟是5秒。 SoundPool不提供确定声音播放时间的方法,因此您需要相应地调整延迟。