Android 之 MeidaRedoreder实现音频录制
程序员文章站
2022-05-16 16:45:34
...
调用系统自带的程序进行音频的录制:
使用MediaRecoreder实现音频录制:
package com.example.media_record;
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; } } }; }
使用MediaRecoreder实现音频录制:
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 } }; }
上一篇: thinkphp文件引用与分支结构用法实例_php实例
下一篇: MySQL学习系列之数据库概述
推荐阅读
-
Android之RecyclerView实现时光轴效果示例
-
Android UI设计与开发之使用ViewPager实现欢迎引导页面
-
Android之RecyclerView轻松实现下拉刷新和加载更多示例
-
Android UI设计与开发之ViewPager介绍和简单实现引导界面
-
Android开发之图片旋转功能实现方法【基于Matrix】
-
Android编程开发之EditText实现输入QQ表情图像的方法
-
Android高级界面组件之拖动条和评星条的功能实现
-
Android开发之电话拨号器和短信发送器实现方法
-
Android开发之文本内容自动朗读功能实现方法
-
Android-自定义控件之ListView下拉刷新的实现