【问题标题】:How to play .wav files in Java (looped)?如何在 Java 中播放 .wav 文件(循环播放)?
【发布时间】:2015-08-15 17:38:57
【问题描述】:

我已经花了几个小时寻找可以在 Java 中播放简单 wav 文件的示例代码。但是,我收到的没有一个对我有用。也许只有我不了解如何操作示例代码,但任何人都可以向我提供示例代码和如何使其正常工作的“说明”。任何帮助将不胜感激。

【问题讨论】:

标签: java audio


【解决方案1】:

此代码将创建一个剪辑并在开始后连续播放:

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


Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(new URL(filename)));
clip.start();
clip.loop(Clip.LOOP_CONTINUOUSLY);

【讨论】:

    【解决方案2】:

    有更现代的方法可以做到这一点,但小程序类 AudioClip 可能会满足您的需求:

    import java.applet.Applet;
    import java.applet.AudioClip;
    
    final AudioClip clip = Applet.newAudioClip(resourceUrl);
    

    播放一次:

    clip.play();
    

    循环:

    clip.loop();
    clip.stop();
    

    查看AppletAudioClip 的Javadocs

    getAudioClip

    public AudioClip getAudioClip(URL url)
    

    返回由 URL 参数指定的 AudioClip 对象。 无论音频剪辑是否存在,此方法总是立即返回。当此小程序尝试播放音频剪辑时,将加载数据。

    参数:

    url - 给出音频剪辑位置的绝对 URL。

    返回:

    指定 URL 处的音频剪辑。

    您实际上不需要对小程序进行任何操作即可使其正常工作。它可以在常规 Java 应用程序中正常工作。

    【讨论】:

    • 推荐使用javax Clip over AudioClip。 AudioClip 只是较旧并且提供有限的功能。这个想法解释了here
    • @TotZam:我在第一句话中说了这么多。 :) 但是从 OP 的描述来看,这涵盖了他需要的功能。
    • @GregKopff 当它说 resourceUrl 时,我想把文件路径放在哪里?
    • 我尝试放入我的文件路径 C:\Users\John\Desktop\pokemon.wav 但它不起作用,它给我的错误是 ')' 预期的。如果我将整个内容放在引号中,它会给我一个错误,指出非法转义字符。
    • @johnnguyen:你需要创建一个URL 对象。 URL 可以是file:/// URL。
    【解决方案3】:
    import java.io.File;
    import javax.sound.sampled.*;
    
    public void play(File file) 
    {
        try
    {
        final Clip clip = (Clip)AudioSystem.getLine(new Line.Info(Clip.class));
    
            clip.addLineListener(new LineListener()
            {
            @Override
            public void update(LineEvent event)
                {
                if (event.getType() == LineEvent.Type.STOP)
                    clip.close();
                }
            });
    
            clip.open(AudioSystem.getAudioInputStream(file));
            clip.start();
        }
            catch (Exception exc)
        {
            exc.printStackTrace(System.out);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-18
      • 2011-01-25
      • 2018-08-23
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      相关资源
      最近更新 更多