Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class RecordTask implements Runnable{
- public static final int SAMPLERATE = 44100;
- public static final int SOURCE = MediaRecorder.AudioSource.MIC;
- public static final int CHANELS = AudioFormat.CHANNEL_IN_MONO;
- public static final int ENCODING = AudioFormat.ENCODING_PCM_16BIT;
- public static final int DEFAULT_BLOCKSIZE = 1024;
- private static int[] mSampleRates = new int[] { 8000, 11025, 22050, 44100 };
- public AudioRecord findAudioRecord() {
- for (int rate : mSampleRates) {
- for (short audioFormat : new short[] { AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT }) {
- for (short channelConfig : new short[] { AudioFormat.CHANNEL_IN_MONO, AudioFormat.CHANNEL_IN_STEREO }) {
- try {
- // Log.d(C.TAG, "Attempting rate " + rate + "Hz, bits: " + audioFormat + ", channel: "
- // + channelConfig);
- int bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat);
- if (bufferSize != AudioRecord.ERROR_BAD_VALUE) {
- // check if we can instantiate and have a success
- AudioRecord recorder = new AudioRecord(AudioSource.DEFAULT, rate, channelConfig, audioFormat, bufferSize);
- if (recorder.getState() == AudioRecord.STATE_INITIALIZED)
- return recorder;
- }
- } catch (Exception e) {
- // Log.e(C.TAG, rate + "Exception, keep trying.",e);
- }
- }
- }
- }
- return null;
- }
- private AudioRecord recorder;
- private LinkedBlockingDeque<short[]> queueData;
- private int block_size;
- private boolean isRecording;
- public LinkedBlockingDeque<short[]> getQueueData() {
- return queueData;
- }
- public void setQueueData(LinkedBlockingDeque<short[]> queueData) {
- this.queueData = queueData;
- }
- public int getBlockSize() {
- return block_size;
- }
- private void init(LinkedBlockingDeque<short[]> queue,int block_size)
- {
- this.queueData = queue;
- this.block_size = block_size;
- this.isRecording = false;
- this.recorder = new AudioRecord(SOURCE, SAMPLERATE, CHANELS, ENCODING, 8192);
- }
- public RecordTask()
- {
- init(new LinkedBlockingDeque<short[]>(), DEFAULT_BLOCKSIZE);
- }
- public RecordTask(LinkedBlockingDeque<short[]> queue,int block_size)
- {
- init(queue,block_size);
- }
- public RecordTask(LinkedBlockingDeque<short[]> queue)
- {
- init(queue,DEFAULT_BLOCKSIZE);
- }
- @Override
- public void run() {
- recorder.startRecording();
- isRecording = true;
- while(isRecording)
- {
- short[] buf = new short[block_size];
- int numShort = recorder.read(buf, 0, block_size);
- if(numShort>0)
- {
- queueData.add(buf);
- }
- else
- {
- break;
- }
- }
- recorder.stop();
- //recorder.release();
- }
- public void stopRecording()
- {
- this.isRecording = false;
- }
- public void reset(){
- this.isRecording = true;
- this.queueData.clear();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement