如果我有一个java.applet.AudioClip对象,我可以在其上调用play来播放一次。但是如果我多次调用play,那么剪辑将继续重启。绕过它的唯一方法似乎是加载同一声音文件的多个实例。这似乎浪费了记忆力。在游戏中,如果我发生了20次爆炸,那么我必须加载20个声音文件实例。
我快速浏览了一下javax.sound,看看是否使用它代替AudioClip会对此有所帮助。我没有看到任何表明它支持同时多次播放同一个片段的内容。
使用简单的java.applet.AudioClip或javax.sound的东西,是否可以多次加载相同的声音文件?
答案 0 :(得分:6)
点击这里 http://forums.sun.com/thread.jspa?threadID=5370182
如果您正在使用剪辑,则必须为每个需要同时播放声音的对象维护一个副本。您可以保留一个主副本,然后根据需要创建剪辑的副本以播放它们,然后只是转储副本以减少内存消耗。
第二个想法是编写自己的Clip类。实际上,您需要做的就是将一些声音数据转储到TargetDataline上进行播放。它将处理缓冲并以正确的速度播放。如果这就是您所做的一切,您应该能够从同一个实例多次转储并多次播放。
将原始样本数据读入字节数组,每当需要播放声音时,我都会使用ByteArrayInputStream从数组中读取数据,并将其输入到AudioInputStream中。 播放完成后,我只需关闭剪辑,不会浪费任何系统资源。