我正在尝试使用Java Sound在Snow Leopard上从三个USB麦克风录制/处理音频(但如果切换到Windows可能会修复问题)。问题是,当我尝试使用对应于USB麦克风的混音器时,Java Sound告诉我该线路不受支持。具体来说,它会说...
可用混音器:
Java Sound音频引擎
USBMIC序列号#041270067
内置输入内置麦克风
Soundflower(2ch)
Soundflower(16ch)
异常线程"AWT-EventQueue-0" java.lang.IllegalArgumentException: 线路不支持:接口 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不兼容。有没有办法让它们“匹配”并和谐相处?我使用的麦克风确实有点奇怪。它们是为卡拉OK视频游戏SingStar设计的。麦克风本身带有标准的单声道线入连接器,插入一个小集线器(每个集线器两个),将它们转换为单个男性USB连接器。尽管有点奇怪,但它们在Audacity中作为独立通道可以正常工作,因此多通道录音显然是可能的,只是在Java中可能不行。
我还考虑使用像Soundflower这样的程序,在不同的程序之间共享音频。但是,我不确定这是否有效,因为我不知道如何使USB麦克风输入到Soundflower,然后将它们导入Java。一个快速的实验向我展示,我可以从麦克风中在Audacity中记录音频,通过Soundflower将其输出,然后在我的Java程序中处理。尽管如此,我仍然想在Java中实现实时处理。
有人熟悉这种问题吗?