Android 휴대폰에 사람의 목소리를 녹음하고 싶습니다. Android에는 AudioRecord 및 MediaRecorder 라는 두 가지 클래스가 있습니다. 누군가가 두 가지의 차이점과 각각에 적합한 사용 사례가 무엇인지 말해 줄 수 있습니까?
사람의 음성을 실시간으로 분석하여 진폭 등을 측정 할 수 있기를 원합니다. AudioRecord가이 작업에 더 적합하다는 것을 이해하고 있습니까?
오디오 녹음을위한 공식 Android 가이드 웹 페이지 에서 AudioRecord에 대한 언급이없는 MediaRecorder를 사용합니다.
답변
녹음이 진행되는 동안 분석을 수행하려는 경우, 당신은 사용할 필요가 AudioRecord
등, MediaRecorder
자동으로 파일에 기록합니다. AudioRecord
호출 후 인스턴스 startRecording()
에서 데이터를 직접 폴링해야 한다는 단점이 AudioRecord
있습니다. 또한 내부 버퍼가 오버런되지 않도록 데이터를 충분히 빠르게 읽고 처리해야합니다 (logcat 출력을 살펴보면 AudioRecord
언제 발생하는지 알 수 있음).
답변
내가 이해했듯이 MediaRecorder
출력에 압축 된 오디오 파일을 AudioRecorder
제공 하고 원시 사운드 스트림 을 제공하는 블랙 박스 이며 사용자가 직접 압축해야합니다.
MediaRecorder
getMaxAmplitude()
예를 들어 사운드 비주얼 라이저를 구현할 수 있도록 메서드의 마지막 호출에서 최대 진폭을 제공합니다 .
따라서 MediaRecorder
복잡한 사운드 처리를해야하고 원시 오디오 스트림에 액세스해야하는 경우를 제외하고는 대부분의 경우 최선의 선택입니다.
답변
AudioRecorderer는 먼저 데이터를 minBuffer에 저장 한 다음 거기에서 임시 버퍼로 복사하고 MediaRecorder에서 파일로 복사합니다. AudioRecorder에서 필요한 위치에 저장된 데이터를 복사하려면 api setRecordPosition ()이 필요하지만 MediaRecorder에서는 파일 포인터가 마커의 위치를 설정하기 위해이 작업을 수행합니다. AudioRecorder는 에뮬레이터에서 실행되는 앱에 사용할 수 있습니다. 이는 8000과 같은 낮은 샘플 속도를 제공하여 수행 할 수 있지만 MediaRecorder를 사용하면 에뮬레이터를 사용하여 오디오를 녹음 할 수 없습니다. AudioRecord에서는 잠시 후 화면이 잠자기 상태이며 MediaRecorder에서는 화면이 잠자기 상태가 아닙니다.