1

我有两个想要模拟在 3D 空间中不同点生成的 wav 文件,就像从矩形 4 通道麦克风阵列中听到的那样。也就是说,理想的输出将是单个 4 通道 wav 文件或已知同步的 4 个单通道 wav 文件。

我目前的方法并不是那么好,但原则上它可以工作。我在 jReality 模拟中从它们的位置播放这两种声音(选择只是因为我已经有一个方便的 jReality 模拟)。这有两个问题:A)jReality 只支持单个麦克风位置,B)它直接从 jReality 到 javasound,然后从那里输出我的扬声器。为了解决 A,我应该能够定位麦克风、录音、移动麦克风并重复。不幸的是,我不知道如何解决 B,我知道记录必须来自我的 java 代码,因为这是同步它的唯一方法。

所以问题是双重的,首先,有没有更好的方法来模拟音频混合和衰减?其次,有没有办法拦截已经发送到 javasound 的东西并将它们存储到文件中?

4

1 回答 1

1

完全可以从四个源(AudioInputLines)读取并在“每帧”级别处理它们。通常编码器有一个 while 循环来读取传入的音频数据。每次读取缓冲区(对于四个源,您将有四个缓冲区),您会将传入的字节解码为声音数据,应用您的混合算法,然后根据您的音频格式将结果重新转换回字节。

如果将上述内容包装在 TargetDataLine 中,则可以记录它。

Java 声音教程以一种“大图”的方式涵盖了这一点,但如果您之前没有遇到过主要概念(关于使用 javax.sound.sampled 库),那么值得一看。

于 2013-07-10T18:49:46.153 回答