从Java播放歌曲

时间:2015-01-18 22:39:15

标签: java

我正在尝试用Java播放一首歌。我尝试了很多不同的方法,它们都没有给我这样的错误:

Exception in thread "main" java.io.FileNotFoundException: \workspace\playsound\song.wav (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at com.sun.media.sound.WaveFloatFileReader.getAudioInputStream(Unknown Source)
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at playsound.LoopSound.main(LoopSound.java:20)

我只需要一个简单的方法就可以从我的桌面/ src中获取song.wav并使其播放。这适用于注释掉的链接,但不适用于文件:

package playsound;
import java.net.URL;

import javax.sound.sampled.*;

import java.io.File;

public class LoopSound {

public static void main(String[] args) throws Exception {
      System.out.println("Working Directory = " +
              System.getProperty("user.dir"));
      File file = new File("c:/Users/liam/workspace/playsound/song.wav");
      System.out.println("length : " + file.length());
      URL url = new URL("file:///workspace\\playsound\\song.wav");
              //"http://www.intriguing.com/mp/_sounds/hg/fart.wav");   

    Clip clip = AudioSystem.getClip();
    AudioInputStream ais = AudioSystem.
      getAudioInputStream( url );
    clip.open(ais);
    clip.loop(5);
    javax.swing.JOptionPane.showMessageDialog(null, "Close to exit!");
  }
} 

我确信它在那里,因为我已经测试了它的位置:

  

工作目录= C:\ Users \ liam \ workspace \ playsound

它可以告诉我它有多大:

  

长度:2914585

public static void main(String[] args) throws Exception {
  System.out.println("Working Directory = " +
          System.getProperty("user.dir"));
  File file = new File("c:/Users/liam/workspace/playsound/song.wav");
  System.out.println("length : " + file.length());
  new File("workspace\\playsound\\song.wav").toURI().toURL();

这给了我错误:

Exception in thread "main" javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at playsound.musicplayer.main(musicplayer.java:20)

3 个答案:

答案 0 :(得分:3)

如果您可以播放网址,我建议您尝试以下操作:

new File(path).toURI().toURL();

让我知道它是否有效。

同样根据javadocs,您可以直接使用文件。所以你不需要URL。如果你得到一个FileNotFoundException,要么是因为路径错误,文件不存在,要么你没有正确的权限。

答案 1 :(得分:2)

AudioSystem允许您指定File引用; AudioSystem#getAudioInputStream(File)

这意味着您可以直接指定File,而无需先将其转换为某种类型的网址...

File file = new File("c:/Users/liam/workspace/playsound/song.wav");
System.out.println("length : " + file.length());
Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getAudioInputStream(file);

如果你看一下路径引用......

  • "c:/Users/liam/workspace/playsound/song.wav"
  • "file:///workspace\\playsound\\song.wav"

不一样,它应该更像file://C/Users/liam/workspace/playsound/song.wav或其他一些。

您还应该在网址/中使用\而不是"file://workspace/playsound/song.wav",但已经说过,只使用File#getURL#getURI

会更简单

答案 2 :(得分:0)

您的网址缺少您的驱动器号。您可以为包含驱动器号的正确文件URL构建字符串,也可以向File对象请求URL,或者您可以在另一个答案中提供建议。