Android录制音频

原创 2012年03月28日 20:20:42

我们通常可以通过以下步骤在Android中录制音频或视频

(1)   创建android.media.MediaRecorder的一个实例。

(2)   创建android.content.ContentValues的一个实例,并添加TITLE、TIMESTAMP及重要的MIME_TYPE等属性。

(3)   使用android.content.ContentResolver为数据创建一个目标文件路径。

(4)   要在视图界面上设置预览显示,可以使用MediaRecorder.setPreviewDisplay()方法。

(5)   使用MediaRecorder.setAudioSource()设置音频来源。

(6)   使用MediaRecorder.setOutputFormat()设置输出文件格式。

(7)   使用MediaRecorder.setAudioEncoder()设置音频编码。

(8)   使用prepare()和start()准备和开始录制。

(9)   使用stop()和release()正常停止和清除录制过程。

代码如下:

------------------------RecordingActivity --------------------------

package cn.com.pan;
import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.provider.MediaStore.MediaColumns;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class RecordingActivity extends Activity {
 MediaRecorder mRecorder;
 File mSampleFile = null;
 static final String SAMPLE_PREFIX = "recording";
 static final String SAMPLE_EXTENSION = ".mp3";
 private static final String TAG = "RecordingActivity";
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  this.mRecorder = new MediaRecorder();
  Button startRecording = (Button) this.findViewById(R.id.startRecording);
  Button stopRecording = (Button) this.findViewById(R.id.stopRecording);
  startRecording.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    startRecording();
   }
  });
  stopRecording.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    stopRecording();
    addToDB();
   }
  });
 }
 protected void addToDB() {
  ContentValues values = new ContentValues(3);
  long current = System.currentTimeMillis();
  values.put(MediaColumns.TITLE, "test_audio");
  values.put(MediaColumns.DATE_ADDED, (int) (current / 1000));
  values.put(MediaColumns.MIME_TYPE, "audio/mp3");
  values.put(MediaColumns.DATA, mSampleFile.getAbsolutePath());
  ContentResolver contentResolver = getContentResolver();
  Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
  Uri newUri = contentResolver.insert(base, values);
  sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri));
 }
 protected void startRecording() {
  this.mRecorder = new MediaRecorder();
  this.mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  this.mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  this.mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  this.mRecorder.setOutputFile(this.mSampleFile.getAbsolutePath());
  try {
   this.mRecorder.prepare();
  } catch (IllegalStateException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  } catch (IOException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
  this.mRecorder.start();
  if (this.mSampleFile == null) {
   File sampleDir = Environment.getExternalStorageDirectory();
   try {
    this.mSampleFile = File.createTempFile(
      RecordingActivity.SAMPLE_PREFIX,
      RecordingActivity.SAMPLE_EXTENSION, sampleDir);
   } catch (IOException e) {
    // TODO Auto-generated catch block
    Log.e(TAG, "sdcard access error");
    return;
   }
  }
 }
 protected void stopRecording() {
  this.mRecorder.stop();
  this.mRecorder.release();
 }
}

--------------------------------main.xml -------------------------------------

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <Button android:id="@+id/startRecording" android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:text="start"></Button>
 <Button android:id="@+id/stopRecording" android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:text="stop"></Button>
</LinearLayout>

---------------------------------AndroidManifest.xml---------------------------

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="cn.com.pan" android:versionCode="1" android:versionName="1.0">
 <application android:icon="@drawable/icon" android:label="@string/app_name">
  <activity android:name=".RecordingActivity" android:label="@string/app_name">
   <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
  </activity>
 </application>
 <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
 <uses-sdk android:minSdkVersion="3" />
</manifest>

如果在计算机的音频系统中播放音乐,Android Emulator将选取该音乐并直接录制到音频缓冲区中(并不是从麦克风进行实际录制)。然后可以轻松测试该音频文件,方法是打开Android Music Player并选择Playlist>Recently Added。播放器就会播放刚录制的音频文件了。

 

Android音频开发之使用AudioRecord录制

本文主要是记录Android端音频开发 本例记录使用AudioRecord 录制音频,播放使用AudioTrack,存储的文件为pcm 只是简单的测试用例,界面同上文 注意添加权限 1 . ...
  • I_do_can
  • I_do_can
  • 2017年01月02日 10:14
  • 1605

Android播放器MediaPlayer与MediaRecorder:录制音频并播放

 Android播放器MediaPlayer与MediaRecorder:录制音频并播放 以下以使用Android的MediaPlayer和MediaRecorder录制音频为例加以说明: ...
  • zhangphil
  • zhangphil
  • 2015年11月24日 23:28
  • 1889

Android录制声音文件(音频),并播放

Android录制声音文件(音频),并播放
  • u014620028
  • u014620028
  • 2016年04月29日 20:15
  • 8121

Android录制音频之使用MediaRecorder实现录音

  • 2017年11月05日 11:35
  • 136KB
  • 下载

Android实时录制音频为Mp3格式

  • 2017年07月20日 15:34
  • 804KB
  • 下载

Android通过Intent调用系统的录音器功能录制音频

  • 2017年11月04日 12:21
  • 133KB
  • 下载

Android音频录制和播放 支持原生系统调用和自定义页面播放

  • 2017年11月15日 11:03
  • 15.44MB
  • 下载

android用MediaRecoder录制音频

  • 2015年06月29日 17:18
  • 2.19MB
  • 下载

Android播放器MediaPlayer与MediaRecorder:录制音频并播放

 Android播放器MediaPlayer与MediaRecorder:录制音频并播放 以下以使用Android的MediaPlayer和MediaRecorder录制音频为例加以说明: ...
  • zhangphil
  • zhangphil
  • 2015年11月24日 23:28
  • 1889

android实现之高清音频录制编码

场景说明: 在现在有安卓手机中AudioRecord录制出的音频是通过扬声器或表克风录制出来的。对于外录即扬声器录制的视频而言,音质十分渣。对于想要录制现场的声音如开会时,两人对话时声音证据保存的声...
  • it_flower
  • it_flower
  • 2015年12月16日 10:51
  • 1329
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android录制音频
举报原因:
原因补充:

(最多只允许输入30个字)