Ash*_*eeb 1 java swing netbeans javasound embedded-resource
我正在编写一个小闹钟程序,当闹钟时间结束时,它会多次播放音频文件.
程序的报警端已完成.现在我要播放文件.我使用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); }
}
Run Code Online (Sandbox Code Playgroud)
Class.getResource("/path/to/the.wav)得到一个URL的剪辑.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!");
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
它使用URL来获取AudioInputStream,而不是File.
调用AudioSystem.getAudioInputStream重载以接受5种不同的参数类型.最重要的/通用的3是.