1

我想要做的是我通过 TargetDataLine 类从麦克风捕获音频,用套接字发送它并通过 SourceDataLine 在另一端播放。问题是我正在捕获的麦克风仅支持:

AudioFormat format = new AudioFormat(48000, 16, 1, true, true);

我正在播放的扬声器仅支持:

AudioFormat format = new AudioFormat(32000, 16, 2, true, true);

当我直接得到48khz并推到32khz音频格式时,声音是有音调的,有什么方法可以将48khz单声道声音转换为32khz立体声?

4

1 回答 1

0

如果 Java 有一些内置的音频文件格式转换,您可以从音频教程线程上的“使用文件和格式转换器”帖子中了解它。

如果必须手动完成,请查看该页面上的第一个代码示例,特别注意注释中的点

  // Here, do something useful with the audio data that's 
  // now in the audioBytes array...

如果并行运行输入和输出行,则可以使用线性插值从 48000 行获取数据并发布到 32000 行。比例为 3:2。

因此,对于输入中的 3 个 PCM 数据点,计算输出的 2 个 PCM 数据点。

对于输入,您可以将 in[0] 发送到 out[0] 并将 in 1 /2 和 in[2]/2 的总和发送到 out 1

复制从单声道转换为立体声的值。

于 2017-03-28T21:10:10.397 回答