Java 声音 .WAV 格式

Posted

技术标签:

【中文标题】Java 声音 .WAV 格式【英文标题】:Java Sound .WAV format 【发布时间】:2016-01-28 18:26:38 【问题描述】:

我知道这个问题已经被问过几次关于声音的问题,相信我,我已经仔细研究过,试图找出自己的答案。我之前在另一个项目中使用 Java 时有声音,使用它没有任何困难:

public void playWelcome ()

  try

    InputStream inputStream = 

    getClass().getResourceAsStream("Start.wav");

    Audiostream audioStream = new AudioStream(inputStream);

    AudioPlayer.player.start(audioStream);

  catch(IOException ioException)

    ioException.printStackTrace();

    System.out.println("Unable to Find WAV/Start FIle");
     
 

显然,这在之前不起作用,所以我尝试使用:

public void uploadDownload() 

  try 
    AudioInputStream audioInputStream = 

    AudioSystem.getAudioInputStream(new

    File("/DaWord/src/resources/upload.wav").getAbsoluteFile());

    Clip clip = AudioSystem.getClip();

    clip.open(audioInputStream); 

    clip.start();

   catch(Exception ex) 

    System.out.println("Error with playing sound.");

    ex.printStackTrace();
  

注意:我也试过不带斜线的文件。例如'我的文件.wav' 有人能帮帮我吗?

更新:

所以我已经设法让它开始了......有点:

文件 soundFile = new File("/Users/myname/DaWord/src/testing.wav");

      AudioInputStream audioIn = 

AudioSystem.getAudioInputStream(soundFile);

     // Get a sound clip resource.
     Clip clip = AudioSystem.getClip();

     // Open audio clip and load samples from the audio input stream.
     clip.open(audioIn);

     clip.start();

但是有没有人知道如何通过不提供绝对路径来做到这一点?我曾尝试使用 .absoulutePath();在文件的末尾,例如:文件

file = new File ("sound.wav").absouloutePath();

【问题讨论】:

您是否尝试过仅使用:File AudioSystem.getAudioInputStream(new File("/DaWord/src/resources/upload.wav"))? 嘿,刚刚试过这个,它没有继续在输出中得到一个空指针异常.. 谢谢你。 【参考方案1】:

正如here 解释的那样,这是分配从文件或 URL 管道传输的 AudioInputStream 的方法:

// from a wave File
File soundFile = new File("eatfood.wav");
AudioInputStream audioIn = AudioSystem.getAudioInputStream(soundFile);
// from a URL
URL url = new URL("http://www.zzz.com/eatfood.wav");
AudioInputStream audioIn = AudioSystem.getAudioInputStream(url);
// can read from a disk file and also a file contained inside a JAR (used for distribution)
// recommended
URL url = this.getClass().getClassLoader().getResource("eatfood.wav");
AudioInputStream audioIn = AudioSystem.getAudioInputStream(url);

【讨论】:

如果您不希望文件相对于类被解析,请使用getClass().getClassLoader().getResource(...),由getClass().getResource() 解析的资源将(如果没有前导斜杠)相对于指定类进行解析。 我刚刚尝试了 from wav 和 Url 方法...由于某些奇怪的原因仍然无法正常工作我不断收到空指针异常.. 我已经了解了所有明显的问题,例如导入用于文件 IO 以及确保实际文件在类/资源中并播放它以确保没有任何奇怪的事情发生并且它很好,很奇怪【参考方案2】:

这暂时有效...使用完整路径

文件 soundFile = new File("/Users/mrBerns/NetBeansProjects/DaWord/src/ching.wav");

      AudioInputStream audioIn = AudioSystem.getAudioInputStream(soundFile);              
     // Get a sound clip resource.
     Clip clip = AudioSystem.getClip();
     // Open audio clip and load samples from the audio input stream.
     clip.open(audioIn);
     clip.start();

【讨论】:

以上是关于Java 声音 .WAV 格式的主要内容,如果未能解决你的问题,请参考以下文章

如何将wav格式声音文件转换为文本文件

Android SoundPool 不播放 wav 格式的声音

火狐浏览器 兼容的音频格式是啥? wav格式在ie里有声音,火狐里没声音,ogv格式的,在火狐里同样没声音

“播放”声音变成 .wav

怎样把(波形)声音格式(wav)转换成mp3、wma等其他音频格式?

C++如何播放wav声音文件.Linux系统