오디오 녹음을위한 Android AudioRecord 대 MediaRecorder


93

Android 휴대폰에 사람의 목소리를 녹음하고 싶습니다. Android에는 AudioRecordMediaRecorder 라는 두 가지 클래스가 있습니다. 누군가가 두 가지의 차이점과 각각에 적합한 사용 사례가 무엇인지 말해 줄 수 있습니까?

사람의 음성을 실시간으로 분석하여 진폭 등을 측정 할 수 있기를 원합니다. AudioRecord가이 작업에 더 적합하다는 것을 이해하고 있습니까?

오디오 녹음을위한 공식 Android 가이드 웹 페이지 에서 AudioRecord에 대한 언급이없는 MediaRecorder를 사용합니다.

답변:


84

녹음이 진행되는 동안 분석을 수행하려는 경우, 당신은 사용할 필요가 AudioRecord등, MediaRecorder자동으로 파일에 기록합니다. AudioRecord호출 후 인스턴스 startRecording()에서 데이터를 직접 폴링해야 한다는 단점이 AudioRecord있습니다. 또한 내부 버퍼가 오버런되지 않도록 데이터를 충분히 빠르게 읽고 처리해야합니다 (logcat 출력을 살펴보면 AudioRecord언제 발생하는지 알 수 있음).


AudioRecord의 샘플 코드가 있습니까? 내가 찾은 것들의 대부분은 MediaRecorder ...입니다
롬멜 파라

@RommelParas는 안드로이드 소스에 대한 "telegram"에서이 클래스를 찾습니다. github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/…
David

@David 더 기본적인 샘플을 알고 있습니까? 자체적으로 작동하는 것?
안드로이드 개발자

@androiddeveloper 안타깝게도 아니요.
David

34

내가 이해했듯이 MediaRecorder출력에 압축 된 오디오 파일을 AudioRecorder제공 하고 원시 사운드 스트림 을 제공하는 블랙 박스 이며 사용자가 직접 압축해야합니다.

MediaRecordergetMaxAmplitude()예를 들어 사운드 비주얼 라이저를 구현할 수 있도록 메서드의 마지막 호출에서 최대 진폭을 제공합니다 .

따라서 MediaRecorder복잡한 사운드 처리를해야하고 원시 오디오 스트림에 액세스해야하는 경우를 제외하고는 대부분의 경우 최선의 선택입니다.


1
getMaxAmplitude () 메서드를 언급 해 주셔서 감사합니다. 그게 내가 필요한 전부일 것입니다.
Dheeraj Bhaskar 2014 년

MediaRecorder를 사용하여 시각화 도우미를 구현하려면 어떻게해야합니까?
OnePunchMan 2015 년

1
여기서 getMaxAmplitude가 정확히 무엇을 돕습니까? 비주얼 라이저를 위해 매 순간 최신 정보를 얻을 필요가 없습니까?
안드로이드 개발자

18

AudioRecorderer는 먼저 데이터를 minBuffer에 저장 한 다음 거기에서 임시 버퍼로 복사하고 MediaRecorder에서 파일로 복사합니다. AudioRecorder에서 필요한 위치에 저장된 데이터를 복사하려면 api setRecordPosition ()이 필요하지만 MediaRecorder에서는 파일 포인터가 마커의 위치를 ​​설정하기 위해이 작업을 수행합니다. AudioRecorder는 에뮬레이터에서 실행되는 앱에 사용할 수 있습니다. 이는 8000과 같은 낮은 샘플 속도를 제공하여 수행 할 수 있지만 MediaRecorder를 사용하면 에뮬레이터를 사용하여 오디오를 녹음 할 수 없습니다. AudioRecord에서는 잠시 후 화면이 잠자기 상태이며 MediaRecorder에서는 화면이 잠자기 상태가 아닙니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.