import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaRecorder;
import android.util.Log;
public class Mic {
private static final int RECORDER_SAMPLERATE = 48000;
private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_STEREO;
private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
short[] audioData;
private int bufferSize = 1024;
private AudioRecord recorder = null;
private AudioTrack audioTrack = null;
private Thread recordingThread = null;
private boolean isRecording = false;
private String output;
public Mic(String path) {
audioData = new short[bufferSize]; // short array that pcm data is put
Log.d("TEST", String.valueOf(bufferSize));
// into.
output = path;
}
public void startRecording() {
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
RECORDER_SAMPLERATE, RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING, bufferSize);
playAudioTrack();
int i = recorder.getState();
if (i == 1)
recorder.startRecording();
isRecording = true;
recordingThread = new Thread(new Runnable() {
@Override
public void run() {
writeAudioDataToFile();
}
}, "AudioRecorder Thread");
recordingThread.start();
}
private void playAudioTrack() {
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
RECORDER_SAMPLERATE, //sample rate
RECORDER_CHANNELS, //2 channel
RECORDER_AUDIO_ENCODING, // 16-bit
bufferSize,
AudioTrack.MODE_STREAM );
audioTrack.play();
}
private void writeAudioDataToFile() {
byte[] data = new byte[bufferSize];
while (isRecording) {
recorder.read(data, 0, bufferSize);
audioTrack.write(data, 0, bufferSize);
}
}
public void stopRecording() {
if (null != recorder) {
isRecording = false;
int i = recorder.getState();
if (i == 1)
recorder.stop();
recorder.release();
recorder = null;
recordingThread = null;
}
}
}