누군가 MediaRecorder를 사용하여 모든 기기에서 오디오를 기록하는 안정적인 방법을 공유해 주실 수 있습니까? 나는 단순히 낮은 비트율의 AMR 포맷 오디오 파일을 기록하려고하고 있는데, 이는 Google에 따르면 모든 기기에서 표준입니다. 그것은 쓰레기 다.Android : 신뢰할 수있는 오디오 녹음, 모든 기기
내 경험에 따르면, 기본 AudioEncoder.AMR_NB를 사용할 때 끔찍하게 실패 할 수있는 오프 브랜드 기기, 태블릿 등이 많이 있습니다. 내 해결 방법은 현재 리플렉션을 사용하여 수퍼 클래스에있는 엔코더를 폴링 한 다음 각 엔코더를 오류 수신기로 반복하여 어느 것이 실패하지 않는지 확인합니다. 이것은 우아하지 않을뿐만 아니라 모든 장치를 포착하지는 않습니다. 또한 AudioEncoder 및 OutputFormat 옵션 (상수 0)을 기본값으로 설정하려고 시도했는데 일부 장치에서도이 옵션이 무시 무시하게 실패합니다. 여기
은 기본 AMR 인코더가 작동하지 않을 경우 내가 사용하고 무엇을 :Class encoderClass = MediaRecorder.AudioEncoder.class;
Field[] encoders = encoderClass.getFields();
그럼 루프 오류 리스너를 설정 각각의 인코더를 통해. 성공적으로 끝나면 설정으로 기본 인코더로 설정합니다.
if (arg1 == MediaRecorder.MEDIA_RECORDER_ERROR_UNKNOWN) {
이 기술은 대부분의 장치 작동 : 리스너가 오류를 잡으면
for (int i = j; i < encoders.length; i++) {
try {
int enc = encoders[i].getInt(null);
recorder.reset();
recorder.setAudioSource(AudioSource.MIC);
recorder.setOutputFormat(OutputFormat.THREE_GPP);
recorder.setAudioEncoder(enc); //testing the encoder const here
recorder.setOutputFile(amrPath);
recorder.setMaxDuration(3000);
recorder.setOnInfoListener(new OnInfoListener() {
나는 루프를 계속합니다. 나머지는 어때? 나는 여전히 균열을 극복하고 솔직히 내가 좋아할만한 장치를 가지고있다. 거의 모든 장치에 신뢰성있는 무언가가 들어간다 ????
[this] (http://www.benmccann.com/dev-blog/android-audio-recording-tutorial/) 중 하나를 사용해 보시지 않겠습니까? – Praveenkumar
@SpK : 링크에 감사하지만 그의 코드는 AMR_NB 설정의 일반적인 경로를 따른다. – ThumbsDP