42일차
30개 프로젝트로 배우는 Android 앱 개발 with Kotlin 초격차 패키지 Online
강의 목표
- 프로젝트를 따라해보며 앱개발에 필요한 기술을 학습할 수 있습니다.
- 프로젝트를 따라해보며 앱개발에 필요한 기술을 학습할 수 있습니다.
- 앱 개발시 원하는 기능을 구현하기 위해 어떤 기술이 필요한 지 알 수 있습니다.
- 디자인 아키텍처 패턴, 비동기 처리 등 효율적인 앱 개발 방법을 익힐 수 있습니다.
목차 02 Basic - Ch07. 녹음기
기본 UI 구성권한 요청하기- 녹음 기능 구현하기 - 1
- 녹음 기능 구현하기 - 2
- 오디오 시각화
- 마무리
녹음 기능 구현하기 - 1
MediaRecorder 알아보기
녹음을 위한 MediaRecorder 객체는 일정한 상태를 가진다.
뭐 복잡해 보이지만, 생성하고 바로 녹음 가능한 것이 아니라 Intial 상태에서 여러 과정을 거치는 준비가 필요하다
간략하게 알아보자면
- 오디오 소스 파일을 라이트하게 압축시키는 인코딩 과정이 일어난 후
- 컨테이너에 잘 정리한 뒤
- 디코더가 꺼내서 쓴다
각자의 코덱과 지원하는 코덱이 있기 때문에 이에 유의해야 한다.
- 코덱(MP3, FLAC 등)
- 컨테이너(3GPP, MPEG-4 등)
녹음 시작과 중지
가장 대중적인? (잘 모름 사실 ㅋ) 3pg와 AMR 을 사용하도록 하겠다.
그럼 인스턴스를 선언하고 녹음을 시작하는 startRecord() 함수를 짜보도록 하자
private var recorder: MediaRecorder? = null
private val recordingFilePath: String by lazy {
"${externalCacheDir?.absolutePath}/recording.3gp"
}
private fun stateRecord() {
recorder = MediaRecorder().apply {
setAudioSource(MediaRecorder.AudioSource.MIC)
setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP) // 컨테이너
setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB) // 코덱 지정
setOutputFile(recordingFilePath)
prepare()
}
recorder?.start()
}
MediaRecorder 인스턴스를 선언할 때 null로 두는 이유는 메모리 리소스를 위해 녹음이 끝나면 메모리 해제해주는 것이 좋기 때문이다.
output file을 저장하는 경로를 보면 externalCacheDir에 저장하는 모습을 볼 수 있는데, 이는 Internal로 하기엔 녹음 파일의 크기를 감당하기 힘들 수 있기 때문에 임시 저장소인 앱의 외부 캐시 루트에 저장하는 것이다.
private fun stopRecording() {
recorder?.run {
stop()
release()
}
recorder = null
}
종료하는 함수는 간단하다. 정지시키고 메모리 해제 후 null 할당!
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
수강인증샷
링크
'Android > Challenge' 카테고리의 다른 글
패스트캠퍼스 챌린지 44일차 (0) | 2022.03.09 |
---|---|
패스트캠퍼스 챌린지 43일차 (0) | 2022.03.07 |
패스트캠퍼스 챌린지 41일차 (0) | 2022.03.05 |
패스트캠퍼스 챌린지 40일차 (0) | 2022.03.04 |
패스트캠퍼스 챌린지 39일차 (0) | 2022.03.03 |