`

android多媒体部分学习笔记七------音频录制 mediaRecorder

阅读更多

/**
* 自定义捕获音频
*
* @time 下午12:58:03
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
@SuppressWarnings("unused")
public class CustomRecorderActivity extends Activity implements OnCompletionListener, OnClickListener {
private Button btn_finish, btn_play, btn_start_record, btn_stop_record;
private TextView txt_status;


private MediaRecorder mediaRecorder;
private File audioFile;
private MediaPlayer player;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_recoder);
findView();
}


/**
* 实例化控件
*/
private void findView() {
btn_start_record = (Button) this.findViewById(R.id.btn_start_recording);
btn_stop_record = (Button) this.findViewById(R.id.btn_stop_recording);
btn_play = (Button) this.findViewById(R.id.btn_paly_record);
btn_finish = (Button) this.findViewById(R.id.btn_finish);
txt_status = (TextView) this.findViewById(R.id.txt_status);
txt_status.setText("Ready");


btn_start_record.setOnClickListener(this);
btn_stop_record.setOnClickListener(this);
btn_play.setOnClickListener(this);
btn_finish.setOnClickListener(this);


btn_play.setEnabled(false);
btn_stop_record.setEnabled(false);
}


@Override
public void onClick(View v) {
if (v == btn_start_record) {
mediaRecorder = new MediaRecorder();
// 设置输入信号源
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 设置输出格式
/**
* 常见格式:
*
* THREE_GPP
*
* MPEG_4
*
* RAW_AMR
*
*/


mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
// 设置解码格式
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
// 创建目录
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Andoroid/data/cn.yue.mrdemo.CustomRecorderActivity/files/");
file.mkdirs();


try {
audioFile = File.createTempFile("recording", ".3gp", file);
} catch (IOException e) {
e.printStackTrace();
}
// 设置输出文件的路径
mediaRecorder.setOutputFile(audioFile.getAbsolutePath());
try {
mediaRecorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
Log.i("tag", "error: " + e.toString());
} catch (IOException e) {
e.printStackTrace();
Log.i("tag", "error: " + e.toString());
}
mediaRecorder.start();


txt_status.setText("Recording");
btn_play.setEnabled(false);
btn_stop_record.setEnabled(true);
btn_start_record.setEnabled(false);


} else if (v == btn_stop_record) {
// 停止录音释放资源
mediaRecorder.stop();
mediaRecorder.release();


// 初始化播放器
player = new MediaPlayer();
player.setOnCompletionListener(this);
// 设置播放器数据源
try {
player.setDataSource(audioFile.getAbsolutePath());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
player.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
txt_status.setText("Ready to play");
btn_play.setEnabled(true);
btn_stop_record.setEnabled(false);
btn_start_record.setEnabled(true);


} else if (v == btn_play) {
player.start();
txt_status.setText("Playing");
btn_play.setEnabled(false);
btn_start_record.setEnabled(false);
btn_stop_record.setEnabled(false);
} else if (v == btn_finish) {
// 退出程序
finish();
}


}


@Override
public void onCompletion(MediaPlayer mp) {


btn_start_record.setEnabled(true);
btn_stop_record.setEnabled(false);
btn_play.setEnabled(true);
txt_status.setText("Ready");


}


/**
* 其他常用方法
*
*/
private void otherMathod() {
// 最大录制文件的大小
mediaRecorder.setMaxFileSize(10);
// 录制最长时间
mediaRecorder.setMaxDuration(1);
}


/**
* 将音频插入mediaStore
*/


private void insertMediaStore() {
// 添加元数据
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.TITLE, "this is not music");
contentValues.put(MediaStore.MediaColumns.DATE_ADDED, System.currentTimeMillis());
contentValues.put(MediaStore.MediaColumns.DATA, audioFile.getAbsolutePath());


Uri uri = getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, contentValues);
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics