getAudioInputStream无法将[立体声,4字节/帧]流转换为[单声道,2字节/帧]

时间:2010-05-14 21:49:29

标签: java audio audio-streaming javasound

我正在使用javasound并且有一个格式的AudioInputStream PCM_SIGNED 8000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian

当target_format为AudioSystem.getAudioInputStream(target_format, original_stream)

时,使用PCM_SIGNED 8000.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian会产生'IllegalArgumentException:不支持的转换'

是否可以在每次read()调用后手动转换此流?如果是,怎么样?
一般来说,如何比较两种格式并判断转换是否可行?

1 个答案:

答案 0 :(得分:0)

是否可以在每次read()调用后手动转换此流?如果是的话,怎么样?

我不确定你想做什么,但这似乎没必要。在实际创建音频输入流后,缓冲数据和进行格式转换更有意义。

在我看来,您正在从立体声切换到单声道以尝试保存数据传输大小。您可以通过适当的编码(对于GSM,mu-law或A-law)实现相同的目标。请注意,您可能需要一个插件才能实现此转换。更多信息: Java Sound Resources

可以在每次read()调用后转换流,但如果您的流无法转换,则无法转换。

一般来说,如何比较两种格式并判断转换是否可行? 您可以定义两种格式,并使用AudioSystem检查转换是否可行。

boolean bConversionSupported = AudioSystem.isConversionSupported(targetFormat, sourceFormat);