【发布时间】:2013-09-13 19:41:19
【问题描述】:
我正在使用SoundPool 在 Android 上的游戏中播放音效。在大多数情况下,它工作得很好,除了有时我需要一次停止所有声音 不暂停(不管它们是否设置为循环)。
在不知道该声音的StreamID 的情况下,我无法弄清楚如何阻止声音播放。我所知道的:
-
soundpool.load(...一些声音...)返回一个soundID -
soundpool.play(soundID)播放声音并返回 streamID -
soundpool.stop(streamID)停止声音
我的问题是,如何在不知道 streamID 的情况下停止声音?我尝试跟踪列表中的所有streamID,但有时一次播放的短流太多,无法正常工作。而且我在SoundPool 中找不到任何方法来获取活动的流ID。有谁知道如何停止所有声音?
任何提示表示赞赏!谢谢
【问题讨论】:
-
难道没有停止所有类型的呼叫吗?
-
SoundPool.autoPause() 是该类中唯一用于一次停止所有流的方法。你是说这不符合你的需求?
-
当我暂停声音时,它们仍会被标记为已暂停,因此会在 autoResume() 上恢复。但是我不能恢复停止的声音(我在不同的场合使用 autoResume() 方法)@HowardPautz 不幸的是没有。 autoPause() 似乎是处理所有活动声音的唯一方法
-
好的,我不清楚为什么您在 id 列表中运行不会阻止它们。你在循环其中一些吗?
-
请记住,当您设置声音池的大小时,您定义了您拥有的数量,因此您知道如何调整数组或列表的大小(在性能上几乎没有差异),只需标记声音开或关。或者你可以像我一样使用数组或列表元素,比如保存 ID 的“槽”——槽只保存活动的 ID,所以你可以循环遍历它们。也许您应该发布您的列表代码?您是在控制来自不同线程的声音吗?