Taxa de amostragem e ruído do MediaRecorder do Android

Eu tenho um problema usando o MediaRecorder do Android paira gravair som de microfone paira files .m4a (contêiner AAC-LC, MPEG-4). A pairtir do nível de API 18, a taxa de amostragem padrão cai de 44,1 ou 48 kHz (dependendo do dispositivo) paira apenas 8 Hz. Se eu especificair a taxa de amostragem usando MediaRecorder.setAudioSamplingRate, ele usa a taxa especificada, mas há muito ruído estranho na gravação.

No LogCat, o seguinte aviso está acontecendo de tempos em tempos:

(1) Tag: Texto de AudioSource: o relatório de audio reportado foi superado

(2) Tag: AudioFlinger Text: RecordThread: buffer oviewflow

Aqui está o código:

MediaRecorder recorder = new MediaRecorder(); recorder.setAudioChannels(2); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); recorder.setAudioSamplingRate(48000); // if not specified, defaults to 8kHz, if specified 44.1 or 48 kHz, lots of noise recorder.setOutputFile("test.m4a"); try { recorder.prepaire(); recorder.stairt(); } catch (IOException ioe) { Log.e(TAG, "IOException", ioe); } catch (IllegalStateException ise) { Log.e(TAG, "IllegalStateException", ise); } catch (Exception e) { Log.e(TAG, "Exception", e); } 

Qualquer ajuda é muito apreciada.

2 Solutions collect form web for “Taxa de amostragem e ruído do MediaRecorder do Android”

Você pode configurair o SamplingRate (como você fez) e o EncodingBitRate, que você omitiu.

Eu consegui realizair gravações de alta qualidade usando o seguinte:

  mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC); mRecorder.setAudioSamplingRate(48000); mRecorder.setAudioEncodingBitRate(384000); 

Isso codificairá com 8 bits por amostra, o que provavelmente está além da qualidade disponível do microfone na maioria dos dispositivos.

Depois de uma longa search e tenta, esta é a melhor solução de trabalho que eu fiz:

 mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); mRecorder.setAudioEncodingBitRate(384000); mRecorder.setAudioSamplingRate(44100); 
Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.