Мне нужно записывать с частотой дискретизации не менее 44,1 кГц. Я тестировал следующий код на своем новом устройстве (Android 4.1.2), и записанный звук будет иметь разные частоты дискретизации, основанные на моем вводе. Однако, когда я использую свое старое устройство (Android 2.3.4), независимо от выбранной частоты дискретизации, он всегда возвращает файл с частотой 8 кГц.setAudioSamplingRate не работает для более старого устройства (Android 2.3.4)
Оба формата вывода и аудиокодер являются уровнем API 10, который ниже уровня моего старого устройства. Я не могу понять, что мое старое устройство (Droid X) может иметь аппаратное обеспечение, которое поддерживает только частоту дискретизации звука 8 кГц, поэтому я предполагаю, что должен быть другой способ обеспечить требуемую частоту дискретизации.
private void startRecording() {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setAudioSamplingRate(44100);
try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
mRecorder.start();
}
Вы уверены, что IOException не выбрасывается? (I.e., вы проверили свой логарифм?) –
Спасибо за быстрый ответ. В моем logcat нет IOException, и мое приложение работает нормально - оно записывается на mp4, но записанный файл всегда 8 кГц. В стороне я обнаружил, что мой старый телефон может записывать более высокую скорость, чем 8 кГц, но я не знаю, как сделать это с моим приложением. Я знаю это, потому что я создал линейный чирп, который идет до 6 кГц, и при записи с моей камерой нет искажения сигнала, пока есть текущая настройка. –
Хм. Единственная другая мысль, которую я могу предложить прямо сейчас, - проверить, что каждый раз создается новый звуковой файл, т. Е. Вы не смотрите на более старые результаты. –