SoundPool在android中没有任何声音

时间:2013-11-23 03:03:55

标签: android soundpool

我尝试在将它们加载到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仍然没有。

1 个答案:

答案 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不提供确定声音播放时间的方法,因此您需要相应地调整延迟。