我正在使用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"));
答案 0 :(得分:0)
您可以手动构建相应的AudioFormat
并用isFormatSupported(AudioFormat)进行检查
Java标准支持44100,但是48000碰碰运气,这取决于运行代码的计算机的操作系统。参见6.3 Audio Formats
如果您不想麻烦编码,Audacity可以很好地用作转换音频资源的工具。