2011-05-04 3 views
69

Android 폰에 사람의 음성을 녹음하고 싶습니다. Android에서이 작업을 수행하는 데 두 클래스가 있음을 알게되었습니다 : AudioRecordMediaRecorder. 누군가 둘 사이의 차이점과 각각에 대한 적절한 유즈 케이스는 무엇인지 말해 줄 수 있습니까?Android AudioRecord 대 오디오 레코딩 용 MediaRecorder

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

공식 안드로이드 guide webpage for recording audio에서 주목을 받았지만 AudioRecord에 대한 언급이없는 MediaRecorder를 사용합니다.

답변

58

녹음이 진행되는 동안 분석을 수행하려면 MediaRecorder이 자동으로 파일에 기록되므로 AudioRecord을 사용해야합니다. AudioRecordstartRecording()을 호출 한 후 AudioRecord 인스턴스에서 직접 데이터를 폴링해야한다는 단점이 있습니다. 또한 내부 버퍼가 오버런되지 않도록 데이터를 충분히 빨리 읽고 처리해야합니다 (logcat 출력을 보면 AudioRecord에서 그 사실을 알 수 있습니다).

+0

AudioRecord의 샘플 코드가 있습니까? 내가 발견 한 것들 중 대부분은 MediaRecorder이다. –

+0

@RommelParas는 안드로이드 소스를위한 "텔레 그램"에서이 클래스를 본다. https://github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java – David

13

AudioRecord 먼저 데이터를 minBuffer에 저장하고 거기에서 임시 버퍼로 복사합니다 (MediaRecorder). 파일에 복사됩니다. AudioRecord에서 필요한 위치에 저장된 데이터를 복사하려면 API setRecordPosition()이 필요하지만 MediaRecorder에서는 파일 포인터가 마커의 위치를 ​​설정하는 데이 작업을 수행합니다. AudioRecord은 에뮬레이터에서 실행되는 응용 프로그램에 사용할 수 있습니다. 예를 들어, 8000과 같이 낮은 샘플 속도를 제공하여 수행 할 수 있습니다. MediaRecorder을 사용하면 에뮬레이터를 사용하여 오디오를 녹음 할 수 없습니다. AudioRecord에서 화면은 잠시 후 절전 모드로 전환되고 MediaRecorder에서는 절전 모드가 해제됩니다.

21

제가 알고 있듯이 MediaRecorder은 압축 된 오디오 파일을 출력하고 AudioRecorder은 생생한 사운드 스트림을 제공하며 사용자가 직접 압축해야합니다.

MediaRecorder은 예를 들어 사운드 시각화기를 구현할 수 있도록 getMaxAmplitude() 메서드의 마지막 호출에서 최대 정확도를 제공합니다.

대부분의 경우 MediaRecorder은 복잡한 사운드 프로세싱을해야하며 원시 오디오 스트림에 액세스해야하는 경우를 제외하고는 최상의 선택입니다.

+0

getMaxAmplitude() 메소드를 언급 해 주셔서 감사합니다. 그게 내가 원하는 모든 것 일세. –

+0

MediaRecorder를 사용하여 시각화 프로그램을 구현하려면 어떻게해야합니까? – OnePunchMan

관련 문제