使用 Java Sound API 进行多声道 USB 录制?
我正在尝试在Snow Leopard上使用Java Sound录制/处理来自三个USB麦克风的一些音频(但如果它可以解决问题,则可以切换到Windows)。问题是,当我尝试使用与USB麦克风对应的混音器时,Java Sound告诉我该线路不受支持。具体来说,它说这个...
可用混频器:
Java 声音音频引擎
USBMIC 串行# 041270067
内置输入内置麦克风
声花(2通道)
声花 (16ch)
线程 “AWT-EventQueue-0” java.lang.IllegalArgument 异常: 行不受支持: 接口 TargetDataLine 支持格式 PCM_SIGNED 96000.0 Hz, 8 位, 立体声, 2 字节/帧,
...当我要求它选择USBMIC混音器时:
Mixer mixer = AudioSystem.
getMixer(mixerInfo[1]);
我尝试将音频格式与麦克风的确切规格(16位,44100Hz,立体声)相匹配,但这没有任何区别。
问题在这里突然出现:
final TargetDataLine line = (TargetDataLine)
mixer.getLine(info);
混合器和TargetDataLine似乎并不喜欢对方。有没有办法让这两者“匹配”并相处?
我使用的麦克风确实有点奇怪。它们被制作用于一个名为SingStar的卡拉OK视频游戏。麦克风本身具有标准的单声道线路输入连接器,可插入一个小集线器(两个插入集线器),将其转换为单个公头USB连接器。然而,除了奇怪之外,它们似乎与Audacity作为单独的通道完全一起工作,因此使用它们进行多通道录制显然是可能的,只是可能不是在Java中。
我还考虑使用像Soundflower这样的程序,在不同程序之间共享音频。但是,我不确定这是否有效,因为我看不到如何将USB麦克风输入到Soundflower,然后将它们管道传输到Java中。一个快速实验告诉我,我可以用麦克风以Audacity录制音频,通过Soundflower将其通过管道输出,然后在我的Java程序中进行处理。不过,我想做的是让这一切在Java中实时发生。
有人熟悉这种问题吗?