[android] 오디오 녹음을위한 Android AudioRecord 대 MediaRecorder

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

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

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



답변

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


답변

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

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

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


답변

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


답변