Android播放器MediaPlayer与MediaRecorder:录制音频并播放

以下以使用Android的MediaPlayer和MediaRecorder录制音频为例加以说明:
(1)Android MediaPlayer
本例以Android MediaPlayer播放Android音频资源为说明。使用MediaPlayer,首先要给MediaPlayer设置Media音频资源路径,或者也可以从一个R.raw.xxx这样的资源文件加载等等。
然后prepare使得MediaPlayer进行播放前的各种准备工作和初始化过程。
当MediaPlayer调用start后,就将启动正式的音频播放。如果MediaPlayer设置setLooping(true)那么将循环播放这段音频,类似常用的播放器中的“单曲循环”。
MediaPlayer的暂停时pause。MediaPlayer的完全停止时stop。在使用完MediaPlayer时候,不要忘记释放MediaPlayer的资源。通常在Android的onDestory()中release。

(2)Android MediaRecorder
本例中MediaRecorder录制一段音频(从麦克风,话筒)。
MediaRecorder在录制前需要先定义一些基本属性和参数如录制音频存放的位置:
setAudioSource
输出的音频格式:
setOutputFormat
音频的编码格式:
setAudioEncoder
以上参数,简单期间可以使用缺省的、默认的设置参数DEFAULT。

在本例中,MediaRecorder的prepare()准备录音设备,MediaRecorder的start()将正式开始录音。


写一个简单的代码加以说明。
先写一个布局文件,布局几个Button按钮控制播放器和“录音机”:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <Button        android:id="@+id/startRecorder"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        android:text="开始录制" />    <Button        android:id="@+id/stopRecorder"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:layout_alignParentTop="true"        android:text="停止录制" />    <Button        android:id="@+id/startPlay"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_alignParentLeft="true"        android:text="播放录音" />    <Button        android:id="@+id/stopPlay"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_alignParentRight="true"        android:text="停止播放" /></RelativeLayout>


Java代码:

package zhangphil.mediarecorder;import java.io.File;import java.io.IOException;import android.app.Activity;import android.media.MediaPlayer;import android.media.MediaRecorder;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/** * 本例代码演示了录音 -> 播放的简单过程。 * 思路:先使用Android“录音机”MediaRecorder录制音段音频存放到手机的SDCard上,然后使用Android的播放器MediaPlayer * 整个过程由Button按钮控制。 */public class MainActivity extends Activity implements OnClickListener {// 播放器private MediaPlayer mMediaPlayer;// “录音机”private MediaRecorder mMediaRecorder;// 录制的音频文件private File audioFile;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 开始录音按钮Button startRecorder = (Button) findViewById(R.id.startRecorder);startRecorder.setOnClickListener(this);// 停止录音按钮Button stopRecorder = (Button) findViewById(R.id.stopRecorder);stopRecorder.setOnClickListener(this);// 播放器开始播放录音按钮Button startPlay = (Button) findViewById(R.id.startPlay);startPlay.setOnClickListener(this);// 播放器停止播放录音按钮Button stopPlay = (Button) findViewById(R.id.stopPlay);stopPlay.setOnClickListener(this);// 播放器mMediaPlayer = new MediaPlayer();// “录音机”mMediaRecorder = new MediaRecorder();// 麦克风源录音mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);// 输出格式mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);// 编码格式mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);// 根目录File sdcard = Environment.getExternalStorageDirectory();// 将录制的音频文件存储到SDCard根目录下audioFile = new File(sdcard, "zhangphil.amr");try {audioFile.createNewFile();} catch (IOException e) {e.printStackTrace();}}// 开始录音private void startRecorder() throws Exception {// 设置录制音频的输出存放文件mMediaRecorder.setOutputFile(audioFile.getAbsolutePath());// 预备!mMediaRecorder.prepare();// 开始录音!mMediaRecorder.start();}// 停止录音private void stopRecorder() {// 停止录音mMediaRecorder.stop();// 释放资源mMediaRecorder.release();}// 开始播放声音音频private void startPlay() throws Exception {// 重置mMediaPlayer.reset();// 设置播放器的声音源mMediaPlayer.setDataSource(audioFile.getAbsolutePath());// 也可以从一个静态资源文件中加载音频数据源// mMediaPlayer.create(this, R.raw.xxx);if (!mMediaPlayer.isPlaying()) {mMediaPlayer.prepare();mMediaPlayer.start();// 如果设置循环true,那么将循环播放// mMediaPlayer.setLooping(true);} else {mMediaPlayer.pause();}}// 停止播放private void stopPlay() {// 如果播放器在播放声音,停止mMediaPlayer.stop();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.startRecorder:try {startRecorder();} catch (Exception e) {e.printStackTrace();}break;case R.id.stopRecorder:stopRecorder();break;case R.id.startPlay:try {startPlay();} catch (Exception e) {e.printStackTrace();}break;case R.id.stopPlay:stopPlay();break;}}// 注意在onDestory中销毁、回收资源@Overrideprotected void onDestroy() {super.onDestroy();if (mMediaPlayer.isPlaying()) {mMediaPlayer.stop();}// 释放资源mMediaPlayer.release();mMediaRecorder.release();}}


不要忘记在AndroidManifest.xml添加权限:

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

更多相关文章

  1. 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜
  2. Android应用开发相关下载资源(2013/03/22更新)
  3. Android新增音频流类型
  4. Android官方入门文档[6]添加Action按钮
  5. Android中将资源文件转为Bitmap对象
  6. Android彻底组件化—代码和资源隔离
  7. android中编译资源文件的相关问题
  8. 学习资源推荐

随机推荐

  1. Android Layout布局文件里的android:layo
  2. android Uri详解
  3. android中shape绘制背景图片
  4. 《Android Dev Guide》系列教程10:用户界
  5. Android的adb命令介绍
  6. 一个让你掌握Android所有控件的Demo
  7. 【Android】Android 手机忘记锁屏密码的
  8. Text-to-speech 入门与进阶学习笔记(andr
  9. Android ShareUserId 使用总结
  10. Android JNI(java native interface) 学