立体声出现UnsupportedAudioFileException,但不是两声道音频

时间:2019-05-30 07:19:20

标签: java audio

我正在使用AudioInputStream在Java中进行一些基本的音频处理。我的程序可以正确加载用两个音轨编码的16位整数PCM音频,但不能用立体声编码。当呈现文件时(根据ffprobe)是

Input #0, wav, from XXX:
  Duration: 00:00:02.80, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s

一切都很好。但是,当出现

  Duration: 01:19:15.58, bitrate: 1536 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s

(这是我实际上要编辑的文件),失败并显示

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)

编码是相同的,并且似乎采样率差异不太可能引起此问题。似乎很像是立体声与2声道导致了此异常,但是立体声应该是两个声道,不是吗?

我可以通过以下方式复制该问题

AudioSystem.getAudioInputStream(new File("file under test"));

1 个答案:

答案 0 :(得分:0)

您可以手动构建相应的AudioFormat并用isFormatSupported(AudioFormat)进行检查

Java标准支持44100,但是48000碰碰运气,这取决于运行代码的计算机的操作系统。参见6.3 Audio Formats

如果您不想麻烦编码,Audacity可以很好地用作转换音频资源的工具。