【问题标题】:How to Record Voice in android?如何在android中录制语音?
【发布时间】:2012-01-06 01:45:12
【问题描述】:

我正在尝试在 android 中录制语音但它会在路径 (sdcard/filename) 上创建 .mp3 文件但是当我运行此文件时它不会播放,因为它不会录制语音。

这是我的代码

public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(v.getId()){
        case(R.id.Button01):
            try {
                //audio.start();
                startRecord();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        case(R.id.Button02):
            //audio.stop();
            stopRecord();
        }

    }
     private void startRecord() throws IllegalStateException, IOException{
           // recorder = new MediaRecorder(); 
            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);  //ok so I say audio source is the microphone, is it windows/linux microphone on the emulator? 
            recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
            recorder.setOutputFile("/sdcard/Music/"+System.currentTimeMillis()+".amr"); 
            recorder.prepare(); 
            recorder.start();      
        }

        private void stopRecord(){
            recorder.stop();
          //recorder.release();
        }



}

清单文件

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

【问题讨论】:

  • 你检查过文件大小是否正确吗?
  • 当我尝试运行它时,它不会创建超过 1,0007 字节的文件,它将在 1 秒内完成。

标签: android voice recording


【解决方案1】:

来自 Google 的官方示例链接 https://developer.android.com/guide/topics/media/mediarecorder.html#example

我建议只关注那个,因为它保证是最新的和安全的。

【讨论】:

    【解决方案2】:

    请参考Android Audio Capture documentation录制音频和播放录制的音频。

    【讨论】:

      【解决方案3】:

      如果您搜索过 google,您会在他们的 API 指南中找到:

      /*
       * The application needs to have the permission to write to external storage
       * if the output file is written to the external storage, and also the
       * permission to record audio. These permissions must be set in the
       * application's AndroidManifest.xml file, with something like:
       *
       * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
       * <uses-permission android:name="android.permission.RECORD_AUDIO" />
       *
       */
      package com.android.audiorecordtest;
      
      import android.app.Activity;
      import android.widget.LinearLayout;
      import android.os.Bundle;
      import android.os.Environment;
      import android.view.ViewGroup;
      import android.widget.Button;
      import android.view.View;
      import android.view.View.OnClickListener;
      import android.content.Context;
      import android.util.Log;
      import android.media.MediaRecorder;
      import android.media.MediaPlayer;
      
      import java.io.IOException;
      
      
      public class AudioRecordTest extends Activity
      {
          private static final String LOG_TAG = "AudioRecordTest";
          private static String mFileName = null;
      
          private RecordButton mRecordButton = null;
          private MediaRecorder mRecorder = null;
      
          private PlayButton   mPlayButton = null;
          private MediaPlayer   mPlayer = null;
      
          private void onRecord(boolean start) {
              if (start) {
                  startRecording();
              } else {
                  stopRecording();
              }
          }
      
          private void onPlay(boolean start) {
              if (start) {
                  startPlaying();
              } else {
                  stopPlaying();
              }
          }
      
          private void startPlaying() {
              mPlayer = new MediaPlayer();
              try {
                  mPlayer.setDataSource(mFileName);
                  mPlayer.prepare();
                  mPlayer.start();
              } catch (IOException e) {
                  Log.e(LOG_TAG, "prepare() failed");
              }
          }
      
          private void stopPlaying() {
              mPlayer.release();
              mPlayer = null;
          }
      
          private void startRecording() {
              mRecorder = new MediaRecorder();
              mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
              mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
              mRecorder.setOutputFile(mFileName);
              mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
      
              try {
                  mRecorder.prepare();
              } catch (IOException e) {
                  Log.e(LOG_TAG, "prepare() failed");
              }
      
              mRecorder.start();
          }
      
          private void stopRecording() {
              mRecorder.stop();
              mRecorder.release();
              mRecorder = null;
          }
      
          class RecordButton extends Button {
              boolean mStartRecording = true;
      
              OnClickListener clicker = new OnClickListener() {
                  public void onClick(View v) {
                      onRecord(mStartRecording);
                      if (mStartRecording) {
                          setText("Stop recording");
                      } else {
                          setText("Start recording");
                      }
                      mStartRecording = !mStartRecording;
                  }
              };
      
              public RecordButton(Context ctx) {
                  super(ctx);
                  setText("Start recording");
                  setOnClickListener(clicker);
              }
          }
      
          class PlayButton extends Button {
              boolean mStartPlaying = true;
      
              OnClickListener clicker = new OnClickListener() {
                  public void onClick(View v) {
                      onPlay(mStartPlaying);
                      if (mStartPlaying) {
                          setText("Stop playing");
                      } else {
                          setText("Start playing");
                      }
                      mStartPlaying = !mStartPlaying;
                  }
              };
      
              public PlayButton(Context ctx) {
                  super(ctx);
                  setText("Start playing");
                  setOnClickListener(clicker);
              }
          }
      
          public AudioRecordTest() {
              mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
              mFileName += "/audiorecordtest.3gp";
          }
      
          @Override
          public void onCreate(Bundle icicle) {
              super.onCreate(icicle);
      
              LinearLayout ll = new LinearLayout(this);
              mRecordButton = new RecordButton(this);
              ll.addView(mRecordButton,
                  new LinearLayout.LayoutParams(
                      ViewGroup.LayoutParams.WRAP_CONTENT,
                      ViewGroup.LayoutParams.WRAP_CONTENT,
                      0));
              mPlayButton = new PlayButton(this);
              ll.addView(mPlayButton,
                  new LinearLayout.LayoutParams(
                      ViewGroup.LayoutParams.WRAP_CONTENT,
                      ViewGroup.LayoutParams.WRAP_CONTENT,
                      0));
              setContentView(ll);
          }
      
          @Override
          public void onPause() {
              super.onPause();
              if (mRecorder != null) {
                  mRecorder.release();
                  mRecorder = null;
              }
      
              if (mPlayer != null) {
                  mPlayer.release();
                  mPlayer = null;
              }
          }
      }
      

      SOURCE

      【讨论】:

      • 在用户使用麦克风或扬声器时需要自动记录,但这里您使用的是按钮监听器,
      【解决方案4】:
      import java.io.File;
      import java.io.IOException;
      
      import android.media.MediaPlayer;
      import android.media.MediaRecorder;
      import android.os.Environment;
      
      public class AudioRecorder {
      
          final MediaRecorder recorder = new MediaRecorder();
          public final String path;
      
          public AudioRecorder(String path) {
              this.path = sanitizePath(path);
          }
      
          private String sanitizePath(String path) {
              if (!path.startsWith("/")) {
                  path = "/" + path;
              }
              if (!path.contains(".")) {
                  path += ".3gp";
              }
              return Environment.getExternalStorageDirectory().getAbsolutePath()
                      + path;
          }
      
          public void start() throws IOException {
              String state = android.os.Environment.getExternalStorageState();
              if (!state.equals(android.os.Environment.MEDIA_MOUNTED)) {
                  throw new IOException("SD Card is not mounted.  It is " + state
                          + ".");
              }
      
              // make sure the directory we plan to store the recording in exists
              File directory = new File(path).getParentFile();
              if (!directory.exists() && !directory.mkdirs()) {
                  throw new IOException("Path to file could not be created.");
              }
      
              recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
              recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
              recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
              recorder.setOutputFile(path);
              recorder.prepare();
              recorder.start();
          }
      
          public void stop() throws IOException {
              recorder.stop();
              recorder.release();
          }
      
          public void playarcoding(String path) throws IOException {
              MediaPlayer mp = new MediaPlayer();
              mp.setDataSource(path);
              mp.prepare();
              mp.start();
              mp.setVolume(10, 10);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-10
        • 2013-03-24
        • 2015-12-12
        • 1970-01-01
        • 1970-01-01
        • 2011-08-23
        • 2014-05-19
        相关资源
        最近更新 更多