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

Posted

技术标签:

【中文标题】getAudioInputStream 无法将 [立体声,4 字节/帧] 流转换为 [单声道,2 字节/帧]【英文标题】:getAudioInputStream can not convert [stereo, 4 bytes/frame] stream to [mono, 2 bytes/frame] 【发布时间】:2010-05-14 21:49:28 【问题描述】:

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

当 target_format 为 PCM_SIGNED 8000.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian 时,使用 Audiosystem.getAudioInputStream(target_format, original_stream) 会产生“IllegalArgumentException: Unsupported Conversion”

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

【问题讨论】:

【参考方案1】:

是否可以在每次 read() 调用后手动转换此流?如果是,如何?

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

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

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

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

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

【讨论】:

以上是关于getAudioInputStream 无法将 [立体声,4 字节/帧] 流转换为 [单声道,2 字节/帧]的主要内容,如果未能解决你的问题,请参考以下文章

Java getAudioInputStream 试图读取音频文件,得到 javax.sound.sampled.UnsupportedAudioFileException,

分析音频文件java

从java中的Url获取音频持续时间

Java中读文件操作

java声音淡出

icecast 音频客户端的问题