Сэмплирование аудио

Начиная с Android 5.0 (Lollipop), преобразователи звука теперь полностью основаны на КИХ-фильтрах, полученных на основе оконной функции Kaiser. Оконный синк Kaiser предлагает следующие свойства:

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

См. П. П. Вайдьянатан, Многоскоростные системы и банки фильтров , стр. 50 для обсуждения окна Кайзера, его оптимальности и связи с вытянутыми сфероидальными окнами.

Параметры проектирования автоматически рассчитываются на основе внутреннего определения качества и желаемых соотношений выборки. На основе проектных параметров генерируется оконный синхрофильтр. При использовании музыки преобразователь частоты от 44,1 до 48 кГц и наоборот генерируется с более высоким качеством, чем при преобразовании произвольной частоты.

Ресемплеры аудио обеспечивают повышенное качество, а также скорость достижения этого качества. Но ресэмплеры могут вносить небольшие пульсации в полосе пропускания и наложения гармонических шумов, а также вызывать некоторые потери высоких частот в полосе перехода, поэтому избегайте их использования без необходимости.

Рекомендации по выборке и повторной выборке

В этом разделе описаны некоторые рекомендации, которые помогут избежать проблем с частотой выборки.

Выберите частоту дискретизации, соответствующую устройству

В общем, лучше всего выбирать частоту дискретизации, соответствующую устройству, обычно 44,1 кГц или 48 кГц. Использование частоты дискретизации выше 48 кГц обычно приводит к снижению качества, поскольку для воспроизведения файла необходимо использовать модуль повторной выборки.

Используйте простые коэффициенты передискретизации (фиксированные или интерполированные многофазные данные).

Ресемплер работает в одном из следующих режимов:

  • Исправлен многофазный режим. Коэффициенты фильтра для каждой многофазной фазы рассчитываются заранее.
  • Интерполированный многофазный режим. Коэффициенты фильтра для каждой многофазы должны быть интерполированы из двух ближайших предварительно вычисленных многофаз.

Ресемплер работает быстрее всего в фиксированном многофазном режиме, когда отношение скорости ввода к скорости вывода L/M (без учета наибольшего общего делителя) имеет M меньше 256. Например, для преобразования 44 100 в 48 000 L = 147, M = 160.

В фиксированном многофазном режиме частота дискретизации зафиксирована и не изменяется. В интерполированном многофазном режиме частота дискретизации является приблизительной. При воспроизведении на устройстве с частотой 48 кГц дрейф частоты дискретизации обычно составляет одну выборку за несколько часов. Обычно это не вызывает беспокойства, поскольку ошибка аппроксимации намного меньше, чем ошибка частоты, вносимая внутренними кварцевыми генераторами, тепловым дрейфом или джиттером (обычно десятки частей на миллион).

Выбирайте частоту дискретизации с простым соотношением, например 24 кГц (1:2) и 32 кГц (2:3), при воспроизведении на устройстве с частотой 48 кГц, даже если через AudioTrack могут быть разрешены другие частоты дискретизации и соотношения.

Используйте повышающую дискретизацию, а не понижающую, чтобы изменить частоту дискретизации.

Частота дискретизации может быть изменена на лету. Детализация таких изменений основана на внутренней буферизации (обычно несколько сотен выборок), а не на индивидуальной основе. Это можно использовать для эффектов.

Не изменяйте динамически частоту дискретизации при понижении разрешения. При изменении частоты дискретизации после создания звуковой дорожки различия примерно от 5 до 10 процентов от исходной частоты могут вызвать перерасчет фильтра при понижении разрешения (для правильного подавления наложения). Это может потреблять вычислительные ресурсы и вызывать слышимый щелчок, если фильтр заменяется в реальном времени.

Ограничьте понижение разрешения не более чем до 6:1.

Понижение дискретизации обычно вызывается требованиями к аппаратному устройству. Когда преобразователь частоты дискретизации используется для понижающей дискретизации, постарайтесь ограничить коэффициент понижающей дискретизации не более чем 6:1 для хорошего подавления псевдонимов (например, не более чем от 48 000 до 8 000). Длины фильтров корректируются в соответствии с коэффициентом понижающей дискретизации, но при более высоких коэффициентах понижающей дискретизации вы жертвуете большей полосой пропускания перехода, чтобы избежать чрезмерного увеличения длины фильтра. При повышении дискретизации подобных проблем с псевдонимами нет. Обратите внимание, что некоторые части аудиоконвейера могут препятствовать субдискретизации более 2:1.

Если вас беспокоит задержка, не делайте повторную выборку

Повторная выборка предотвращает размещение трека в пути FastMixer, а это означает, что возникает значительно более высокая задержка из-за дополнительного, большего буфера в обычном пути Mixer. Кроме того, существует неявная задержка от длины фильтра передискретизатора, хотя обычно она составляет порядка одной миллисекунды или меньше, что не так велико, как дополнительная буферизация для обычного пути микшера (обычно 20 миллисекунд).

Использование звука с плавающей запятой

Использование чисел с плавающей запятой для представления аудиоданных может значительно улучшить качество звука в высокопроизводительных аудиоприложениях. Плавающая точка дает следующие преимущества:

  • Более широкий динамический диапазон.
  • Стабильная точность во всем динамическом диапазоне.
  • Больше запаса, чтобы избежать ограничения во время промежуточных вычислений и переходных процессов.

Хотя плавающая запятая может улучшить качество звука, она имеет определенные недостатки:

  • Числа с плавающей запятой используют больше памяти.
  • Операции с плавающей запятой используют неожиданные свойства, например, сложение не является ассоциативным.
  • Вычисления с плавающей запятой иногда могут терять арифметическую точность из-за округления или численно нестабильных алгоритмов.
  • Эффективное использование чисел с плавающей запятой требует большего понимания для достижения точных и воспроизводимых результатов.

Раньше операции с плавающей запятой были известны своей недоступностью или медленностью. Это по-прежнему справедливо для младших и встраиваемых процессоров. Но процессоры современных мобильных устройств теперь имеют аппаратную поддержку операций с плавающей запятой, производительность которой аналогична (а в некоторых случаях даже выше) целочисленной. Современные процессоры также поддерживают SIMD (одна инструкция, несколько данных), что может еще больше повысить производительность.

Лучшие практики для звука с плавающей запятой

Следующие рекомендации помогут избежать проблем с вычислениями с плавающей запятой:

  • Используйте числа с плавающей запятой двойной точности для нечастых вычислений, таких как вычисление коэффициентов фильтра.
  • Обратите внимание на порядок действий.
  • Объявите явные переменные для промежуточных значений.
  • Используйте круглые скобки свободно.
  • Если вы получили результат NaN или бесконечность, используйте двоичный поиск, чтобы определить, где он был введен.

Для аудио с плавающей запятой аудиоформат, кодирующий AudioFormat.ENCODING_PCM_FLOAT , используется аналогично ENCODING_PCM_16_BIT или ENCODING_PCM_8_BIT для указания форматов данных AudioTrack. Соответствующий перегруженный метод AudioTrack.write() принимает массив с плавающей запятой для доставки данных.

Котлин

fun write(
        audioData: FloatArray,
        offsetInFloats: Int,
        sizeInFloats: Int,
        writeMode: Int
): Int

Ява

public int write(float[] audioData,
        int offsetInFloats,
        int sizeInFloats,
        int writeMode)

Для получения дополнительной информации

В этом разделе перечислены некоторые дополнительные ресурсы, посвященные выборке и числам с плавающей запятой.

Выборка

Частота выборки

Передискретизация

Споры о высокой битовой глубине и высоких кГц

Плавающая точка

Следующие страницы Википедии полезны для понимания звука с плавающей запятой:

В следующей статье представлена ​​информация о тех аспектах операций с плавающей запятой, которые оказывают непосредственное влияние на разработчиков компьютерных систем: