今天就讓我們來看看重頭戲 Recorder 的部分吧
private fun startRecording() {
createFile()
mediaRecorder = MediaRecorder()
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC)
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP)
mediaRecorder.setOutputFile(soundFile.absolutePath)
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
mediaRecorder.prepare()
mediaRecorder.start()
}
我們在要執行 Recorder 之前先執行 createFile function 確保有路徑可以儲存。
執行 Recorder 請確保按照順訊來進行。
確認輸入來源 setAudioSource 、輸出檔案格式 setOutputFormat 、輸出檔案路徑 setOutputFile 、輸出格式 setAudioEncoder
這訂好之後要記得 prepare 後再 start。
private fun stopRecording() {
if (recordingStatus) {
mediaRecorder.stop()
mediaRecorder.release()
recordStopBtn.isEnabled = false
playStopBtn.isEnabled = true
}
}
再來是跟 start 一樣重要的 stop ,在 stop 之後需要 release 資源。
private fun recordOrStopCheck() {
when (recordBtnStatus) {
"RECORD" -> {
startRecording()
recordingStatus = true
recordStopBtn.text = "STOP"
recordBtnStatus = "STOP"
}
"STOP" -> {
stopRecording()
recordingStatus = false
recordStopBtn.text = "RECORD"
recordBtnStatus = "RECORD"
}
}
}
最後按鍵的部分,我們使用相同的方式來達到一樣的效果。
想看更詳細說明 MediaRecorder 的資料可以參閱參考文件。