AudioInputStream不起作用

我每次用户按下按钮时都会尝试播放.wav声音,但会抛出exception:

 线程“Thread-0”中的exceptionjava.lang.IllegalArgumentException:格式无效
     at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.createStream(PulseAudioDataLine.java:142)
    在org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:99)
    在org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:283)
    在org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:402)
    在org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:453)
    在Uber.play(Uber.java:534)
    在优步$ 5.run(Uber.java:340)
    在java.lang.Thread.run(Thread.java:724)

这是代码:

//Play Audio File public void play(String file) throws LineUnavailableException, UnsupportedAudioFileException, IOException { AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File(file)); Clip clip = AudioSystem.getClip(); clip.open(inputStream); clip.start(); } 

我设法让它运作起来。 这是我使用的代码。 请记住,我需要这个只是为了播放短的beep.wav声音。 对于较长的声音文件似乎有些麻烦。 让我知道它是否适合你们,如果你设法用这段代码播放更长的声音。

 public void play(String file) throws LineUnavailableException, UnsupportedAudioFileException, IOException { try { AudioInputStream inputStream = AudioSystem.getAudioInputStream(this.getClass().getResource(file)); AudioFormat format = inputStream.getFormat(); DataLine.Info info = new DataLine.Info(Clip.class, format); Clip clip = (Clip)AudioSystem.getLine(info); clip.open(inputStream); clip.start(); } catch (IOException | LineUnavailableException | UnsupportedAudioFileException e1) { e1.printStackTrace(); } } 

你传递的文件路径有问题。 当我使用相同的代码从JFileChooser获取文件时,它工作正常。 测试一下。

另请参阅Javasound wiki标记以处理不支持的音频文件类型

 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.UnsupportedAudioFileException; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import static javax.swing.JFrame.EXIT_ON_CLOSE; import javax.swing.SwingUtilities; public class TestAudio { public TestAudio() { JButton button = new JButton("Choose file"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser chooser = new JFileChooser(); File file = null; int returnVal = chooser.showOpenDialog(null); if (returnVal == JFileChooser.APPROVE_OPTION) { file = chooser.getSelectedFile(); } String fileName = file.getAbsolutePath(); try { play(fileName); } catch (Exception ex) { ex.printStackTrace(); } } }); JFrame frame = new JFrame(); frame.add(button); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setSize(300, 300); frame.setVisible(true); } public void play(String file) throws LineUnavailableException, UnsupportedAudioFileException, IOException { AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File(file)); Clip clip = AudioSystem.getClip(); clip.open(inputStream); clip.start(); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new TestAudio(); } }); } }