我正在尝试使用 Snow Leopard 上的 Java Sound 录制/处理来自三个 USB 麦克风的一些音频(但如果它修复了问题,可以切换到 Windows)。问题是,当我尝试使用与 USB 麦克风对应的混音器时,Java Sound 告诉我该线路不受支持。具体来说,它说...
可用的混音器:
Java 声音音频引擎
USBMIC 序列号#041270067
内置输入内置麦克风
音花 (2ch)
音花 (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 彼此不喜欢。有没有办法让这两者“匹配”并相处融洽?
我使用的麦克风确实有点奇怪。它们被用于名为 SingStar 的卡拉 OK 视频游戏中。麦克风本身具有标准的单声道输入连接器,可插入一个小集线器(两个到一个集线器),将它们转换为单个公 USB 连接器。不过,除了奇怪之外,它们似乎与 Audacity 作为单独的通道一起工作得很好,所以用它们进行多通道录制显然是可能的,只是在 Java 中可能不行。
我还考虑过使用像 Soundflower 这样的程序来在不同程序之间共享音频。但是,我不确定这是否可行,因为我看不到如何将 USB 麦克风输入到 Soundflower,然后将它们通过管道传输到 Java 中。一个快速的实验告诉我,我可以在 Audacity 中从麦克风录制音频,通过 Soundflower 将其输出,然后在我的 Java 程序中进行处理。不过,我想做的是让这一切都在 Java 中实时发生。
有人熟悉这种问题吗?