我正在尝试使用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中。
有人熟悉这种问题吗?