Могу ли я записывать 24/48k аудио с помощью AudioRecord?

Я записываю аудио, используя AudioRecord, В настоящее время я использую 44100 в качестве частоты дискретизации и 16 бит в качестве AudioFormat,

Могу ли я использовать 48000 в качестве частоты дискретизации и 24 бит в качестве AudioFormat?

Ниже приведен код с частотой дискретизации 44100 и аудиоформатом 16 бит.

    int SAMPLE_RATE = 44100;

    int mBufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO,
            AudioFormat.ENCODING_PCM_16BIT);        
    AudioRecord mRecorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, SAMPLE_RATE ,
            AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, mBufferSize);

    if (AudioRecord.STATE_INITIALIZED == mRecorder.getState()) {
        mRecorder.startRecording();
    }

Согласно сайту разработчика, 44100 Гц - самая высокая доступная частота дискретизации. Мой вопрос, могу ли я использовать 48000 Гц с 24-битным аудиоформатом.

Спасибо

По этой ссылке мы можем записывать аудио, используя 24 бита на семпл. 24 бита на сэмпл В Android L разрешение сэмпла будет увеличено с 16-битного PCM до 24-битного для получения лучших результатов. Несмотря на то, что многие смартфоны, выпущенные в 2013 году, поддерживали 24-битный 96-кГц ЦАП, ОС Android никогда не использовала его.

2 ответа

Решение

Конечно, это зависит от устройства, с которого вы пытаетесь записать? Производителю оборудования приходится настраивать многие из этих вещей в HAL.

Audio_policy.conf должен указывать совместимые частоты дискретизации и форматы на устройстве, на котором вы находитесь. Вы можете просмотреть файл - он обычно находится на вашем устройстве Android, вероятно, в системе /etc/

Пример:

audio_hw_modules {
  primary {
    outputs {
      primary {
        sampling_rates  44100|48000
        channel_masks AUDIO_CHANNEL_OUT_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL
        flags AUDIO_OUTPUT_FLAG_PRIMARY
      }
    }
    inputs {
      primary {
        sampling_rates 8000|11025|16000|22050|32000|44100|48000
        channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_WIRED_HEADSET
      }
    }
  }

В этом конкретном случае я бы не смог использовать 24-битный звук на частоте 48 кГц, но 16-битный подойдет.

Простой ответ - для большинства разработчиков приложений - нет, вы не можете.

Длинный ответ -

  • Если вы создаете приложение с использованием Android SDK, вы не сможете, поскольку SDK не определяет для него никаких констант.

  • Если у вас есть доступ к исходному коду для Android, то весь исходный код сборки. Затем вы можете проверить, поддерживают ли они эту частоту дискретизации и аудиоформат, а затем вы можете выставить их через весь стек Android и использовать их в своем приложении.
    Проблема этого подхода в том, что вы не можете опубликовать свое приложение на каком-либо устройстве, на устройстве должно быть запущено точно такое же изображение, созданное из того же источника. Этот метод обычно применяется к OEM-компаниям, разрабатывающим приложения в своем дереве.

Другие вопросы по тегам