分类:C#、Android、VS2015;

创建日期:2016-03-13

一、简介

利用Android提供的MediaRecorder类可直接录制音频。

1、权限要求

录制音频和视频需要下面的权限:

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

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

2、基本设计步骤

(1)初始化和录制

录制音频的基本设计步骤如下:

(1) 创建MediaRecorder对象。

(2) 调用SetAudioSource方法指定使用哪个硬件设备捕获音频输入(比如麦克风)。

(3) 调用SetOutputFormat方法指定录音输出文件的格式。

(4) 调用SetAudioEncoder方法设置音频编码类型。

(5) 调用SetOutputFile方法指定输出的音频文件。

(6) 调用Prepare方法初始化录音器。

(7) 调用Start方法开始录音。

下面的代码演示了如何实现:

protected MediaRecorder recorder;

void RecordAudio (String filePath)

{

try {

if (File.Exists (filePath)) {

File.Delete (filePath);

}

if (recorder == null) {

recorder = new MediaRecorder (); // Initial state.

} else {

recorder.Reset ();

recorder.SetAudioSource (AudioSource.Mic);

recorder.SetOutputFormat (OutputFormat.ThreeGpp);

recorder.SetAudioEncoder (AudioEncoder.AmrNb);

// Initialized state.

recorder.SetOutputFile (filePath);

// DataSourceConfigured state.

recorder.Prepare (); // Prepared state

recorder.Start (); // Recording state.

}

} catch (Exception ex) {

Console.Out.WriteLine( ex.StackTrace);

}

}

(2)停止录音

调用MediaRecorder 的Stop方法停止录音:

recorder.Stop();

(3)清除录音占用的资源

一旦停止了MediaRecorder,调用Reset方法将其置于空闲状态(idle state):

recorder.Reset();

当不再使用MediaRecorder实例时,必须释放其占用的资源:

recorder.Release();

二、示例

该例子的功能是录制来自麦克风的音频,如果笔记本带有麦克风,可直接通过模拟器来观察运行效果。录制以后,可直接单击播放按钮测试录制的效果。

这同样也是一个简单的示例,没有考虑录音过程中电话打入的情况,也没有考虑其他复杂的控制。

1、运行截图

2、设计步骤

(1)AndroidManifest.xml文件

在该文件中添加下面的权限(如果有了就不用添加了)。

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

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

(2)添加ch2004Main.axml文件

<?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/ch2004_btnRecStart"      android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:text="开始录音" />  <Button      android:id="@+id/ch2004_btnRecStop"      android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:text="停止录音" />  <Button      android:id="@+id/ch2004_btnPlayStart"      android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:text="播放录音" />  <Button      android:id="@+id/ch2004_btnPlayStop"      android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:text="停止播放录音" />  <TextView      android:textAppearance="?android:attr/textAppearanceMedium"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:id="@+id/ch2004_textView1"      android:gravity="center_horizontal"      android:layout_marginTop="30dp" /></LinearLayout>

(3)添加ch2004MainActivity.cs文件

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Android.App;using Android.Content;using Android.OS;using Android.Runtime;using Android.Views;using Android.Widget;using Android.Media;namespace MyDemos.SrcDemos{    [Activity(Label = "ch2004MainActivity")]    [IntentFilter(new[] { Intent.ActionMain },        Categories = new[] { Intent.CategoryDefault, ch.MyDemosCategory })]    public class ch2004MainActivity : Activity    {        string filePath;        MediaRecorder recorder;        MediaPlayer player;        Button btnRecStart, btnRecStop, btnPlayStart, btnPlayStop;        TextView textView1;        protected override void OnCreate(Bundle savedInstanceState)        {            base.OnCreate(savedInstanceState);            SetContentView(Resource.Layout.ch2004Main);            //指定SD卡录制的音频文件路径            filePath = string.Format("{0}/{1}/myRecord.mp3",                Android.OS.Environment.ExternalStorageDirectory.Path,                Android.OS.Environment.DirectoryMusic);            textView1 = FindViewById<TextView>(Resource.Id.ch2004_textView1);            btnRecStart = FindViewById<Button>(Resource.Id.ch2004_btnRecStart);            btnRecStart.Click += delegate            {                textView1.Text = "正在录音...";                try                {                    StartRecorder();                }                catch (Exception ex)                {                    Console.Out.WriteLine(ex.StackTrace);                }            };            btnRecStop = FindViewById<Button>(Resource.Id.ch2004_btnRecStop);            btnRecStop.Click += delegate            {                StopRecorder();                textView1.Text = "录音已停止。";            };            btnPlayStart = FindViewById<Button>(Resource.Id.ch2004_btnPlayStart);            btnPlayStart.Click += delegate            {                textView1.Text = "正在播放录音...";                try                {                    player = new MediaPlayer();                    player.Reset();                    player.SetDataSource(filePath);                    player.Prepare();                    player.Start();                }                catch (Exception ex)                {                    Console.WriteLine(ex.StackTrace);                }            };            btnPlayStop = FindViewById<Button>(Resource.Id.ch2004_btnPlayStop);            btnPlayStop.Click += delegate            {                player.Stop();                textView1.Text = "播放已停止。";            };        }        private void StartRecorder()        {            try            {                if (System.IO.File.Exists(filePath))                {                    System.IO.File.Delete(filePath);                }                if (recorder == null)                {                    recorder = new MediaRecorder(); // Initial state.                }                else                {                    recorder.Reset();                }                recorder.SetAudioSource(AudioSource.Mic);  //录制来自麦克风的声音                recorder.SetOutputFormat(OutputFormat.Mpeg4);                recorder.SetAudioEncoder(AudioEncoder.AmrNb);                recorder.SetOutputFile(filePath);                recorder.Prepare();                recorder.Start();            }            catch (Exception ex)            {                Console.Out.WriteLine(ex.StackTrace);            }        }        private void StopRecorder()        {            if (recorder != null)            {                recorder.Stop();                recorder.Release();                recorder = null;            }        }    }}

在模拟器中观察运行的效果,单击【录音】按钮开始录音,录音完毕后,直接单击【播放录音】就可以测试录制效果。

更多相关文章

  1. 【Android】20.3 拍照和视频录制
  2. spring feign
  3. Android下使用lamemp3库将PCM录音数据压缩为MP3格式
  4. android基于Socket的系统调用实现
  5. Eclipse中Android公共库的正确建立及调用方法
  6. Android中仿微信录音,录音后的raw文件转mp3文件
  7. 【BUG修补匠】 Android微信支付返回码-1之坑(首次调用成功第二次
  8. unity调用android语音识别
  9. Android调用安卓自带摄像头API开启双摄

随机推荐

  1. Android下如何获得通话记录和短信记录
  2. Android SharedPreferences的工具类 - 简
  3. Emergency Call 分析 (Android 4.4 R1)
  4. 转android项目开发 工作日志 2011.10.8--
  5. android 分享到QQ空间的所有操作
  6. Android log抓取工具
  7. 转:android 图片叠加效果——两种方法
  8. Android在API推荐的方式来实现SQLite数据
  9. android之uses-permission
  10. Could not find com.android.tools.build