투케이2K

471. (kotlin/코틀린) MediaRecorder 사용해 오디오 녹음 수행 - Audio Recorder 본문

Kotlin

471. (kotlin/코틀린) MediaRecorder 사용해 오디오 녹음 수행 - Audio Recorder

투케이2K 2024. 4. 4. 20:12

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

 

        // ---------------------------------------------------------------
        // [전역 변수 선언]
        // ---------------------------------------------------------------
        var recorder: MediaRecorder? = null



        // ---------------------------------------------------------------
        // [로직 처리 실시]
        // ---------------------------------------------------------------
        try {

            /**
             * // -----------------------------------------
             * [요약 설명]
             * // -----------------------------------------
             * 1. 사전 사용자로부터 권한 획득 필요 (외부 저장소 저장)
             *
             * >> 안드로이드 13 이상
             *    AndroidManifest : READ_MEDIA_IMAGES , READ_MEDIA_VIDEO , READ_MEDIA_AUDIO
             *
             * >> 안드로이드 10 이상
             *    AndroidManifest : READ_EXTERNAL_STORAGE
             *
             * >> 안드로이드 10 미만
             *    AndroidManifest : WRITE_EXTERNAL_STORAGE , READ_EXTERNAL_STORAGE
             *
             * >> 안드로이드 10 (Q) 이상은 WRITE_EXTERNAL_STORAGE 권한이 없어도 공용 공간인 갤러리에 사진을 내보낼 수 있습니다 (다운로드, 사진 디렉토리 쓰기 가능)
             *
             * // -----------------------------------------
             * 2. 사전 사용자로부터 권한 획득 필요 (마이크 및 오디오) :
             *
             * >> AndroidManifest : Manifest.permission.RECORD_AUDIO
             *
             * // -----------------------------------------
             * */


            // [녹화 된 동영상 저장 경로 지정] : [다운로드 폴더]
            val fileUrl = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath + "/" + "testAudioRecord.mp4"


            // [MediaRecorder 생성]
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
                recorder = MediaRecorder(this@A_Intro)
            }
            else {
                recorder = MediaRecorder()
            }


            // [MediaRecorder 속성 설정]
            recorder!!.setAudioSource(MediaRecorder.AudioSource.MIC) // [마이크 사용]
            recorder!!.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4) // [저장 될 포맷 타입]
            recorder!!.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT)
            recorder!!.setOutputFile(fileUrl) // [파일 저장 될 경로]


            // [녹음 시작]
            recorder!!.prepare()
            recorder!!.start()


            // [로그 출력]
            S_Log._W_("오디오 녹음 수행", null)


            // [핸들러 사용해 특정 시간 이후 녹음 자동 종료]
            Handler(Looper.getMainLooper()).postDelayed({
                if (recorder != null) {
                    recorder!!.stop()
                    recorder!!.release()
                    recorder = null

                    // [로그 출력]
                    S_Log._E_("오디오 녹음 종료", null)
                }
            }, 10000) // [10초 뒤 수행]

        } catch (e: Exception) {
            e.printStackTrace()
        }

 

반응형
Comments