您的位置:首页 > 移动开发 > Android开发

Android简易录音器——实现录音和播放功能

2016-07-28 11:28 786 查看
转载说明出处:http://blog.csdn.net/toolz/article/details/52053671

实现功能主要使用到了Android中的——AudioRecord与[b]MediaRecorder[/b]



AudioRecord参考资料:http://www.cnblogs.com/over140/archive/2011/05/31/2063969.html

MediaRecorder参考资料:http://www.myexception.cn/mobile/1629184.html

源码:http://download.csdn.net/detail/toolz/9588503

功能描述:


1、点击开始录音按钮,进入录音状态同时录音按钮文字变为停止录音,点击停止录音,保存音频文件。

2、点击开始播放按钮,进入播放录音状态同时文字变为停止播放。

注意:我再夜神模拟器上面测试不成功,后来转向了手机。建议使用真机测试!

效果图:





大致代码如下:


MainActivity.java


package com.toolz.simplerecorderdemo;

import java.io.IOException;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

/**
* 简易录音主类,主要负责开始录音,停止录音,播放录音,停止播放功能
*
* @author toolz
*/
public class MainActivity extends Activity implements OnClickListener {

private Button mBtnRecording;// 录音按钮
private Button mBtnPlay;// 播放按钮
private boolean mIsRecordingState = false;// 是否是录音状态
private boolean mIsPlayState = false;// 是否是播放状态
private MediaRecorder mRecorder = null;// 录音操作对象
private MediaPlayer mPlayer = null;// 媒体播放器对象
private String mFileName = null;// 录音存储路径
private String TAG = getClass().getSimpleName();

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

private void initView() {
mBtnRecording = (Button) findViewById(R.id.btn_recording);
mBtnPlay = (Button) findViewById(R.id.btn_play);
// 设置sdcard的路径
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/wohaoshuai.3gp";
}
}

private void click() {
mBtnRecording.setOnClickListener(this);
mBtnPlay.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_recording:
// 判断录音按钮的状态,根据相应的状态处理事务
mBtnRecording.setText(R.string.wait_for);
mBtnRecording.setEnabled(false);
if (mIsRecordingState) {
stopRecording();
mBtnRecording.setText(R.string.start_recording);
} else {
startRecording();
mBtnRecording.setText(R.string.stop_recording);
}
mIsRecordingState = !mIsRecordingState;
mBtnRecording.setEnabled(true);
break;
case R.id.btn_play:
// 判断播放按钮的状态,根据相应的状态处理事务
mBtnPlay.setText(R.string.wait_for);
mBtnPlay.setEnabled(false);
if (mIsPlayState) {
stopPlay();
mBtnPlay.setText(R.string.start_play);
} else {
startPlay();
mBtnPlay.setText(R.string.stop_play);
}
mIsPlayState = !mIsPlayState;
mBtnPlay.setEnabled(true);
break;

default:
break;
}
}

/**
* 开始录音
*/
private void startRecording() {
mRecorder = new MediaRecorder();
// 设置声音来源
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 设置所录制的音视频文件的格式。(3gp)
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
// 设置录制的音频文件的保存位置。
if (mFileName == null) {
Toast.makeText(getApplicationContext(), R.string.no_sd, Toast.LENGTH_SHORT).show();
} else {
mRecorder.setOutputFile(mFileName);
Log.d(TAG, mFileName);
}
// 设置所录制的声音的编码格式。
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mRecorder.prepare();
} catch (Exception e) {
Log.e(TAG, getString(R.string.e_recording));
}
mRecorder.start();// 开始录音
}

/**
* 停止录音
*/
private void stopRecording() {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
}

/**
* 开始播放
*/
private void startPlay() {
mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource(mFileName);// 设置多媒体数据来源
mPlayer.prepare();
mPlayer.start();
} catch (IOException e) {
Log.e(TAG, getString(R.string.e_play));
}
// 播放完成,改变按钮状态
mPlayer.setOnCompletionListener(new OnCompletionListener() {

@Override
public void onCompletion(MediaPlayer mp) {
mIsPlayState = !mIsPlayState;
mBtnPlay.setText(R.string.start_play);
}
});
}

/**
* 停止播放
*/
private void stopPlay() {
mPlayer.release();
mPlayer = null;
}

}


activity_main.xml

<LinearLayout 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"
android:gravity="bottom"
android:orientation="horizontal" >

<Button
android:id="@+id/btn_recording"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/start_recording" />

<Button
android:id="@+id/btn_play"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weig
8b87
ht="1"
android:text="@string/start_play" />

</LinearLayout>


strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="app_name">SimpleRecorder</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="start_recording">开始录音</string>
<string name="stop_recording">停止录音</string>
<string name="start_play">开始播放</string>
<string name="stop_play">停止播放</string>
<string name="wait_for">请稍后...</string>
<string name="no_sd">SD卡找不到!</string>
<string name="e_recording">录音准备出现异常!</string>
<string name="e_play">播放失败!</string>

</resources>


权限:

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息