手机一般都提供了麦克风硬件,而Android系统就可以利用该硬件来录制音频了。

为了在Android应用中录制音频,Android提供了MediaRecorder类,使用MediaRecorder录制音频的过程如下:

1、创建MediaRecorder对象。

2、调用MediaRecorder对象的setAudioSource()方法设置声音来源,一般传入MediaRecorder.AudioSource.MIC参数指定录制来自麦克风的声音。

3、调用MediaRecorder对象的setOutputFormat()设置所录制的音频文件的格式。

4、调用MediaRecorder对象的setAudioEncoder()、setAudioEncodingBitRate(int  bitRate)、setAudioSamplingRate(int  samplingRate)设置所录制的声音的编码格式、编码位率、采样率等,这些参数将可以控制所录制的声音的品质、文件的大小。一般来说,声音品质越好,声音文件越大。

5、调用MediaRecorder的setOutputFile(String  path)方法设置录制的音频文件的保存位置。

6、调用MediaRecorder的prepare()方法准备录制。

7、调用MediaRecorder对象的start()方法开始录制。

8

录制完成,调用MediaRecorder对象的stop()方法停止录制,并调用release()方法释放资源。

注:步骤3、4两个步骤千万不能搞反,否则程序将会抛出IllegalStateException异常。

import java.io.File;
import java.io.IOException;

import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.Toast;

public class RecodeSound extends Activity implements OnClickListener{
  //程序中的按钮
  ImageButton recode;
  ImageButton stop;
  //系统的音频文件
  File soundFile;
  MediaRecorder mRecorder;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recode_sound);
    //获取程序界面中的两个按钮
    recode = (ImageButton) findViewById(R.id.recode);
    stop = (ImageButton) findViewById(R.id.stop);
    //为两个按钮的单击事件绑定监听器
    recode.setOnClickListener(this);
    stop.setOnClickListener(this);
  }

  @Override
  protected void onDestroy() {
    if(soundFile != null && soundFile.exists()){
      //停止录音
      mRecorder.stop();
      //释放资源
      mRecorder.release();
      mRecorder = null;
    }
    super.onDestroy();
  }

  @Override
  public void onClick(View source) {
    switch(source.getId()){
      //单击录音按钮
      case R.id.recode:
        if(!Environment.getExternalStorageState()
              .equals(android.os.Environment.MEDIA_MOUNTED)){
          Toast.makeText(RecodeSound.this, "SD卡不存在,请插入SD卡", 5000).show();
          return;
        }
        try {
          //创建保存录音的音频文件
          soundFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile()+"/sound.amr");
          mRecorder = new MediaRecorder();
          //设置录音的声音来源
          mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
          //设置录制的声音的输出格式(必须在设置声音编码格式之前设置)
          mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
          //设置声音编码的格式
          mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
          mRecorder.setOutputFile(soundFile.getAbsolutePath());
          mRecorder.prepare();
          //开始录音
          mRecorder.start();
        } catch (IOException e) {
          e.printStackTrace();
        }
        break;
      //单击停止按钮
      case R.id.stop:
        if(soundFile != null && soundFile.exists()){
          //停止录音
          mRecorder.stop();
          //释放资源
          mRecorder.release();
          mRecorder = null;
        }
        break;
    }

  }

}

录制完成后将可以看到/mnt/sdcard/目录下生成一个sound.amr文件,这就是刚刚录制的音频文件-----Android模拟器将会直接使用宿主电脑上的麦克风,一次如果读者的电脑上有麦克风,那么该程序即可正常录制声音。

上面的程序需要使用系统的麦克风进行录音,因此需要向该程序授予录音的权限没也就是在AndroidManifest.xml文件中增加如下配置:

<!-- 授予该程序录制声音的权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>

使用MediaRecorder录制音频的更多相关文章

  1. Android MediaRecorder录制音频

    今天介绍一下在Android中怎么录制音频,在Android中使用MediaRecorder来录制音频,步骤: 1.创建MediaRecorder对象. 2.调用MediaRecorder对象的set ...

  2. Android项目开发五-《星星生活志》1.使用MediaRecorder录制音频

    Android设备实现录制音频的简单demo 转载请注明; http://blog.csdn.net/u013670933/article/details/26089487 代码例如以下: publi ...

  3. Android MediaRecorder录制播放音频

    1.请求录制音频权限 <user-permission android:name="android.permission.RECORD_AUDIO"/> RECORD_ ...

  4. android如何播放和录制音频

    视频录制功能正在走来,在Androidsdk中有与之相关的类:android.media.MediaRecorder.当然,因为模拟器上没有提供必要的硬件设施,所以在学习过程中并不能实现.Media能 ...

  5. 使用MediaRecorder录制视频短片

    MediaRecorder除了可用于录制音频之外,还可用于录制视频,使用MediaRecorder录制视频与录制音频的步骤基本相同.只是录制视频时不仅需要采集声音,还需要采集图像.为了让MediaRe ...

  6. Android使用的开发MediaRecorder录制视频

    MediaRecorder除了使用录制音频.还可用于录制视频.关于MediaRecorder的具体解释大家能够參考<Android开发之MediaRecorder类具体解释>.使用Medi ...

  7. Android使用的开发MediaRecorder录制声音

    至 Android 录制声音的应用,Android提供 MediaRecorder 类别.大约MediaRecorder可以参考一个特定的解释<Android开发之MediaRecorder类具 ...

  8. Android多媒体-MediaRecorder 录制音视频

    不多说,直接上代码,有具体凝视 MyAudioRecord.java import java.io.File; import java.io.IOException; import android.a ...

  9. Android录制音频的三种方式

    对于录制音频,Android系统就都自带了一个小小的应用,可是使用起来可能不是特别的灵活.所以有提供了另外的俩种. 下边来介绍下这三种录制的方式; 1.通过Intent调用系统的录音器功能,然后在录制 ...

随机推荐

  1. select into from 和 insert into select 的区别和用法及 SQL SELECT INTO 中Undeclared variable错误解决办法

    今天试了一下数据表中的数据备份到另一个空的数据表,然后使用了SQL SELECT INTO语句,然后提示Undeclared variable......错误,现在在这里做下总结并给出解决办法. 应用 ...

  2. maven使用入门(pom)

    mvn clean complie mvn clean test mvn clean package mvn clean install(该任务将该项目输出的jar安装到了Maven本地仓库中) 各个 ...

  3. iOS - Swift 异常处理

    前言 在 Swift 1.0 时代是没有异常处理和抛出机制的,如果要处理异常,要么使用 if else 语句或 switch 语句判断处理,要么使用闭包形式的回调函数处理,再要么就使用 NSError ...

  4. poj2420A Star not a Tree?(模拟退火)

    链接 求某一点到其它点距离和最小,求这个和,这个点 为费马点. 做法:模拟退火 #include <iostream> #include<cstdio> #include< ...

  5. 1503 - A PRIMARY KEY must include all columns in the table's partitioning function

    1503 - A PRIMARY KEY must include all columns in the table's partitioning function 错误的原因:表的主键字段必须包含分 ...

  6. Android目标大纲

    为了更好的便于复习 特制作此份大纲 1 J2SE基础 集合框架源码解析2 JVM3 TCP/IP HTTP4 数据结构与算法5 Android6 项目技术点7 开源库解析8 设计模式

  7. 【spring-quartz】 定时调度,时间设置

    .   CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 ...

  8. c/c++小知识

    1.printf计算参数时是从右到左 2.(int&)a 表示把a在内存中的值强行当作int数来处理 3.float四字节,1位符号位(正数为0),8位指数位(0采取01111111),23位 ...

  9. Android控件之CheckBox(复选框控件)

    一.有两种状态: 选中状态(true).未选中状态(false) 二.属性 android:id = "@+id/checkbox" android:layout_width=&q ...

  10. 深入理解JVM虚拟机-2自动内存管理机制

    java虚拟机所管理的内存将会包括一下几个运行时数据区域. 程序计数器: 程序计数器是一块较小的内存空间.字节码解析式工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支.循环.跳转 ...