Как говорили предыдущие люди, некоторые форматы WAV не поддерживаются. Я просто добавлю немного больше деталей.
Я часто сталкиваюсь с WAV, которые кодируются в 24-битном или 32-битном формате, когда 16-битный максимум - это максимум, который поддерживает javax.sound.sampled.
Чтобы узнать о конкретном WAV-файле, если у вас Windows, вы можете щелкнуть правой кнопкой мыши по файлу и проверить свойства, а также вкладку «Сводка». Я не знаю, что такое эквивалент в системе MAC или Linux.
Как только вы знаете формат, вы можете проверить, поддерживается ли он с помощью кода в этом руководстве:
http://download.oracle.com/javase/tutorial/sound/converters.html
См. Обсуждение в разделе «Запись звуковых файлов», где они представляют метод AudioSystem, «isFileTypeSupported».
Вот список форматов, которые поддерживаются на моем ПК. Я получил этот список путем проверки объекта LineInfo через отладчик Eclipse. Я подозреваю, что это стандартные, но я не уверен:
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 кадров в секунду.
Следующий код также может помочь вам выяснить формат ваших файлов .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);