setAudioSamplingRate не работает для более старых устройств (Android 2.3.4)

Мне нужно записывать с частотой дискретизации не менее 44,1 кГц. Я протестировал следующий код на своем более новом устройстве (Android 4.1.2), и записанный звук будет иметь разную частоту дискретизации в зависимости от моего ввода. Однако, когда я использую свое старое устройство (Android 2.3.4), независимо от того, какую частоту дискретизации я выбираю, он всегда возвращает файл с частотой дискретизации 8 кГц.

И выходной формат, и аудиокодер имеют уровень 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();
        }

person Paul Curtis    schedule 24.06.2013    source источник
comment
Вы уверены, что IOException не выбрасывается? (То есть, вы проверили свой логарифм?)   -  person Dan Breslau    schedule 25.06.2013
comment
Спасибо за быстрый ответ. В моем logcat нет IOException, и мое приложение работает нормально - оно записывает в mp4, но записанный файл всегда имеет частоту 8 кГц. Кроме того, я обнаружил, что мой старый телефон может записывать с частотой выше 8 кГц, но я не знаю, как это сделать с помощью моего приложения. Я знаю это, потому что я сгенерировал линейный чирп, который доходит до 6 кГц, и нет искажения сигнала, когда я записываю своей камерой, в то время как с моими текущими настройками есть.   -  person Paul Curtis    schedule 25.06.2013
comment
Хм. Единственная другая мысль, которую я могу предложить прямо сейчас, - это убедиться, что новый звуковой файл действительно создается каждый раз, т. Е. Что вы не смотрите на старые результаты.   -  person Dan Breslau    schedule 25.06.2013
comment
где вы проверяете частоту дискретизации. установите mediainfo, а затем проверьте.   -  person Amrendra    schedule 27.06.2013
comment
Я загружаю готовый файл на свой компьютер и могу просмотреть частоту дискретизации как в свойствах файла, так и в MATLAB.   -  person Paul Curtis    schedule 27.06.2013
comment
В моем случае, независимо от используемых настроек, он всегда записывает 16 кГц для моно или 32 кГц для стерео (например, 8 кГц на канал).   -  person Stan    schedule 10.02.2015


Ответы (1)


Установите OutputFormat на:

mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);

Тогда попробуй. Это будет работать.

person Taufik Mira    schedule 17.06.2015