I have been reading up on the Sound API for Java for a couple of days I am unable to make sense of it. I am decent programmer, I just having difficulty getting my head around the API.
I have been trying to capture audio from my microphone and display a wave graph in real time.
I am having trouble capturing audio, they say in the tutorial to do this, but I cant seem to get it to work.
Any suggestions and help would be much appreciated, a line by line answer would be ideal.
Please and thank you.
import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.DataLine; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.TargetDataLine; public class FindLine { public static void main (String[] args){ AudioFormat format = new AudioFormat(22000,16,2,true,true); TargetDataLine line; DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); // format is an AudioFormat object if (!AudioSystem.isLineSupported(info)) { // Handle the error ... } // Obtain and open the line. try { line = (TargetDataLine) AudioSystem.getLine(info); line.open(format); } catch (LineUnavailableException ex) { // Handle the error ... } } }
try { line = (TargetDataLine) AudioSystem. getLine(info); line. open(format); } catch (LineUnavailableException ex) { // Handle the error ... } } }
Obtain a TargetDataLine object which represents an input data line from which audio data can be captured, using the method getLineInfo(DataLine.Info) of the AudioSystem class. Open and start the target data line to begin capturing audio data. Create an AudioInputStream object to read data from the target data line.
The Java Sound API specification provides low-level support for audio operations such as audio playback and capture (recording), mixing, MIDI sequencing, and MIDI synthesis in an extensible, flexible framework.
Capturing refers to the process of obtaining a signal from outside the computer. A common application of audio capture is recording, such as recording the microphone input to a sound file.
This will get you the default one set by your OS.
AudioFormat format = new AudioFormat(8000.0f, 16, 1, true, true); TargetDataLine microphone = AudioSystem.getTargetDataLine(format);
To select a particular input device (TargetDataLine) it is better to enumerate the mixers and filter the name of the Mixer you want.
Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo(); for (Mixer.Info info: mixerInfos){ Mixer m = AudioSystem.getMixer(info); Line.Info[] lineInfos = m.getSourceLineInfo(); for (Line.Info lineInfo:lineInfos){ System.out.println (info.getName()+"---"+lineInfo); Line line = m.getLine(lineInfo); System.out.println("\t-----"+line); } lineInfos = m.getTargetLineInfo(); for (Line.Info lineInfo:lineInfos){ System.out.println (m+"---"+lineInfo); Line line = m.getLine(lineInfo); System.out.println("\t-----"+line); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With