我正在编写一个闹钟小程序,当闹钟时间到了时,它会多次播放一个音频文件。
程序的报警端就完成了。现在我开始播放文件了。我使用 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); }
}
最佳答案
- 将音频剪辑添加到 Jar
- 将 Jar 添加到应用程序的运行时类路径中。 (如果剪辑和类在同一个 Jar 中则不需要)。
- 使用
Class.getResource("/path/to/the.wav)
获取剪辑的 URL。 - 使用基于 Java Sound info. page 中看到的代码播放剪辑.
File objects are required for AudioInputStream.
不,它们不是!这是我在 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!");
}
});
}
}
它使用 URL 获取 AudioInputStream
,而不是 File
。
对 AudioSystem.getAudioInputStream
的调用被重载以接受 5 种不同的参数类型。最重要/通用的 3 个是。
- >
File
- >
InputStream
& - >
URL
关于java - 在java中嵌入wav?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11061432/