我正在寻找一种方法来选择一个特定的麦克风来捕获声音。我发现有混音器,具有 isLineSupported(Port.Info.MICROPHONE)==true
。
但是这些混音器属于未记录的类com.sun.media.sound.PortMixer
,我对它们无能为力。
例如,我无法从这些混合器的 TargetLines
读取数据,因为它们不是 TargetDataLine
类型。
这些 blender 的用途是什么?只是为了制造一些困惑?
最佳答案
仔细研究后,我认为这可能会有所帮助。
在 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
我对“端口混合器”“端口 Microsoft LifeChat LX-3000”也有同样的问题,它是“com.sun.media.sound.PortMixer”的一个实例。调用
AudioSystem.getTargetDataLine(格式,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);
失败 - portMixer 中只有 javax.sound.sampled.Port.class 行可用。在我的端口中,该线路是扬声器,但即使不是,内部存储的目标线似乎都是端口,这并不是特别有用。甚至类里面的评论都说“仅提供端口的混音器。”
所以无论它的用途是什么,它似乎都没有获取源/目标行。说实话,我看不出它有什么用。我会尝试查看您系统上的其他混音器。如果您的和我的一样,您可以使用直接声音捕获来代替。
关于java - 什么是 com.sun.media.sound.PortMixer-s 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6262983/