【问题标题】:In Java, how can I play the same audio clip multiple times simultaneously?在 Java 中,如何同时多次播放同一个音频剪辑?
【发布时间】:2009-12-06 07:10:00
【问题描述】:

如果我有一个 java.applet.AudioClip 对象,我可以调用 play 来播放它一次。但是,如果我多次调用播放,则剪辑将继续重新启动。解决这个问题的唯一方法似乎是加载同一声音文件的多个实例。这似乎很浪费内存。在游戏中,如果发生 20 次爆炸,那么我必须加载 20 个声音文件实例。

我快速浏览了一下 javax.sound,看看使用它代替 AudioClip 是否会有所帮助。我没有看到任何迹象表明它支持同时多次播放同一剪辑。

是否可以不使用简单的 java.applet.AudioClip 或 javax.sound 的东西多次加载同一个声音文件?

【问题讨论】:

    标签: java audio


    【解决方案1】:

    检查这里 http://forums.sun.com/thread.jspa?threadID=5370182

    如果您使用的是剪辑,则必须为每个需要同时播放声音的对象保留一份副本。您可以保留一份主副本,然后根据需要创建剪辑副本以播放它们,然后转储副本以减少内存消耗。

    第二个想法是编写自己的 Clip 类。本质上,您需要做的就是将一些声音数据转储到 TargetDataline 上以进行播放。它会以正确的速度处理缓冲和播放。如果这就是你所做的一切,你应该能够从同一个实例中转储多次并播放多次。


    将原始样本数据读取到字节数组中,每当需要播放声音时,我都会使用 ByteArrayInputStream 从数组中读取数据,然后将其馈入 AudioInputStream。 播放完成后,我只需关闭 Clip,不会浪费任何系统资源。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多