使用Java Sound API进行多通道USB录制?

Tom*_*Tom 45 java usb record microphone javasound

我正在尝试使用Snow Leopard上的Java Sound录制/处理来自三个usb麦克风的一些音频(但如果修复了某些内容,可以切换到Windows).问题是,当我尝试使用与usb麦克风相对应的混音器时,Java Sound告诉我该行不受支持.具体来说,它说...

可用的搅拌机:

Java声音音频引擎

USBMIC Serial#041270067

内置输入内置麦克风

Soundflower(2ch)

Soundflower(16ch)

线程"AWT-EventQueue-0"中的异常java.lang.IllegalArgumentException:Line unsupported:interface TargetDataLine支持格式PCM_SIGNED 96000.0 Hz,8位,立体声,2字节/帧,

...当我要求它选择USBMIC调音台时:

  Mixer mixer = AudioSystem.
          getMixer(mixerInfo[1]);
Run Code Online (Sandbox Code Playgroud)

我已经尝试将音频格式与麦克风(16位,44100Hz,立体声)的确切规格相匹配,但没有任何区别.

问题出在这里:

 final TargetDataLine line = (TargetDataLine)
        mixer.getLine(info);
Run Code Online (Sandbox Code Playgroud)

似乎混音器和TargetDataLine彼此不喜欢.有没有办法让这两个人"匹配"并相处?

我正在使用的麦克风确实有点奇怪.它们被用于名为SingStar的卡拉OK视频游戏中.麦克风本身具有标准的单声道输入连接器,插入一个小集线器(两个到集线器),将它们转换为单个公头usb连接器.但是,除了陌生之外,它们似乎与Audacity一起作为单独的频道完美地工作,所以用它们进行多声道录音显然是可能的,也许不是用Java.

我还考虑使用像Soundflower这样的程序,在不同程序之间共享音频.但是,我不确定这是否会起作用,因为我无法看到如何将USB麦克风输入到Soundflower,然后将它们传输到Java中.一个快速的实验告诉我,我可以从麦克风中录制Audacity中的音频,通过Soundflower将其输出,然后在我的Java程序中处理.不过,我想要做的就是让它全部用Java实现.

有人熟悉这类问题吗?

nma*_*rko 2

根据我的研究,特别是像这样的线程,您使用的麦克风很可能导致问题。该帖子指出,麦克风甚至在切换游戏时都是一个问题,因此我猜测切换平台时也会出现问题。

我的建议是 - 如果您还没有尝试过 - 使用不同的麦克风!我用过的大多数麦克风都有特殊的芯片控制器,可以将数据转换为与游戏系统兼容的数据。由于您在计算机操作系统上使用它,因此您可能会得到一些非常奇怪的效果,而这些效果是在 Playstation 或其他游戏系统上不会得到的。

希望这有帮助!快乐编码!