Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SoundPool在android中不会发出任何声音_Android_Soundpool - Fatal编程技术网

SoundPool在android中不会发出任何声音

SoundPool在android中不会发出任何声音,android,soundpool,Android,Soundpool,我尝试在加载到声音池后同时播放3个midi文件,每个文件200Kb。 在播放命令后,我卸载每个流并释放声音池。我将音量设置为1,手机不会静音。抱歉,语言不通。 没有迷恋,也没有悲伤 我该怎么办? 提前thx soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0); soundPool.play(sound_id1, leftVolume, rightVolume, 1, 0, rate); soundPool.play(sound_i

我尝试在加载到声音池后同时播放3个midi文件,每个文件200Kb。 在播放命令后,我卸载每个流并释放声音池。我将音量设置为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();
编辑: 当我在调试模式下,并通过播放命令,它的作品伟大。
尝试添加OnLoadCompleteListener,但仍然无效。

不是在播放后立即卸载声音资源并释放SoundPool对象,而是创建一个Runnable来执行这些任务,并延迟将其发布到处理程序。声明如下:

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

确保您有足够的时间加载音频,并且确实正确加载了音频。使用SoundPool.setOnLoadCompleteListener完成此任务。@MikeM。请看我的编辑评论,注释出卸载和发布语句,并尝试一下。您的文章中的代码块是否与您的项目中的代码块完全相同?还是你把它删掉了?@MikeM。是的,它与它加上onLoadCompleteListener完全一样。处理程序放在哪里?如果你在我的答案中引用第一块代码,它将超出你使用它的类中的任何方法定义。我猜您正在使用一个活动,所以我会将它们放在onCreate方法之前,尽管它不必在那里。只要它不在方法中。我的方法使用参数。当方法在运行部分调用时,我如何传递它们。它们不可识别。您是指声音id变量吗?如果是这样的话,用与Runnable相同的方法声明它们;在活动中,在任何方法之外。你不需要通过考试;Runnable也可以访问它们。非常感谢您的帮助!我会试试的