Android移动开发-使用MediaRecorder录制音频的实现

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

为了在Android应用中录制音频,Android提供了MediaRecorder类,使用MediaRecorder录制音频的过程很简单,步骤如下:
Step1:创建MediaRecorder对象;
Step2:调用MediaRecorder对象的setAudioSource()方法设置声音来源,一般传入MediaRecorder.AudioSource.MIC参数指定录制来自麦克风的声音;
Step3:调用MediaRecorder对象的setOutputFormat()方法设置所录制的音频文件格式;
Step4:调用MediaRecorder对象的setAudioEncoder()、setAudioEncodingBitRate(int bitRate)、setAudioSamplingRate(int samplingRate)方法设置所录制的声音编码格式、编码位率、采样率等,这些参数将可以控制所录制的声音品质、文件大小。一般来说,声音品质越好,声音文件越大;
Step5:调用MediaRecorder的setOutputFile(String path)方法设置所录制的音频文件的保存位置;
Step6:调用MediaRecorder的prepare()方法准备录制;
Step7:调用MediaRecorder对象的start()方法开始录制。

下面的Demo程序使用了MediaRecorder来录制声音。

  • layout/activity_main.xml界面布局代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="horizontal">

    <ImageButton
        android:id="@+id/record"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/record" />

    <ImageButton
        android:id="@+id/stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/stop" />
</LinearLayout>
  • MainActivity.java逻辑代码如下:
package com.fukaimei.recordsound;

import android.media.MediaRecorder;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.Toast;

import java.io.File;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    // 定义界面的两个按钮
    ImageButton record, stop;
    // 系统的音频文件
    File soundFile;
    MediaRecorder mRecorder;

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

    @Override
    public void onClick(View v) {
        // 单击录音按钮
        if (v.getId() == R.id.record) {
            if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                Toast.makeText(this, "SD卡不存在,请插入SD卡!", Toast.LENGTH_SHORT).show();
                return;
            }
            try {
                // 创建保存录音的音频文件
                soundFile = new File(Environment.getExternalStorageDirectory()
                        .getCanonicalFile() + "/sound.mp3");
                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 (Exception e) {
                e.printStackTrace();
            }
        } else if (v.getId() == R.id.stop) {  // 单击停止按钮
            if (soundFile != null && soundFile.exists()) {
                // 停止录音
                mRecorder.stop();
                // 释放资源
                mRecorder.release();
                mRecorder = null;
            }
        }
    }

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

上面的Demo程序中代码用于设置声音的相关参数,比如输出文件格式、声音的开源等等。

  • 注意:由于该程序需要使用系统的麦克风进行录音,因此还需要在清单文件AndroidManifest.xml文件中授权相应的权限:
<!-- 授予该程序录制声音的权限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <!-- 授予该程序向外部存储器写入数据的权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • Demo程序运行效果界面截图如下:
    这里写图片描述

Demo程序源码下载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值