Sunday, 20 December 2015

How Capture Sound via pc microphone in java?

       

import javax.sound.sampled.*;
import java.io.*;


public class JavaSoundRecorder {
 // record duration, in milliseconds
 static final long RECORD_TIME = 6000; // 1 minute

 // path of the wav file
 File wavFile = new File("RecordAudio.wav");

 // format of audio file
 AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE;

 // the line from which audio data is captured
 TargetDataLine line;

 /**
  * Defines an audio format
  */
 AudioFormat getAudioFormat() {
  float sampleRate = 8000.0F;//8000,11025,16000,22050,44100
  int sampleSizeInBits = 16;
  int channels =1;
  boolean signed = true;
  boolean bigEndian = true;
  AudioFormat format = new AudioFormat(sampleRate, sampleSizeInBits,channels, signed, bigEndian);
  return format;
 }

 /**
  * Captures the sound and record into a WAV file
  */
 void start() {
  try {
   AudioFormat format = getAudioFormat();
   DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);

   // checks if system supports the data line
   if (!AudioSystem.isLineSupported(info)) {
    System.out.println("Line not supported");
    System.exit(0);
   }
   line = (TargetDataLine) AudioSystem.getLine(info);
   line.open(format);
   line.start(); // start capturing

   System.out.println("Start capturing...");

   AudioInputStream ais = new AudioInputStream(line);

   System.out.println("Start recording...");

   // start recording
   AudioSystem.write(ais, fileType, wavFile);

  } catch (LineUnavailableException ex) {
   ex.printStackTrace();
  } catch (IOException ioe) {
   ioe.printStackTrace();
  }
 }

 /**
  * Closes the target data line to finish capturing and recording
  */
 void finish() {
  line.stop();
  line.close();
  System.out.println("Finished");
 }

 /**
  * Entry to run the program
  */
 public static void main(String[] args) {
  final JavaSoundRecorder recorder = new JavaSoundRecorder();

  // creates a new thread that waits for a specified
  // of time before stopping
  Thread stopper = new Thread(new Runnable() {
   public void run() {
    try {
     Thread.sleep(RECORD_TIME);
    } catch (InterruptedException ex) {
     ex.printStackTrace();
    }
    recorder.finish();
   }
  });

  stopper.start();

  // start recording
  recorder.start();
 }
}

 

No comments:

Post a Comment