How to capture sound from microphone with java sou

2019-03-29 05:49发布

问题:

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.