课程名称:即时通讯项目里面的语音处理-基础实现篇
课程章节:2-2 Android-文件模式声音录制功能实现下
主讲老师:Piasy
课程内容:
今天学习内容有:
- 启动录音的逻辑
- 错误提醒的逻辑
- 结束录音的逻辑
课程收获:
- 启动录音逻辑
private fun doStartRecord(): Boolean {
return try {
// 创建录音文件
mAudioFile =
File("${Environment.DIRECTORY_DOWNLOADS}/iMookDemo/${System.currentTimeMillis()}.m4a")
mAudioFile.parentFile?.mkdir()
mAudioFile.createNewFile()
println(mAudioFile.absolutePath)
// 配置MediaRecorder
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC) // 从麦克风采集
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
mMediaRecorder.setAudioSamplingRate(44100) // "所有安卓系统都支持的采样频率"
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC)
mMediaRecorder.setAudioEncodingBitRate(96000) // 音质较好的频率
mMediaRecorder.setOutputFile(mAudioFile.absolutePath)
// 开始录音
mMediaRecorder.prepare()
mMediaRecorder.start()
// 记录开始录音的时间,用于统计录音时长
lStartRecordTime = System.currentTimeMillis()
true
} catch (e: Exception) {
false
}
}
- 结束录音逻辑
private fun doStopRecord(): Boolean {
return try {
// 停止录音
mMediaRecorder.stop()
// 记录停止时间
val recordTime = System.currentTimeMillis() - lStartRecordTime
val recordLength = recordTime / 1000
// 只接受超过3秒的录音,在UI上显示出来
if (recordLength > 3) {
uiThread {
viewBinding.tvStatus.text = "录音成功 ${recordLength}秒"
}
return true
} else {
uiThread {
Toast.makeText(this@MainActivity, "录音小于3秒不记录", Toast.LENGTH_SHORT).show()
}
return false
}
} catch (e: Exception) {
false
}
}