ЦАП/АЦП: теория, практика, холивары.

И возник такой вопрос.
Если я правильно понимаю теорию оцифровки, то мы каким-то волшебным образом записываем всю звуковую дорожку целиком от начала и до конца, производим каким-то волшебным образом свёртку с sin(t)/t функцией (с весьма так медленно затухающими хвостами), цифруем мгновенные отсчёты через регулярные интервалы и, получаем идеальный PCM-сигнал. Если его нужно воспроизвести, мы каждый отсчёт снова волшебным образом превращаем в sin(t)/t и суммируем. Такой подход позволяет а) исключить нелинейные искажения (aliasing), б) без потерь сдвигать сигнал на дробное число отсчётов. Всё благодаря строгому ограничению ширины частотного диапазона частотой Найквиста.
Даже если сделать всё "по методичке", то любая софт-обработка звука предполагает преобразование сигнала в псевдо-аналог и обратно через sinc, особенно при нелинейных операциях (в частности, банальный клиппинг выбросов). Разумеется, ни один софт-синт такого не делает и обрабатывает сэмплы так, будто они — мгновенные и локализованные во времени. Тупо умножает отсчёты на ADSR и LFO огибающие, тупо делает дисторшн каждого отсчёта независимо, и т.п. В лучшем случае подымает перед этим частоту дискретизации.
В области записи и последующего воспроизведения звука мы можем довольно близко приблизиться к идеалу. Хотя и здесь, если сделать всё "по методичке", но для небольшой частоты дискретизации (8 КГц), то появляется характерный окрас ("звон"). Вероятно, связано это с тем, что идеализация частотного диапазона сказывается на импульсной характеристике (этот вот самый sinc).
Но в системах реального времени вообще вся теория быстро ломается практикой. Просто из-за того, что исполнителю хотелось бы иметь вменяемую реакцию (единицы, максимум десятки миллисекунд) на свои действия. Использовать бесконечный sinc в таких условиях просто не получится. А если софт-синт делает на ходу resampling, то тоже должен накладывать фильтр, опять вносящий неизбежную задержку. И это ещё до буферов аудиокарты дело не дошло.
Вот и хочется понять, как в индустрии ко всему этому относятся. Насколько реально важны эти тонкости, заморачиваются ли ими вообще?
Опять же, если мы говорим о АЦП/ЦАП для realtime работы с аудио, то какой принцип преобразования там используется? Какая фильтрация? Где вообще находится "золотая середина" между aliasing-искажениями, задержкой и импульсной характеристикой?
Есть ли индустриальные стандарты на эту тему?
И если этим заморачиваются в цифровых синтезаторах, то какие трюки используют? Если, например, поставить несколько ЦАП с подстраиваемой под ноту частотой дискретизации, вместо того, что ресемплить и микшировать всё в софте, будет ли какая-то практическая разница?
|
</> |