Android 需要一个简单的音频录制示例吗

Android 需要一个简单的音频录制示例吗,android,audio,alsa,audiorecord,mediarecorder,Android,Audio,Alsa,Audiorecord,Mediarecorder,我在简单的录音和播放的例子需要使用android中的录音机。我试过使用MediaRecorder,它工作得很好。你是说录音?使用谷歌代码搜索,例如“AudioRecord.OnRecordPositionUpdateListener”。顺便说一句,AudioRecord进行录制,而不是播放 另见: 以下是音频录制的示例代码 private Runnable recordRunnable = new Runnable() { @Override public voi

我在简单的录音和播放的例子需要使用android中的录音机。我试过使用MediaRecorder,它工作得很好。

你是说
录音
?使用谷歌代码搜索,例如“AudioRecord.OnRecordPositionUpdateListener”。顺便说一句,
AudioRecord
进行录制,而不是播放

另见:


    • 以下是音频录制的示例代码

          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();
              }
      
          }
      };
      
      然后需要两个按钮(或者一个在不同的时间充当不同的功能)来启动和停止记录线程

              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文件中