Foggy day

[Android] Audio 음성 녹음 기능 구현 본문

Android

[Android] Audio 음성 녹음 기능 구현

jinhan38 2024. 1. 23. 17:19

MediaRecorder 클래스를 사용해서 음성 녹음 기능을 구현해보겠습니다.

 

 

1. 권한 추가

2. 녹음 코드 구현 

 

 

1. 권한 추가

음성 녹음을 위해 Audio 권한과 녹음한 파일을 저장하기 위한 storage 권한을 추가하겠습니다. 

그리고 application tag에 android:requestLegacyExternalStorage="true"를 추가 하는 것 또한 잊지 마세요.

 

AndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    
    <!--Audio-->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

    <uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="32" />
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />

    <application
    	android:requestLegacyExternalStorage="true"
        >
    	...
    </application>

</manifest>

 

 

 runtime으로 권한을 요청하겠습니다. 

ActivityCompat.requestPermissions(
    this, arrayOf(
        Manifest.permission.RECORD_AUDIO,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.READ_EXTERNAL_STORAGE,
    ),
    100
)

 

 

 

 

2. 녹음 코드 구현

간단하게 record와 stop함수만 만들었습니다. record를 할 때는 녹음 파일을 저장할 경로를 입력해야 합니다. 

val sdcard = Environment.getExternalStorageDirectory()
val file = File(sdcard, "recorded.mp4")
filename = file.absolutePath
class AudioUtil {

    private var recorder: MediaRecorder? = null

    fun record(filePath: String) {
        try {
            recorder = MediaRecorder()
            recorder!!.setAudioSource(MediaRecorder.AudioSource.MIC)
            recorder!!.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
            recorder!!.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT)
            recorder!!.setOutputFile(filePath)
            recorder!!.prepare()
            recorder!!.start()
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }

    fun stop() {
        if (recorder != null) {
            recorder!!.stop()
            recorder!!.release()
            recorder = null
        }
    }

}