代码拉取完成,页面将自动刷新
最近在项目要用到录音的功能,研究了几天,看了很多的资料,今天在这里分享记录一下以便回头查看。Android给我们提供了两个录音的API接口:MediaRecord、AudioRecoder
<uses-permission android:name="android.permission.RECORD_AUDIO" />
public SuperMediaManager(Context context) {
mMediaRecorder = new MediaRecorder();
//设置音频的来源
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置音频的输出格式
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);//设置输出文件的格式
//设置音频文件的编码
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);//设置音频文件的编码
mMediaPlayer = new MediaPlayer();
}
public void startRecord(String filepath) {
Log.v(TAG, "startRecord startRecord");
Log.v(TAG, "file path:" + filepath);
//如果正在录制,就返回了
if(isRecording){
return;
}
mMediaRecorder.setOutputFile(filepath);
try {
//录制前准备工作
mMediaRecorder.prepare();
//开始录制
mMediaRecorder.start();
isRecording = true;
Log.v(TAG, "startRecord record succ...");
} catch (Exception e) {
Log.v(TAG, "startRecord record fail:" + e.toString());
}
}
public void stopRecord() {
if (mMediaRecorder != null && isRecording) {
//停止录制
mMediaRecorder.stop();
//重新开始
mMediaRecorder.reset();//注意:可以通过返回setAudioSource()步骤来重用该对象
//mMediaRecorder.release();注意:这个对象不能再次被使用,如果此次再次录制,就会报错
isRecording = false;
}
}
onError(MediaRecorder mr, int what, int extra)
MEDIA_RECORDER_ERROR_UNKNOWN:未知错误 MEDIA_ERROR_SERVER_DIED:媒体服务卡死,在这种情况下,应用程序必须释放MediaRecorder对象并实例化一个新对象
onInfo(MediaRecorder mr, int what, int extra)
MediaRecorder.MEDIA_RECORDER_INFO_UNKNOWN:未知的错误
MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED:录制超时了
MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED:录制文件超过指定大小了,需要setNextOutputFile(File)指定一个新的文件进行存储
public void play(String filepath) {
try {
//如果正在播放,然后在播放其他文件就直接崩溃了
if(mMediaPlayer.isPlaying()){
return;
}
//设置数据源
mMediaPlayer.setDataSource(filepath);
//这个准备工作必须要做
mMediaPlayer.prepare();
mMediaPlayer.start();
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
//播放完毕再重置一下状态,下次播放可以再次使用
mp.reset();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
public SuperMediaManager(Context context) {
mMediaRecorder = new MediaRecorder();
//设置音频的来源
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置音频的输出格式
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);//设置输出文件的格式
//设置音频文件的编码
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);//设置音频文件的编码
mMediaPlayer = new MediaPlayer();
}
public void startRecord(String filepath) {
Log.v(TAG, "startRecord startRecord");
Log.v(TAG, "file path:" + filepath);
//如果正在录制,就返回了
if(isRecording){
return;
}
mMediaRecorder.setOutputFile(filepath);
try {
//录制前准备工作
mMediaRecorder.prepare();
//开始录制
mMediaRecorder.start();
isRecording = true;
Log.v(TAG, "startRecord record succ...");
} catch (Exception e) {
Log.v(TAG, "startRecord record fail:" + e.toString());
}
}
public void stopRecord() {
if (mMediaRecorder != null && isRecording) {
//停止录制
mMediaRecorder.stop();
//重新开始
mMediaRecorder.reset();//注意:可以通过返回setAudioSource()步骤来重用该对象
//mMediaRecorder.release();注意:这个对象不能再次被使用,如果此次再次录制,就会报错
isRecording = false;
}
}
public void play(String filepath) {
try {
//如果正在播放,然后在播放其他文件就直接崩溃了
if(mMediaPlayer.isPlaying()){
return;
}
//设置数据源
mMediaPlayer.setDataSource(filepath);
//这个准备工作必须要做
mMediaPlayer.prepare();
mMediaPlayer.start();
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
//播放完毕再重置一下状态,下次播放可以再次使用
mp.reset();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流
var geduo_83 = {
nickName : "geduo_83",
site : "http://www.weibo.com/geduo83"
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。