【问题标题】:Audio Clip won't loop continuously音频剪辑不会连续循环
【发布时间】:2015-11-10 06:06:17
【问题描述】:

谁能指出我为什么这段代码不会连续播放这个音频剪辑的正确方向?它播放一次然后停止。

final Clip clip = AudioSystem.getClip();
final AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("Alarm_Police.wav"));
clip.open(inputStream);
clip.loop(Clip.LOOP_CONTINUOUSLY);

【问题讨论】:

  • 你试过在 open() 之前做 loop() 吗?我还没有尝试过,但它可能会起作用。
  • 我刚刚在这里尝试过,它似乎可以工作...您是否在 try 块中发现了任何应该围绕此代码的异常?
  • 嗨,我也试过了,它有效。第一次循环后你有异常吗?
  • @DanW - 是的,将 loop() 放在 open() 之前不会播放任何内容。
  • 另请参阅JavaSound info. page 上的“播放Clip”源,它会创建A GUI element to prevent the Clip's daemon Thread from terminating at the end of the main() ;)

标签: java javasound


【解决方案1】:

如果您正在运行更大的应用程序,此答案可能不适用。但对于仅使用那段代码的简单测试,这可能有帮助:

Clip.loop() 启动它自己的线程,但该线程不会让 JVM 保持活动状态。因此,要使其正常工作,请确保剪辑不是唯一的线程。

如果我从这个 sn-p 中省略 Thread.sleep(..),我会遇到和你一样的问题;

import java.io.File;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

public class Snippet {
    public static void main(String[] args) throws Exception {

        AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("notify.wav"));
        Clip clip = AudioSystem.getClip();
        clip.open(inputStream);
        clip.loop(Clip.LOOP_CONTINUOUSLY);
        Thread.sleep(10000); // looping as long as this thread is alive
    }
}

【讨论】:

  • 谢谢弗兰克,据我了解,如果我按下向上箭头键,它会增加您的“声誉”或其他内容,但我没有足够的帖子让我这样做。我点击了绿色复选标记,我希望这意味着我选择了你的答案来回答问题。
【解决方案2】:

为了播放完整的音频文件,您需要知道睡眠的时间长度。另一种方法是:

while(clip.isRunning())
{
  Thread.sleep(100);
}

这会一直休眠(以 100 毫秒为增量),直到 isRunning() 状态变为 false。 您可能需要在此循环之前进行初始睡眠,以便有时间设置 isRunning() 状态。

【讨论】:

    【解决方案3】:

    我的音频文件包含 20 秒的警报声。我需要它不断地响铃。我没有使用线程,而是继续使用下面显示的代码。

            while(true){
                clip.start();
                clip.loop(clip.LOOP_CONTINUOUSLY);              
            } 
    

    认为这会有所帮助。谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多