如何录制javasound应用程序当前正在播放的声音?

时间:2013-07-09 20:10:00

标签: java javasound

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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