首页 > 代码库 > 第六十五讲:Android之多媒体(Media)(三)

第六十五讲:Android之多媒体(Media)(三)

知识使用才有价值,智能共享方显实力!


本讲内容:MediaRecoder 类 录音的使用


一、使用MediaRecorder录制音频实现步骤:

1、创建MediaRecorder对象

2、通过MediaRecoder对象的setAudioSource()方法设置录音的来源

3、通过MediaRecoder对象的setOutputFormat()设置输出格式

4、通过MediaRecoder对象的setAudioEncoder()、setAudioEncodeingBitRate(int bitRate)、setAudioAudioSamling(int samplingRate)设置所录制的声音的编码格式、编码位率、采样率

5、通过MediaRecorder对象的setOutputFile(String path)方法设置录制的音频文件的保存位置

6、调用MeidaRecorder对象的prepare()做预期准备录制

7、调用MediaRecorder对象的start()开始录制声音


我们通过一个例子感受一下,代码的讲解都写在注释里了

下面是MainActivity.java主界面文件:

public class MainActivity extends Activity implements OnClickListener {
	private Button start;
	private Button stop;
	private MediaRecorder mediaRecorder;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		start = (Button) findViewById(R.id.start);
		stop = (Button) findViewById(R.id.stop);
		start.setOnClickListener(this);
		stop.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.start:
			// 先检测下是否含有SDCard
			if (!Environment.getExternalStorageState().equals(
					Environment.MEDIA_MOUNTED)) {
				Toast.makeText(MainActivity.this, "SD卡不存在,请插入SD卡",
						Toast.LENGTH_LONG).show();
				return;
			}

			// 创建音频输出的文件路径
			File file = new File("/sdcard/"+ "dan"
					+ new DateFormat().format("yyyyMMdd_hhmmss",
							Calendar.getInstance(Locale.CHINA))+ ".amr");
			Toast.makeText(getApplicationContext(),
			"正在录音,录音文件在" + file.getAbsolutePath(), Toast.LENGTH_LONG).show();

			// 创建录音对象
			mediaRecorder = new MediaRecorder();
			// 从麦克风源进行录音
			mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
			// 设置录制的声音输出格式
			mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
			// 设置声音的编码格式
			mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
			// 设置录音的输出(保存)的文件路径
			mediaRecorder.setOutputFile(file.getAbsolutePath());
			try {
				// 创建文件
				file.createNewFile();
				// 准备录制
				mediaRecorder.prepare();
			} catch (Exception e) {
				// TODO: handle exception
			}
			// 开始录制
			mediaRecorder.start();
			start.setText("录音中……");
			break;
		case R.id.stop:
			if (mediaRecorder != null) {
				mediaRecorder.stop();
				// 释放资源
				mediaRecorder.release();
				mediaRecorder = null;
				start.setText("录音");
			Toast.makeText(getApplicationContext(), "录音完毕",Toast.LENGTH_LONG).show();
			}
			break;
		}
	}

	@Override
	protected void onDestroy() {// 更加完美可以写
		if (mediaRecorder != null) {
			mediaRecorder.stop();
			// 释放资源
			mediaRecorder.release();
			mediaRecorder = null;
			start.setText("录音");
			Toast.makeText(getApplicationContext(), "录音完毕", Toast.LENGTH_LONG).show();
		}
		super.onDestroy();
	}
}


因为录音和写存储卡都需要权限声明,在AndroidManifest.xml注册:

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

下面是运行结果:



录音文件在存储卡的根目录几个以dan开头的amr文件




本讲就到这里,Take your time and enjoy it

第六十五讲:Android之多媒体(Media)(三)