需要一个简单的录音例子

我需要在Android中使用AudioRecorder进行简单的录音和播放示例。 我尝试使用MediaRecorder,它工作正常。

你的意思是AudioRecord ? 使用Google Code Search搜索例如“AudioRecord.OnRecordPositionUpdateListener”。 顺便说一下, AudioRecord会录音,而不是播放。

也可以看看:

  • 提高Android音频录制质量?
  • Android AudioRecord类 – 快速处理实时麦克风音频,设置回调function

这是录音的示例代码。

  private Runnable recordRunnable = new Runnable() { @Override public void run() { byte[] audiodata = new byte[mBufferSizeInBytes]; int readsize = 0; Log.d(TAG, "start to record"); // start the audio recording try { mAudioRecord.startRecording(); } catch (IllegalStateException ex) { ex.printStackTrace(); } // in the loop to read data from audio and save it to file. while (mInRecording == true) { readsize = mAudioRecord.read(audiodata, 0, mBufferSizeInBytes); if (AudioRecord.ERROR_INVALID_OPERATION != readsize && mFos != null) { try { mFos.write(audiodata); } catch (IOException e) { e.printStackTrace(); } } } // stop recording try { mAudioRecord.stop(); } catch (IllegalStateException ex) { ex.printStackTrace(); } getActivity().runOnUiThread(new Runnable() { @Override public void run() { mRecordLogTextView.append("\n Audio finishes recording"); } }); // close the file try { if (mFos != null) mFos.close(); } catch (IOException e) { e.printStackTrace(); } } }; 

那么你需要两个按钮(或者一个在不同的时间充当不同的function)来启动和停止记录线程。

  mRecordStartButton = (Button) rootView .findViewById(R.id.audio_record_start); mRecordStartButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // initialize the audio source int recordChannel = getChoosedSampleChannelForRecord(); int recordFrequency = getChoosedSampleFrequencyForRecord(); int recordBits = getChoosedSampleBitsForRecord(); Log.d(TAG, "recordBits = " + recordBits); mRecordChannel = getChoosedSampleChannelForSave(); mRecordBits = getChoosedSampleBitsForSave(); mRecordFrequency = recordFrequency; // set up the audio source : get the buffer size for audio // record. int minBufferSizeInBytes = AudioRecord.getMinBufferSize( recordFrequency, recordChannel, recordBits); if(AudioRecord.ERROR_BAD_VALUE == minBufferSizeInBytes){ mRecordLogTextView.setText("Configuration Error"); return; } int bufferSizeInBytes = minBufferSizeInBytes * 4; // create AudioRecord object mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, recordFrequency, recordChannel, recordBits, bufferSizeInBytes); // calculate the buffer size used in the file operation. mBufferSizeInBytes = minBufferSizeInBytes * 2; // reset the save file setup String rawFilePath = WaveFileWrapper .getRawFilePath(RAW_PCM_FILE_NAME); try { File file = new File(rawFilePath); if (file.exists()) { file.delete(); } mFos = new FileOutputStream(file); } catch (Exception e) { e.printStackTrace(); } if (mInRecording == false) { mRecordThread = new Thread(recordRunnable); mRecordThread.setName("Demo.AudioRecord"); mRecordThread.start(); mRecordLogTextView.setText(" Audio starts recording"); mInRecording = true; // enable the stop button mRecordStopButton.setEnabled(true); // disable the start button mRecordStartButton.setEnabled(false); } // show the log info String audioInfo = " Audio Information : \n" + " sample rate = " + mRecordFrequency + "\n" + " channel = " + mRecordChannel + "\n" + " sample byte = " + mRecordBits; mRecordLogTextView.setText(audioInfo); } }); mRecordStopButton = (Button) rootView .findViewById(R.id.audio_record_stop); mRecordStopButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mInRecording == false) { Log.d(TAG, "current NOT in Record"); } else { // stop recording if (mRecordThread != null) { Log.d(TAG, "mRecordThread is not null"); mInRecording = false; Log.d(TAG, "set mInRecording to false"); try { mRecordThread.join(TIMEOUT_FOR_RECORD_THREAD_JOIN); Log.d(TAG, "record thread joins here"); } catch (InterruptedException e) { e.printStackTrace(); } mRecordThread = null; // re-enable the start button mRecordStartButton.setEnabled(true); // disable the start button mRecordStopButton.setEnabled(false); } else { Log.d(TAG, "mRecordThread is null"); } } } }); 

然后你可以将pcm数据保存到WAV文件中。