【发布时间】:2011-05-13 11:41:43
【问题描述】:
我正在尝试使用 Snow Leopard 上的 Java Sound 录制/处理来自三个 USB 麦克风的一些音频(但如果可以解决问题,可以切换到 Windows)。问题是,当我尝试使用与 USB 麦克风对应的混音器时,Java Sound 告诉我该线路不受支持。具体来说,它是这样说的……
可用的混音器:
Java 声音音频引擎
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 彼此不喜欢。有没有办法让这两者“匹配”并相处融洽?
无可否认,我使用的麦克风有点奇怪。它们被用于名为 SingStar 的卡拉 OK 视频游戏中。麦克风本身有标准的单声道输入连接器,可插入一个小集线器(两个到一个集线器),将它们转换成一个公的 USB 连接器。不过,除了奇怪之外,它们似乎与 Audacity 作为单独的通道一起工作得非常好,因此使用它们进行多通道录制显然是可能的,只是在 Java 中可能不行。
我还考虑过使用像 Soundflower 这样的程序来在不同程序之间共享音频。但是,我不确定这是否可行,因为我看不到如何将 USB 麦克风输入到 Soundflower,然后将它们通过管道传输到 Java 中。一个快速的实验告诉我,我可以在 Audacity 中从麦克风录制音频,通过 Soundflower 将其输出,然后在我的 Java 程序中进行处理。不过,我想做的是让这一切都在 Java 中实时发生。
有人熟悉这类问题吗?
【问题讨论】:
-
嗯...Audacity 不能一次只从一台设备录制吗?那是你做的吗?
-
我不会指望 Java 声音 API 在更复杂的情况下是正确的。您能否使用第三方 Java 程序来验证问题不在 JRE 级别?或者也许使用更新的 JRE?在 Windows 上,USB 音频设备驱动程序也有点乏力。
-
我已经有好几年没有弄乱声音了。但这可能会有所帮助:每个声音设备都有自己的内部时钟。也有例外,您会在声卡/设备上看到它们作为时钟输入。以自己的时钟运行的设备将不同步。它们可能在记录开始时是同步的,但由于采样的速率略有不同,因此会有漂移。录音时间越长,漂移就越明显。
标签: java usb record microphone javasound