【问题标题】:Pausing of the first playing wav file when second wav file is triggered. How to?触发第二个 wav 文件时暂停第一个播放 wav 文件。如何?
【发布时间】:2013-09-08 16:27:36
【问题描述】:

我这里有一个监听用户输入的代码。

System.out.println(message);{
            if(message.equals("play")){
                try {
                    AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("c:/DancingMachupapet/Test.wav"));
                        Clip clip = AudioSystem.getClip();
                        // getAudioInputStream() also accepts a File or InputStream

                        clip.open(inputStream);
                        clip.start();
                        SwingUtilities.invokeLater(new Runnable() {
                            public void run() {
                                JOptionPane.showMessageDialog(null, "Close to exit!");
                            }
                        });


                }catch (IOException e) {
                }
            }
            if(message.equals("hoy")){
                try {
                    AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("c:/DancingMachupapet/ThinkOfManu.wav"));
                        Clip clip = AudioSystem.getClip();
                        // getAudioInputStream() also accepts a File or InputStream

                        clip.open(inputStream);
                        clip.start();
                        SwingUtilities.invokeLater(new Runnable() {
                            public void run() {
                                JOptionPane.showMessageDialog(null, "Close to exit!");
                            }
                        });


                }catch (IOException e) {
                }
            }
            }

当它看到消息“hoy”和“play”时,该代码工作,它将分别播放“ThinkOfManu.wav”和“Test.wav”。它可以工作,但我的问题是当我同时输入“hoy”和“play”时,两个 wav 文件也会同时播放。

我想要发生的是,当 ThinkOfManu.wav 正在播放并且我调用 Test.wav 时,ThinkOfManu 应该停止并播放 Test.wav。不是同时的。

请帮帮我。

【问题讨论】:

标签: java audio javasound


【解决方案1】:

我假设 Clip.stop 方法确实存在?

每次运行新歌曲时,您都会创建一个新的剪辑对象。 不要那样做,而是在 try-catch 块之外初始化剪辑对象,并且在触发之前 clip.play(),做一个clip.stop。

这应该适合你。

示例代码:

Clip clip = AudioSystem.getClip();

if(message.equals("play"))
{
  try {
       AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("c:/DancingMachupapet/Test.wav"));
    clip.stop();
    clip.open(inputStream);
    clip.start();
    SwingUtilities.invokeLater(new Runnable() {
       public void run() {
       JOptionPane.showMessageDialog(null, "Close to exit!");
    }});
  }catch (IOException e) {
  }
  }
            if(message.equals("hoy")){
                try {
                    AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("c:/DancingMachupapet/ThinkOfManu.wav"));
                        clip.open(inputStream);
                        clip.start();
                        SwingUtilities.invokeLater(new Runnable() {
                            public void run() {
                                JOptionPane.showMessageDialog(null, "Close to exit!");
                            }
                        });


                }catch (IOException e) {
                }
            }
            }

【讨论】:

  • 我将在哪里放置 clip.stop();?我删除了我的 try-catch 块,但它仍然同时播放@Neeraj
  • 另外,如果我是你,我不会使用这种方法。使用 "command" : "filepath" 的 Hashmap,并创建一个接受命令的函数,并播放相关文件,从地图中获取值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多