Могу ли я записывать 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-компаниям, разрабатывающим приложения в своем дереве.