什么是com.sun.media.sound.PortMixer -s类?

时间:2011-06-07 09:07:02

标签: java api audio implementation

我正在寻找一种方法来选择一个特定的麦克风来捕捉声音。我发现有混音器,isLineSupported(Port.Info.MICROPHONE)==true

但是这些混音器是无证件的com.sun.media.sound.PortMixer级,我对它们无能为力。

例如,我无法从TargetLines这些混音器中读取数据,因为它们不属于TargetDataLine类型。

这些搅拌机是什么?只是为了制造一些混乱?

2 个答案:

答案 0 :(得分: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 

我在'端口混音器''Port Microsoft LifeChat LX-3000'中遇到了同样的问题,它是'com.sun.media.sound.PortMixer'的一个实例。致电

AudioSystem.getTargetDataLine(format, mixerInfo)

在此混音器上提供以下内容:

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

下载源代码并在eclipse中的debug中运行表明,对于我的这个端口的实例,它只有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);

失败 - portMixer中只有javax.sound.sampled.Port.class行。在我的端口,该行是一个扬声器,但即使不是,内部存储的目标线似乎都是端口,这不是特别有用。甚至班上的评论都说'A Mixer只提供Ports。'

无论它用于什么,它似乎都没有得到源/目标线。说实话,我看不出它的用途。我会尝试查看系统上的其他混音器。如果你的像我的一样,那么你可以使用directsound捕捉。

答案 1 :(得分:0)

我希望source code对你有用。