问题
The tutorial http://download.oracle.com/javase/tutorial/sound/capturing.html does not cover how to select microphone.
I am enumerating mixers with the following code
System.out.println("Searching for microphones");
for(Mixer.Info mixerinfo : AudioSystem.getMixerInfo()) {
mixer = AudioSystem.getMixer(mixerinfo);
//System.out.println(mixerinfo.toString());
if( mixer.isLineSupported(Port.Info.MICROPHONE) ) {
mixers.add(mixer);
System.out.println(Integer.toString(mixers.size()) + ": " + mixerinfo.toString());
}
}
i.e. by presense of microphone input. But next, having a mixer, I can't get line to read.
If I use mixer.getTargetLineInfo()
, I receive an array of one Info
, which when passing to mixer.getLine
returns an object of type com.sun.media.sound.PortMixer$PortMixerPort
, which is not ducumented.
If I use mixer.getTargetLines()
I get an empty array.
If I create my own DataLine.Info
and pass it to the mixer's getLine
, I get unsupported exception.
So, what to do?
回答1:
Left-field suggestion.
Provide a visual rendering of each sound line, in a component along the lines of the AudioPlotPanel or a simpler RMS volume. It should not take the user too long to figure which sound line they are yodeling through. ;)
回答2:
I'm trying to do the same thing. I haven't quite found a good solution yet but I can tell you that's not working out because you're trying to get a DataLine from a Port mixer. If and when I figure it out I'll be sure to let you know.
来源:https://stackoverflow.com/questions/6261094/how-to-capture-sound-from-microphone-with-java-sound-api