В этой статье описывается преобразование частоты дискретизации, также известное как передискретизация, в Android. Термины, связанные с преобразованием частоты дискретизации, приведены в разделе Терминология.
Преобразование частоты дискретизации – это процесс изменения потока дискретных выборок с одной частоты дискретизации на другую. Конвертер частоты дискретизации, или ресэмплер, – это модуль, который реализует преобразование частоты дискретизации. В контексте ресемплера исходный поток называется исходным сигналом, а поток с измененной частотой дискретизации – сигналом приемника.
Ресемплеры используются в нескольких местах в Android. Например, MP3-файл может быть закодирован с частотой дискретизации 44,1 кГц, но его нужно воспроизвести на устройстве Android, которое поддерживает аудио с частотой 48 кГц. В этом случае ресемплер будет использоваться для повышения частоты дискретизации выходного аудио MP3 с 44,1 кГц до 48 кГц, используемой на устройстве Android.
Характеристики ресемплера можно выразить с помощью показателей, в том числе:
- степень сохранения общей амплитуды сигнала;
- степень сохранения полосы частот сигнала с учетом ограничений частоты дискретизации приемника;
- общая задержка при использовании ресемплера;
- постоянная фаза и групповая задержка относительно частоты;
- вычислительная сложность, выраженная в циклах ЦП или энергопотреблении;
- допустимые соотношения частот дискретизации источника и приемника
- возможность динамически менять коэффициенты частоты дискретизации;
- какие форматы цифровых аудиофайлов поддерживаются;
Идеальный ресемплер должен точно сохранять амплитуду и частотный диапазон исходного сигнала (с учетом ограничений частоты дискретизации приемника), иметь минимальную и постоянную задержку, минимальную вычислительную сложность, допускать произвольные и динамические коэффициенты преобразования и поддерживать все распространенные форматы цифрового аудио. На практике идеальных ресемплеров не существует, поскольку реальные ресемплеры представляют собой компромисс между этими характеристиками. Например, цели "идеальное качество" и "низкая сложность" противоречат цели "короткая задержка".
В Android есть несколько ресэмплеров, поэтому можно выбрать подходящий вариант в зависимости от приложения и нагрузки. Доступные ресемплеры описаны в разделе Реализация ресемплера.
Реализации ресемплера
Доступные реализации ресемплера часто меняются и могут быть настроены производителями оригинального оборудования. Ресемплеры по умолчанию в порядке убывания искажения сигнала и возрастания сложности вычислений:
- линейный;
- кубический;
- Sinc с исходными коэффициентами
- sinc с пересмотренными коэффициентами
Как правило, ресемплеры sinc лучше подходят для воспроизведения музыки высокого качества, а остальные ресемплеры следует использовать в случаях, когда качество менее важно (например, для звуков нажатия клавиш).
Выбор конкретной реализации ресемплера зависит от варианта использования, нагрузки и значения системного свойства af.resampler.quality. Подробнее об этом можно узнать из исходного кода ресэмплера в AudioFlinger.