2016-01-22 115 views
1

我试图让Java在两个输出(前后音频插孔)中播放不同的立体声音频。Java中的多个混音器输出

我的声卡被配置为独立处理两个输出,并且在Windows混音器中,我可以使它们分别发出测试声音,所以它不是卡片问题。

我尝试了Change Mixer to output sound to in java的方法,使用不同的输出,通过使用不同的混合器获得两个剪辑,使用AudioSystem.getClip(AudioSystem.getMixerInfo()[i]);。但是,此代码行仅适用于在Windows的默认音频输出中输出的Java Sound Audio Engine(AudioSystem.getMixerInfo()[0])。还有其他的东西抛出

java.lang.IllegalArgumentException: Line unsupported: interface Clip supporting format PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, big-endian 

以下代码示例产生一个5秒长的白噪声并播放它1秒钟,然后结束。它会打印混音器信息,如how do I get Mixer channels layout in java所示。它目前输出到“Java声音音频引擎”混音器,尝试更改为其他混音器会引发上述异常。

​​

这里是混频器的信息。此代码在连接两个输出插孔和Windows识别为两个不同输出设备(扬声器和耳机)的情况下运行。看起来只有Java的音频引擎可以播放声音。

info: Java Sound Audio Engine, version 1.0 
mixer [email protected] 
    info: interface SourceDataLine supporting 8 audio formats 
    format: PCM_SIGNED unknown sample rate, 8 bit, mono, 1 bytes/frame, 
    format: PCM_UNSIGNED unknown sample rate, 8 bit, mono, 1 bytes/frame, 
    format: PCM_SIGNED unknown sample rate, 8 bit, stereo, 2 bytes/frame, 
    format: PCM_UNSIGNED unknown sample rate, 8 bit, stereo, 2 bytes/frame, 
    format: PCM_SIGNED unknown sample rate, 16 bit, mono, 2 bytes/frame, big-endian 
    format: PCM_SIGNED unknown sample rate, 16 bit, mono, 2 bytes/frame, little-endian 
    format: PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, big-endian 
    format: PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, little-endian 
    info: interface Clip supporting 8 audio formats, and buffers of 0 to 4194304 bytes 

info: Microsoft ?T?E???h, version Unknown Version 
mixer [email protected] 

info: Stereo Mixer (Realtek High Defi, version Unknown Version 
mixer [email protected] 

info: Port Realtek HD Audio 2nd output (Re, version 6.1 
mixer [email protected] 

info: Port Stereo Mixer (Realtek High Defi, version 6.1 
mixer [email protected] 
    info: ?}?X? source port 

info: Port Speakers (Realtek High Definiti, version 6.1 
mixer [email protected] 

由于其他限制,我正在使用Java 6。此外,有些名称可能是因为我在日本环境中,Eclipse不会以正确的编码获取名称(我尝试将所有内容更改为UTF-8和Shift_JIS,但没有任何更改,但我认为它不相关对这个问题)。

换句话说,它看起来不能从不同的混音器的剪辑中输出,因为Java只能输出到转到Windows默认音频设备的“Java Sound Audio Engine”。有什么办法让其他搅拌机工作吗?有没有其他方法可以使用多个音频输出?

更新:它看起来像this problem was already fixed但我仍然无法得到它的工作。我禁用了“立体声混音”记录设备,跑在链接中给出的示例代码,并获得该输出:

MIXER 0: Java Sound Audio Engine, version 1.0 
OUTPUT LINE (SourceDataLine) 0: interface SourceDataLine supporting 8 audio formats 
OUTPUT LINE (SourceDataLine) 1: interface Clip supporting 8 audio formats, and buffers of 0 to 4194304 bytes 

MIXER 1: Port Realtek HD Audio 2nd output (Re, version 6.1 
INPUT LINE (TargetDataLine) 0: HEADPHONE target port 

MIXER 2: Port Speakers (Realtek High Definiti, version 6.1 
INPUT LINE (TargetDataLine) 0: SPEAKER target port 

所以看起来只有Java声音音频引擎可以输出声音既搅拌机前和后面的音频插孔被视为输入线。通过Windows默认播放设备中的Clip或SourceDataLine输出播放音频。

另外,它看起来像他们solved问题by using DirectAudio但我仍然没有弄清楚如何使用它们。

回答

0

在不同的计算机上进行测试时,我通过升级到Java 1.6.0_17(这对于从Matlab调用Java的环境限制仍然可以)解决了这个问题,因此将列出DirectAudio驱动程序(即使它看起来像它应该从Java 1.5工作)。每个DirectAudio声音设备为每个设备提供一个SourceDataLine和一个剪辑。