1

我正在编写一个小闹钟程序,当闹钟时间到时,它会多次播放音频文件。

程序的报警端就完成了。现在我要播放文件了。我使用 jFileChooser 来选择文件。javax.sound.sampled.AudioInputStream 、 javax.sound.sampled.AudioSystem 和 javax.sound.sampled.Clip 播放我的 wav 文件。工作也一样。

但我真的只想播放一个 wav 文件,而且我还希望能够在多个系统上移动这个闹钟,所以我想避免使用 jFileChooser 来选择我的闹钟铃声。我不想每次运行程序时都必须浏览和选择文件。

给文件一个相对路径(例如,在与 jar 相同的文件夹中)然后修复路径字符串会更容易吗?或者以某种方式使 wav 成为 jar 文件的一部分会更容易(这是我更喜欢的,因为那时我根本不必担心 wav 文件。它只是一个独立的 jar 文件作为闹钟。一个字节数组,也许?)

提前致谢!对不起,如果这太愚蠢了。我是新手!

这是我的 AudioInputStream 代码。

 public void getaudPath() {
try {
    JFileChooser chooser;
   String choosertitle=null;
    chooser = new JFileChooser();
      FileNameExtensionFilter filter = new FileNameExtensionFilter(
        "WAV only", "wav");
    chooser.setFileFilter(filter);
    chooser.setCurrentDirectory(new java.io.File("."));
    chooser.setDialogTitle(choosertitle);
        chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
        apath = (chooser.getSelectedFile()).toString();
      File soundFile = new File(apath);
AudioInputStream audioIn = AudioSystem.getAudioInputStream(soundFile);
     URL url = this.getClass().getClassLoader().getResource(apath);
         clip = AudioSystem.getClip();
         clip.open(audioIn);
         JOptionPane.showMessageDialog(this,"Got file, A-okay!");
}  else {
          apath = null;
      }} catch (Exception e) {JOptionPane.showMessageDialog(this,"Error in getting sound file:=> "+e); }

}
4

1 回答 1

5
  • 将音频剪辑添加到 Jar
  • 将 Jar 添加到应用程序的运行时类路径。(如果剪辑和类在同一个 Jar 中,则不需要)。
  • 用于Class.getResource("/path/to/the.wav)获取剪辑的 URL。
  • 使用基于Java 声音信息中的代码播放剪辑。页

AudioInputStream 需要文件对象。

不,他们不是! 这是我在 Java Sound 信息中向您推荐的源的副本/粘贴。页。

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!");
            }
        });
    }
}

它使用URL来获取AudioInputStream,而不是File.

调用AudioSystem.getAudioInputStream被重载以接受 5 种不同的参数类型。最重要/最通用的 3 个是。

于 2012-06-16T06:52:41.647 回答