我试图用Snow Leopard上的Java Sound录制/处理三个USB麦克风的audio(但是如果修复了问题,可以切换到Windows)。 问题是,当我尝试使用与USB麦克风相对应的调音台时,Java Sound告诉我该行不受支持。 具体来说,这是说… 可用的混音器: Java声音audio引擎 USBMIC串行#041270067 内置input内置麦克风 Soundflower(2ch) Soundflower(16ch) 线程“AWT-EventQueue-0”中的exceptionjava.lang.IllegalArgumentException:线路不支持:接口TargetDataLine支持格式PCM_SIGNED 96000.0 Hz,8位,立体声,2字节/帧, 当我要求它selectUSBMIC调音台时: Mixer mixer = AudioSystem. getMixer(mixerInfo[1]); 我已经尝试将audio格式与麦克风(16位,44100Hz,立体声)的确切规格进行匹配,并没有任何区别。 问题在这里出现: final TargetDataLine line = (TargetDataLine) mixer.getLine(info); 这似乎是搅拌机和TargetDataLine不喜欢对方。 有什么办法让这两个“匹配”,相处? 我使用的麦克风无疑是有点奇怪的。 他们被制作成名为SingStar的卡拉OKvideo游戏。 麦克风本身具有标准的单声道线路input连接器,可插入一个小型集线器(两个集线器),将其转换为一个单独的USB连接器。 除了奇怪之外,他们似乎和Audacity一起工作的很好,因此多渠道logging显然是可能的,也许不是Java。 我也考虑过使用像Soundflower这样的程序来共享不同程序之间的audio。 不过,我不能确定这将工作,因为我不知道如何使USB麦克风input到Soundflower,然后将它们pipe入Java。 一个快速实验告诉我,我可以从麦克风录制Audacity中的audio,通过Soundflower将其导出,然后在我的Java程序中进行处理。 不过,我想要做的是在Java中实时发生。 有人熟悉这种问题吗?
你能提出一个build议,我怎么写一首曲子呢? 我尝试了下面的代码片段,但是我得到了这个exception: import sun.audio.*; import java.io.*; class tester { public static void main(String args[]) throws Exception { InputStream in=new FileInputStream("tester.mp3"); AudioStream as=new AudioStream(in); AudioPlayer.player.start(as); } }