【问题标题】:How could I play two sounds together?我怎么能同时播放两个声音?
【发布时间】:2015-09-23 11:55:35
【问题描述】:

嗯,我正在使用 java 编写一个游戏项目,我想实现这样的东西:当一个对象开始移动时,它会发出一些声音效果,而当另一个对象在第一个对象停止之前开始移动时,它也会制作一些音效。在第二个对象开始移动后,第一个对象停止移动之前,如何合并两个对象的声音而不是单独播放?

【问题讨论】:

    标签: java audio


    【解决方案1】:

    其中大部分将使用java.sound.sampled 库来实现。专注于Clip 的功能。 This site 使用样本和 MIDI 文件提供了一些非常好的样板文件。它甚至还有一个游戏示例。

    无论如何,根据 StackOverflow 的 javasound page,这是一个同时播放两个 Clips 的粗略示例:

    public static void main(String... args) throws Exception {
        URL url1 = new URL("http://www.websitewithsomewav/noise1.wav");
        Clip clip1 = AudioSystem.getClip();
        AudioInputStream stream1 = AudioSystem.getAudioInputStream(url1);
        clip1.open(stream1);
    
        URL url2 = new URL("http://www.websitewithsomewav/noise2.wav");
        Clip clip2 = AudioSystem.getClip();
        AudioInputStream stream2 = AudioSystem.getAudioInputStream(url2);
        clip2.open(ais2);
    
        clip1.loop(Clip.LOOP_CONTINUOUSLY);
        clip2.loop(Clip.LOOP_CONTINUOUSLY);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                // A GUI element to prevent the Clip's daemon Thread
                // from terminating at the end of the main()
            JOptionPane.showMessageDialog(null, "Close to exit!");
            }
        });
    }
    

    更新

    如果你绝对必须使用单个输入流,你可以试试MixingAudioInputStream

    【讨论】:

    • 谢谢你,但我期望的是:
    • 1. clip1 在 clip2 之前开始
    • 2.当clip2 启动时,它与clip1 合并。我们播放新的东西,比如clip3,它是clip1和clip2的组合
    • 我不知道为什么这是必要的——这听起来像是一个潜在的X-Y Problem——但我已经用一个可以让你合并流的 API 更新了答案。我自己没有尝试过,但它可能正是您想要的。
    猜你喜欢
    • 2011-05-20
    • 2011-08-10
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多