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();
}
}
});
}
}