手记

【学习打卡】第4天 即时通讯项目里面的语音处理-基础实现篇

课程名称:即时通讯项目里面的语音处理-基础实现篇
课程章节: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
        }
    }

0人推荐
随时随地看视频
慕课网APP