How to capture sound from microphone with java sound API?
Asked Answered
S

2

6

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?

Smocking answered 7/6, 2011 at 5:52 Comment(5)
Check out the source I posted on JavaSound mixer with both Port(s) and DataLine(s)? for similar source intended to explore Java Sound.Gatehouse
Are you analyzing names? Will it work with multilingual? I have garbage in most names.Smocking
Never tried it under locales that were not English. Your report is worrying.Gatehouse
Even if it was no garbage, how one would be able to know how the word "microphone" is translated into hundreds of languages? The creators of Java Sound API were to provide logical way to find appropriate line.Smocking
Have you succeed? Can you post the solution? Thanks!Aurore
G
2

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. ;)

Gatehouse answered 7/6, 2011 at 13:37 Comment(0)
N
0

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.

Nanosecond answered 17/4, 2013 at 13:8 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.