2011-06-07 60 views
1

我正在尋找一種方法來選擇一個特定的麥克風來捕捉聲音。我發現有攪拌器,有isLineSupported(Port.Info.MICROPHONE)==true什麼是com.sun.media.sound.PortMixer-s類?

但這些混合器是無證的類com.sun.media.sound.PortMixer,我無能爲力。

例如,我無法從這些混音器的TargetLines中讀取數據,因爲它們不是TargetDataLine類型。

這些調音臺是什麼?只是爲了創造一些混亂?

回答

0

我希望這個source code可以對你有任何用處。

2

在仔細觀察後,我認爲這可能有所幫助。

從AudioSystem.getMixerInfo()

mixerDetails.getDescription() 
mixerDetails.getName() 

上的返回值運行此給出以下:

Direct Audio Device: DirectSound Playback 
Primary Sound Driver 

Direct Audio Device: DirectSound Playback 
Realtek HD Audio output 

Direct Audio Device: DirectSound Playback 
Microsoft LifeChat LX-3000 

Direct Audio Device: DirectSound Capture 
Primary Sound Capture Driver 

Direct Audio Device: DirectSound Capture 
Microsoft LifeChat LX-3000 

Direct Audio Device: DirectSound Capture 
Realtek HD Audio Input 

Software mixer and synthesizer 
Java Sound Audio Engine 

Port Mixer 
Port Realtek HD Audio output 

Port Mixer 
Port Realtek HD Audio Input 

Port Mixer 
Port Microsoft LifeChat LX-3000 

我有同樣的問題與「端口混頻器「港口微軟LifeChat LX -3000',這是'com.sun.media.sound.PortMixer'的一個實例。在此混頻器調用

AudioSystem.getTargetDataLine(format, mixerInfo)

給出如下:

Exception in thread "main" java.lang.IllegalArgumentException: Line unsupported: interface TargetDataLine 

下載源和Eclipse中的調試運行表明,我的這個端口的情況下,它只有javax.sound.sampled中.Port.class可用,因此調用AudioSystem.getTargetDataLine其在幕後做:

DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); 
Mixer mixer = AudioSystem.getMixer(mixerinfo); 
return (TargetDataLine) mixer.getLine(info); 

失敗 - 只有使用javax線。 sound.sampled.Port.class在portMixer中可用。在我的港口,那條線是一個揚聲器,但即使不是,內部存儲的目標線似乎都是端口,這不是特別有用。甚至在課堂上的評論都說'只提供端口的混音器'。

因此,無論它用於什麼,它似乎都沒有獲取源/目標行。說實話,我看不到它的用途。我會試着看看你係統上的其他混音器。如果你的是我的,那麼會有一個directsound捕捉,你可以用它來代替。