猿问

如何使用java播放.wav文件

如何使用java播放.wav文件

我正在尝试使用Java播放一个*.wav文件。我希望它能做到以下几点:
当按下按钮时,播放一个简短的哔声。

我已经在谷歌上搜索过了,但是大部分代码都不起作用。有人能给我一个简单的代码片段来播放.wav文件吗?


蓝山帝景
浏览 2099回答 3
3回答

森栏

最后,我成功地完成了下面的工作,它运行得很好。import java.io.File;import java.io.IOException;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem;import javax.sound.sampled.DataLine;import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.SourceDataLine;public class MakeSound {     private final int BUFFER_SIZE = 128000;     private File soundFile;     private AudioInputStream audioStream;     private AudioFormat audioFormat;     private SourceDataLine sourceLine;     /**      * @param filename the name of the file that is going to be played      */     public void playSound(String filename){         String strFilename = filename;         try {             soundFile = new File(strFilename);         } catch (Exception e) {             e.printStackTrace();             System.exit(1);         }         try {             audioStream = AudioSystem.getAudioInputStream(soundFile);         } catch (Exception e){             e.printStackTrace();             System.exit(1);         }         audioFormat = audioStream.getFormat();         DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);         try {             sourceLine = (SourceDataLine) AudioSystem.getLine(info);             sourceLine.open(audioFormat);         } catch (LineUnavailableException e) {             e.printStackTrace();             System.exit(1);         } catch (Exception e) {             e.printStackTrace();             System.exit(1);         }         sourceLine.start();         int nBytesRead = 0;         byte[] abData = new byte[BUFFER_SIZE];         while (nBytesRead != -1) {             try {                 nBytesRead = audioStream.read(abData, 0, abData.length);             } catch (IOException e) {                 e.printStackTrace();             }             if (nBytesRead >= 0) {                 @SuppressWarnings("unused")                 int nBytesWritten = sourceLine.write(abData, 0, nBytesRead);             }         }         sourceLine.drain();         sourceLine.close();     }}

绝地无双

最短的表单(不必安装随机库)?public static void play(String filename){     try     {         Clip clip = AudioSystem.getClip();         clip.open(AudioSystem.getAudioInputStream(new File(filename)));         clip.start();     }     catch (Exception exc)     {         exc.printStackTrace(System.out);     }}唯一的问题是,在*.wav完成之后,没有一种很好的方法阻止该方法关闭和释放数据。clip.drain()说它阻塞了但它不是。剪辑没有运行就在 start()..唯一的工作但是丑我发现的方法是:// ...clip.start();while (!clip.isRunning())     Thread.sleep(10);while (clip.isRunning())     Thread.sleep(10);clip.close();
随时随地看视频慕课网APP

相关分类

Java
我要回答