package com.source.sounds; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; //¼��PCM������ //��Ҫ����Ȩ�� <uses-permission android:name="android.permission.RECORD_AUDIO" /> //��Ҫ�޸�Audio_Sender��ķ������ݲ��� //һ�������޸ı��� public class Audio_Recorder implements Runnable { private volatile boolean isRecording = false; //¼����־ private AudioRecord audioRecord; //¼�Ʋ���ѡ�� private static final int audioSource = MediaRecorder.AudioSource.MIC; private static final int sampleRate = 8000; //ȡ����8000hz private static final int channelConfig = AudioFormat.CHANNEL_IN_MONO; //������ private static final int audioFormat = AudioFormat.ENCODING_PCM_16BIT; //16λ private static final int BUFFER_FRAME_SIZE =160; private int audioBufSize = 0; private short[] samples;// ������ private int bufferRead = 0;// ��recorder�ж�ȡ��samples�Ĵ�С private int bufferSize = 0;// samples�Ĵ�С private Audio_Encoder encoder = Audio_Encoder.getInstance(); public Audio_Recorder() { } public void startRecording() { bufferSize = BUFFER_FRAME_SIZE; audioBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat); if (audioBufSize == AudioRecord.ERROR_BAD_VALUE) { //do something return; } samples = new short[audioBufSize]; if (null == audioRecord) { audioRecord = new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, audioBufSize); } //start to record data new Thread(this).start(); } public void run() { //start the encoder encoder.startEncoding(); try { audioRecord.startRecording(); } catch (IllegalStateException e) { this.isRecording = false; return; } this.isRecording = true; while (isRecording) { bufferRead = audioRecord.read(samples, 0, bufferSize); if (bufferRead > 0) { // add the data to the encoder encoder.addData(samples, bufferRead); } try { Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); } } audioRecord.stop(); encoder.stopEncoding(); } public void stopRecording() { this.isRecording = false; } public void setSoundsEntity(SoundsEntity soundsEntity) { encoder.setSoundsEntity(soundsEntity); } }