Android 之 MeidaRedoreder实现音频录制

本文详细介绍了如何使用Android系统的内置音频录制功能及通过编程实现自定义音频录制程序,包括使用MediaRecorder类进行音频录制的步骤、权限需求及录制后的文件存储与播放方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=small][color=olive][b]调用系统自带的程序进行音频的录制:[/b][/color][/size]
package com.example.media_record;

import android.app.Activity;

import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

/* 使用自带的音频录制程序
* 利用MediaRecorder 类实现自己的音频录制程序,也可以录制视频;
* 创建实例后,调用:
* 1、setAudioSource 初始化
* 2、setOuputFormat 音频格式
* 3、setAudioEncoder 初始化;
* 4、setOutputFile() 指定存放录制内容的文件;
*
* */
public class MainActivity extends Activity {

private Button system_record,custom_media,custom_audio;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

/* 获取组件对象,并且设置事件监听 */
system_record = (Button) findViewById(R.id.system_mediaRecord);
custom_media = (Button) findViewById(R.id.custom_mediaRecord);
custom_audio = (Button) findViewById(R.id.custom_audioRecord);

/* 设置事件监听 */
system_record.setOnClickListener(listener);
custom_audio.setOnClickListener(listener);
custom_media.setOnClickListener(listener);

}

/* 覆盖该方法,接收数据 *//* 这里获取录制到的音频的Uri, 可以进行播放等操作 */
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if(requestCode == RESULT_OK){
Uri audioPath = data.getData();
MediaPlayer mediaPlayer = MediaPlayer.create(this, audioPath);
mediaPlayer.start();
Toast.makeText(MainActivity.this, audioPath.toString(), 1000).show();
}
}

/* 设置按钮事件监听器 */
OnClickListener listener = new OnClickListener() {

public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.system_mediaRecord:
/* 调用Android自带的音频录制程序 */
Intent intent1= new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
startActivityForResult(intent1, 0);

break;
case R.id.custom_mediaRecord:

/* 通过MediaRecorder 类实现自己的音频录制程序 */
Intent intent2 = new Intent();
intent2.setClass(MainActivity.this,MyMediarRecorder.class);
startActivityForResult(intent2, 1);

break;
case R.id.custom_audioRecord:

/* 通过AudioRecord类实现自己的音频录制程序 */
Intent intent3 = new Intent();
intent3.setClass(MainActivity.this, MyAudioRecord.class);
startActivityForResult(intent3, 2);
break;
}
}
};



}



[size=small][color=brown][b]使用MediaRecoreder实现音频录制:[/b][/color][/size]

package com.example.media_record;

import java.io.File;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

/* 启动自定义的音频录制程序来完成录制的工作
*
* 权限: 为了可以录制音频需要:RECORD_AUDIO权限
* 权限:为了可以写入SDCard,需要:WRITE_EXTERNAL_STORAGE权限;
*
* */
public class MyMediarRecorder extends Activity {

private TextView stateView;
private Button start,stop,play,finish;
private MediaRecorder recorder;
private File audioFile;
private Uri fileUri;
private MediaPlayer mediaPlayer;

protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.media_recorder_layout);

/* 获取组件对象 */
stateView = (TextView) findViewById(R.id.stateView);
start = (Button) findViewById(R.id.start);
stop = (Button) findViewById(R.id.stop);
play = (Button) findViewById(R.id.play);
finish = (Button) findViewById(R.id.finish);

start.setOnClickListener(listener);
stop.setOnClickListener(listener);
play.setOnClickListener(listener);
finish.setOnClickListener(listener);

stop.setEnabled(false);
play.setEnabled(false);

}

/* 事件:处理用户的动作 */
OnClickListener listener = new OnClickListener() {

public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.start:

/* 开始录制 *//* 需要一个MediaRecorder对象 */
recorder = new MediaRecorder();

/* 指定MIC(Microphone audio source) */
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

/* 指定音频文件保存的格式 */
/* THREE_GPP: 录制后文件是一个3gp 文件,支持视频和音频录制 */
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

/* 指定Audio 编码方式,目前只有AMR_NB格式 */
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

/* 指定录制文件的存储路径 */
File fpath = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/data/files/");

/* 创建文件夹 */
fpath.mkdirs();

try{
/* 创建临时文件 *//* 参数:前缀 ,后缀,目录地址 */
audioFile = File.createTempFile("recording", ".3gp", fpath);
}catch(Exception ex){
Toast.makeText(MyMediarRecorder.this, "临时文件创建失败", 1000).show();
}

/* 设置文件的存储位置 */
recorder.setOutputFile(audioFile.getAbsolutePath());

/* 开始录制 */
try{
/* 准备 */
recorder.prepare();
}catch(Exception ex){
Toast.makeText(MyMediarRecorder.this, "录音失败", 1000).show();
}

/* 开始 */
recorder.start();
stateView.setText("正在录制...");
start.setEnabled(false);
play.setEnabled(false);
stop.setEnabled(true);

break;

/*********************************************************/
case R.id.stop:

/* 停止录制 */
recorder.stop();

/* 释放资源 */
recorder.release();

/* 然后将录制的文件存储在MediaStore中 ,实现数据共享*/
ContentValues values = new ContentValues();
values.put(MediaStore.Audio.Media.TITLE, "this is my first recored_audio");
values.put(MediaStore.Audio.Media.DATE_ADDED, System.currentTimeMillis());
values.put(MediaStore.Audio.Media.DATA, audioFile.getAbsolutePath());

/* 获取插入数据的Uri */
fileUri = getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);

/* 录制结束后 ,实例化一个MediaPlayer对象,播放*/
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {

/* 更新状态 */
stateView.setText("准备录制...");
play.setEnabled(true);
start.setEnabled(true);
stop.setEnabled(false);
}
});

/* 准备播放 */
try{
mediaPlayer.setDataSource(audioFile.getAbsolutePath());
mediaPlayer.prepare();

}catch(Exception ex){

}

/* 更新状态 */
stateView.setText("准备播放");
play.setEnabled(true);
start.setEnabled(true);
stop.setEnabled(false);

break;

case R.id.play:

/* 播放录音 *//* 在录音结束的时候,已经实例化了MediaPlayer , 做好了播放的准备 */
mediaPlayer.start();

/* 更新状态 */
stateView.setText("正在播放");
start.setEnabled(false);
stop.setEnabled(false);
play.setEnabled(false);


break;

case R.id.finish:

/* 完成录制,返回录制的音频的Uri */
Intent intent = new Intent();
intent.setData(fileUri);
this.setResult(RESULT_OK,intent);
this.finish();

break;
default:
break;
}

}

private void finish() {
// TODO Auto-generated method stub

}

private void setResult(int resultOk, Intent intent) {
// TODO Auto-generated method stub

}
};

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值