就像之前的人所说,有些WAV格式是不支持的。我会补充一些细节。
我经常遇到编码为24位或32位的WAV文件,而javax.sound.sampled支持的最大位数是16位。
如果您使用Windows系统,可以右键单击文件并检查属性和“摘要”选项卡来了解特定的.wav文件。我不知道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)
URL
(独占)而不是File
。如果这不是小程序,请使用Clip
而不是AudioClip
。 - Andrew ThompsonwaitUntilDone()
https://dev59.com/9nRB5IYBdhLWcg3wl4Kc - javing