【问题标题】:getAudioInputStream can not convert [stereo, 4 bytes/frame] stream to [mono, 2 bytes/frame]getAudioInputStream 无法将 [立体声,4 字节/帧] 流转换为 [单声道,2 字节/帧]
【发布时间】: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() 调用后手动转换此流?如果是,怎么做?
一般来说,如何比较两种格式并判断是否可以转换?

【问题讨论】:

    标签: java audio audio-streaming javasound


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多