Android使用MediaRecorder实现录音及播放
在Android平台上,MediaRecorder类是用于处理多媒体录制的关键组件,它可以用来录制音频、视频或同时录制音频和视频。本文将详细介绍如何使用MediaRecorder在Android应用中实现录音和播放功能。 我们需要创建一个Activity,例如`MediaRecorderActivity`,并初始化相关控件,如Button和ListView,用于触发录音和显示录制的音频文件列表。在这个例子中,我们看到一个名为`start_tv`的Button,可能用于启动录音过程。 ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_media_recorder); start_tv = findViewById(R.id.start_tv); listView = findViewById(R.id.list_view); // 初始化其他变量... } ``` 为了实现录音,我们需要实例化MediaRecorder对象,并配置它来指定录制的音频源、编码格式、输出文件路径等。在本例中,音频源可能是默认的麦克风,编码格式可能是AMR_NB(一种常见的音频压缩格式),输出文件则保存在外部存储的"audio"目录下。 ```java mMediaRecorder = new MediaRecorder(); mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB); mFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/audio/"; mAudioFile = new File(mFilePath + "recording.amr"); mMediaRecorder.setOutputFile(mAudioFile.getAbsolutePath()); ``` 然后,我们需要设置音频编码的比特率,以及调用`prepare()`方法来准备录音。在录音前,确保获取了录音所需的权限,对于Android 6.0及以上版本,需要动态请求权限。 ```java mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mMediaRecorder.setAudioEncodingBitRate(128000); try { mMediaRecorder.prepare(); } catch (IOException e) { // 处理准备失败的情况 } // 请求录音权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, 1); } ``` 录音开始和结束可以通过`start()`和`stop()`方法实现。同时,我们需要记录录音的开始和结束时间,以便后续处理。 ```java start_tv.setOnClickListener(v -> { if (!mMediaRecorder.isRecording()) { startTime = System.currentTimeMillis(); mMediaRecorder.start(); } }); // 当录音完成后,执行一些清理工作 mMediaRecorder.setOnInfoListener((mr, what, extra) -> { if (what == MediaRecorder.INFO_MAX_DURATION_REACHED || what == MediaRecorder.INFO_MAX_FILESIZE_REACHED) { stopRecording(); } }); private void stopRecording() { endTime = System.currentTimeMillis(); mMediaRecorder.stop(); mMediaRecorder.release(); mMediaRecorder = null; // 更新UI,添加录音文件到列表 Message msg = mHandler.obtainMessage(Constant.RECORD_SUCCESS); mHandler.sendMessage(msg); } ``` 播放音频部分,我们可以使用`MediaPlayer`类。创建一个MediaPlayer对象,设置音频源为录制的文件,然后调用`prepare()`和`start()`方法。 ```java private MediaPlayer mediaPlayer; public void playAudio(File file) { if (mediaPlayer != null && mediaPlayer.isPlaying()) { mediaPlayer.stop(); mediaPlayer.release(); } mediaPlayer = new MediaPlayer(); try { mediaPlayer.setDataSource(file.getAbsolutePath()); mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException e) { // 处理播放异常 Message msg = mHandler.obtainMessage(Constant.PLAY_ERROR); mHandler.sendMessage(msg); } isPlaying = true; } public void stopPlay() { if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; isPlaying = false; } } ``` 为了更新UI,我们可以使用Handler发送消息,例如当录音成功、失败、时间过短或播放完成时。在Handler的`handleMessage()`方法中,根据消息的标识符显示相应的提示信息。 ```java private Handler mHandler = new Handler() { // ... case Constant.PLAY_COMPLETION: showToastMsg(getString(R.string.play_over)); break; case Constant.PLAY_ERROR: showToastMsg(getString(R.string.play_error)); break; }; ``` 确保在适当的地方释放资源,如MediaRecorder和MediaPlayer,以防止内存泄漏。 在Android应用中实现录音和播放功能涉及多个步骤,包括配置MediaRecorder和MediaPlayer,处理权限,以及与UI交互。通过以上的代码示例,我们可以构建一个基本的录音和播放系统。不过,实际应用中可能需要考虑更多的细节,例如错误处理、文件管理、用户界面优化等。
- weixin_406980542023-05-05真是搞笑,把代码贴到个PDF里面,是怕人看着太方便么? #毫无价值
- 粉丝: 6
- 资源: 929
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助