我正在使用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()调用后手动转换此流?如果是,怎么样?
一般来说,如何比较两种格式并判断转换是否可行?
答案 0 :(得分:0)
是否可以在每次read()调用后手动转换此流?如果是的话,怎么样?
我不确定你想做什么,但这似乎没必要。在实际创建音频输入流后,缓冲数据和进行格式转换更有意义。
在我看来,您正在从立体声切换到单声道以尝试保存数据传输大小。您可以通过适当的编码(对于GSM,mu-law或A-law)实现相同的目标。请注意,您可能需要一个插件才能实现此转换。更多信息: Java Sound Resources
可以在每次read()调用后转换流,但如果您的流无法转换,则无法转换。
一般来说,如何比较两种格式并判断转换是否可行? 您可以定义两种格式,并使用AudioSystem检查转换是否可行。
boolean bConversionSupported = AudioSystem.isConversionSupported(targetFormat, sourceFormat);