[Android] MediaRecorder

gang_shik·2021년 9월 2일
0

MediaRecorder?

  • 기기 마이크에서 오디오를 캡처하고 오디오를 저장 및 재생을 할 수 있음

  • MediaRecorder는 녹음 및 녹화 기능을 사용할 수 있음

  • 우선 이를 사용하기 위해서 먼저 사용 권한을 설정해주고 사용할 수 있음, 위험권한에 속함

  • 이를 사용하기 위해선 우선 MediaRecorder 객체와 녹음한 음성 파일을 저장할 경로 변수를 만들어 줘야함

  • 그리고 이를 각각 객체 생성 뒤 오디오 녹음을 위한 기본 설정을 해줘야함

  • 각각 입력장치, 저장할 포맷, 인코더, 파일이 저장될 위치등

  • 그런 기본 설정이 완료 되면 prepare 함수를 통해 초기화가 되고 start 함수를 통해서 녹음을 시작할 수 있고 stop 함수를 통해서 멈추고 release를 통해서 메모리를 해제해 리소스를 확보함


예시

  • 위에서 설명한 예시대로 직접 활용할 수 있음

  • 먼저 상황은 권한을 다 받은 전제고 캐시로 접근해서 디렉토리에 저장할 것이므로 이는 저장소에 접근 권한도 열려 있는 상태임, 그리고 객체를 생성함

// 캐시로 접근해서 저장을 하기 위해서 해당 디렉토리에 설정을 함
    private val recordingFilePath: String by lazy {
        "${externalCacheDir?.absolutePath}/recording.3gp"
    }

    // recorder 상태에 대해서 계속 바뀌고 확인해야기 때문에 프로퍼티로 미리 정의함, 사용할때와 하지 않을때가 정의되어 있으므로
    private var recorder: MediaRecorder? = null
  • 그런 다음 recorder를 실행하기 위해 시작을 위한 세팅을 함, 위에서 설명한대로 차례대로 AudioSource 입력 장치는 MIC로 그리고 저장할 포맷은 3GPP로 자세한 세부적인 사항은 공식문서에 자세히 나와 있음, 그리고 Encoder 부분도 이에 맞게 AMR_NB로 하고 위에서 설정한 디렉토리를 넣어주고 prepare로 세팅을 완료해줌, 그 다음 시작을 함
// 시작하고 설정하기 위한 세팅을 쭉 해야함
        recorder = MediaRecorder().apply {
            setAudioSource(MediaRecorder.AudioSource.MIC)
            setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP)
            setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
            setOutputFile(recordingFilePath) // 외부 캐시 디렉토리에 접근해서 임시로 저장을 해서 캐시에 있는것을 쉽게 날리기 때문에 거기에 지정함
            prepare() // 녹음할 상태 완료됨
        }
        recorder?.start()
  • 그리고 중단하는 경우에 대해서도 stop, release를 통해서 중단하고 메모리 해제를 함
recorder?.run {
            stop()
            release() // 메모리 해제
        }

참고자료

profile
Stay Humble, Hustle Hard

0개의 댓글