正如之前的人所说,不支持某些WAV格式.我只想补充一点细节.
我经常遇到以24位或32位编码的WAV,当16位是javax.sound.sampled支持的最大值时.
要了解特定的.wav文件,如果您有Windows,则可以右键单击该文件并检查属性和“摘要”选项卡.我不知道MAC或Linux系统上的等价物是什么.
了解格式后,您可以检查本教程中的代码是否支持:
http://download.oracle.com/javase/tutorial/sound/converters.html
请参阅“编写声音文件”中的讨论,其中介绍了AudioSystem方法“isFileTypeSupported”.
以下是我的PC上支持的格式列表.我通过Eclipse调试器检查LineInfo对象获得了这个列表.我怀疑这些是标准的,但我不确定:
BigEndian = false, PCM_UNSIGNED, channels = 1, bits = 8
BigEndian = false, PCM_SIGNED, channels = 1, bits = 8
BigEndian = false, PCM_SIGNED, channels = 1, bits = 16
BigEndian = true, PCM_SIGNED, channels = 1, bits = 16
BigEndian = false, PCM_UNSIGNED, channels = 2, bits = 8
BigEndian = false, PCM_SIGNED, channels = 2, bits = 8
BigEndian = false, PCM_SIGNED, channels = 2, bits = 16
BigEndian = true, PCM_SIGNED, channels = 2, bits = 16
我使用的大多数WAV文件是上面列表中的倒数第二个:小端,16位,PCM_SIGNED,立体声,以44100 fps编码.
以下代码也可以帮助您确定.wav文件的格式.
InputStream inStream = YourClass.class.getResourceAsStream("YourSound.wav");
AudioInputStream aiStream = AudioSystem.getAudioInputStream(inStream);
AudioFormat audioFmt = aiStream.getFormat();
DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFmt);
System.out.println(info);