Androidの录音实现

本文介绍如何使用Android的MediaRecorder类实现录音功能。包括初始化、设置音频源、输出格式及编码等关键步骤,并提供完整的示例代码。
Androidの录音实现
1. 录音功能需要使用android.media.MediaRecorder来完成, 这里我们列出几个重要的使用方法,也是最常用的录音接口。
    1、MediaRecorder recorder = new MediaRecorder();  //初始化Recorder
    2、recorder.setAudioSource(MediaRecorder.AudioSource.MIC);  //设置麦克风
    3、 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置输出格式
    4、recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  //设置音频编码Encoder
    5、recorder.setOutputFile(“/sdcard/ataaw/ataaw.3gp”);  //设置音频文件保存路径
    6、recorder.prepare();  //prepare

    7、recorder.start();  //开始录制

    以上就是Android为我们提供的录音开发接口基本使用方法,比较简单方便的得以实现。

2.使用MediaRecorder录音需要通过如下6个步骤完成:

(1)设置音频来源(一般为麦克风)。

(2)设置音频输出格式。

(3)设置音频编码方式。

(4)设置输出音频的文件名。

(5)调用MediaRecorder类的perpare方法。

(6)调用MediaRecorder类的start方法开始录音。

实现录音功能的完整代码如下:

MediaRecorder mediaRecorder = new MediaRecorder();
// 第1步:设置音频来源(MIC表示麦克风)
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//第2步:设置音频输出格式(默认的输出格式)
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
//第3步:设置音频编码方式(默认的编码方式)
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
//创建一个临时的音频输出文件
audioFile = File.createTempFile("record_", ".amr");
//第4步:指定音频输出文件
mediaRecorder.setOutputFile(audioFile.getAbsolutePath());
//第5步:调用prepare方法
mediaRecorder.prepare();
//第6步:调用start方法开始录音
mediaRecorder.start();

上面的代码指定了一个临时的音频输出文件,这就意味着每次将生成不同的音频文件。文件名的格式是record_N.amr,其中N是整数。在录完音后,在SD卡的根目录会看到很多这样的文件(由录音的次数多少决定amr文件的多少)。

       停止录音可以使用MediaRecorder类的stop方法,代码如下:

mediaRecorder.stop();
在生成amr文件后,可以使用MediaRecorder来播放amr文件。

3. 具体实现
package com.wyl.example;

import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Locale;
import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.text.format.DateFormat;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

//定义了本实例的主要Activity
public class MainActivity extends Activity {
	// 定义开始录音按钮
	private Button recordButton;
	// 定义停止录音按钮
	private Button stopButton;
	// 声明MediaRecorder对象
	private MediaRecorder mr;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 得到布局中的所有对象
		findView();
		// 设置对象的监听器
		setListener();
	}

	private void findView() {
		// TODO Auto-generated method stub
		// 得到布局中的所有对象
		recordButton = (Button) this.findViewById(R.id.btn_startvoicerecoding);
		stopButton = (Button) this.findViewById(R.id.btn_stopvoicerecoding);
	}

	private void setListener() {
		// 录音按钮点击事件
		recordButton.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// 设置文件的路径
				File file = new File("/sdcard/"
						+ "YY"
						+ new DateFormat().format("yyyyMMdd_hhmmss",
								Calendar.getInstance(Locale.CHINA)) + ".amr");
				Toast.makeText(getApplicationContext(),
						"正在录音,录音文件在" + file.getAbsolutePath(),
						Toast.LENGTH_LONG).show();
				// 创建录音对象
				mr = new MediaRecorder();
				// 从麦克风源进行录音
				mr.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
				// 设置输出格式
				mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
				// 设置编码格式
				mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
				// 设置输出文件
				mr.setOutputFile(file.getAbsolutePath());
				try {
					// 创建文件
					file.createNewFile();
					// 准备录制
					mr.prepare();
				} catch (IllegalStateException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
				// 开始录制
				mr.start();
				recordButton.setText("录音中……");
			}
		});

		// 停止按钮点击事件
		stopButton.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {

				if (mr != null) {
					// 停止录音
					mr.stop();
					// 释放所占的资源
					mr.release();
					mr = null;
					recordButton.setText("录音");
					Toast.makeText(getApplicationContext(), "录音完毕",
							Toast.LENGTH_LONG).show();
				}
			}
		});
	}
}

4. 代码下载



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值