【问题标题】:Playing Multiple Sounds at once Java一次播放多个声音 Java
【发布时间】:2016-10-20 11:57:47
【问题描述】:

我一直在尝试在 Java 中一次播放多个声音,一次播放 1 个声音没有问题,但如果我尝试一次播放 3 个声音,它只会播放 1 个声音(我希望这是有道理的)

这是我的代码:

public static void play(String file) {
        try {
            clip = AudioSystem.getClip();
            clip.open(AudioSystem.getAudioInputStream(new File(file)));
            clip.start();

            while (!clip.isRunning())
                Thread.sleep(10);
            while (clip.isRunning())
                Thread.sleep(10);

            clip.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

我如何使用此方法的示例:

AudioPlayer.play("sound1.wav");

当我也希望能够做到这一点时

AudioPlayer.play("sound1.wav");
AudioPlayer.play("sound2.wav");
AudioPlayer.play("sound3.wav");

同样,这并不重要,但也可以做这样的事情:

AudioPlayer.getPlayingSound("sound1.wav").setVolume(-0.85f);

【问题讨论】:

  • 您的while 循环是您的问题的原因。它们的全部目的是防止该方法在声音结束之前返回。

标签: java audio


【解决方案1】:

要播放剪辑,您应该遵循 java 文档中的以下代码:

import java.net.URL;
import javax.swing.*;
import javax.sound.sampled.*;

    public class LoopSound {

    public static void main(String[] args) throws Exception {
        URL url = new URL(
            "http://pscode.org/media/leftright.wav");
        Clip clip = AudioSystem.getClip();
        // getAudioInputStream() also accepts a File or InputStream
        AudioInputStream ais = AudioSystem.
            getAudioInputStream( url );
        clip.open(ais);
        clip.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!");
            }
        });
    }}

由于您想同时播放剪辑,您可以尝试这样做:

  import java.net.URL;
    import javax.swing.*;
    import javax.sound.sampled.*;

    public class LoopSounds {

    public static void main(String[] args) throws Exception {
        URL url = new URL(
            "http://pscode.org/media/leftright.wav");
        Clip clip = AudioSystem.getClip();
        AudioInputStream ais = AudioSystem.
            getAudioInputStream( url );
        clip.open(ais);

        URL url2 = new URL(
            "http://pscode.org/media/100_2817-linear.wav");
        Clip clip2 = AudioSystem.getClip();
        AudioInputStream ais2 = AudioSystem.
            getAudioInputStream( url2 );
        clip2.open(ais2);

        // loop continuously
        clip.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!");
            }
        });
    }
    }

【讨论】:

    【解决方案2】:

    您可以尝试使用多线程同时播放多个声音。

    【讨论】:

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