Mam problem z korzystaniem z MediaRecorder Android do nagrywania dźwięku z mikrofonu do plików .m4a (AAC-LC, MPEG-4). Począwszy od poziomu 18 interfejsu API, domyślna częstotliwość próbkowania spada z 44,1 lub 48 kHz (w zależności od urządzenia) do zaledwie 8 Hz. Jeśli określę częstotliwość próbkowania za pomocą MediaRecorder.setAudioSamplingRate, użyje ona określonej szybkości, ale w nagraniu jest dużo dziwnego szumu.Android MediaRecorder Częstotliwość próbkowania i szum
W LogCat następujące ostrzeżenie dzieją się od czasu do czasu:
(1) Tag: AudioSource Tekst: AudioRecord poinformowało opanowane
(2) Tag: AudioFlinger Tekst: RecordThread: przepełnienia bufora
Oto kod:
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.prepare();
recorder.start();
} catch (IOException ioe) {
Log.e(TAG, "IOException", ioe);
} catch (IllegalStateException ise) {
Log.e(TAG, "IllegalStateException", ise);
} catch (Exception e) {
Log.e(TAG, "Exception", e);
}
Każda pomoc jest bardzo doceniana.
Czemu ustawiania liczby kanałów audio do 2 podczas nagrywania z mikrofonu? – Squonk
Dobra rada Squonk, dzięki, ale to nie ma znaczenia. Nawet jeśli używam 1 kanału audio, problem nadal istnieje. Jeszcze jedno odkrycie, jednak w LogCat widzę od czasu do czasu następujące 2 ostrzeżenie: (1) AudioSource - AudioRecord zgłoszone przekroczenie (2) AudioFlinger - RecordThread: przepełnienie bufora – Justin
Eksperyment z koderami diff i szybkościami (22050, 16000). Kodeki wymienione w dokumentach androida "formaty mediów" –