Про Float в аудио популярно

  • Автор темы Автор темы Entrase
  • Дата начала Дата начала

Entrase

Егор
1 Ноя 2008
366
93
0
Поделюсь тем, что знаю :)

Сразу прошу прощения за разговоры про «плавную волну». При всём своём новичковском звучании такие изъяснения легко визуализируются в мыслях. В дебри программирования и математики лазить не буду, рассказываю для всех.

Про Float в аудио популярно

Где нам только не попадается надпись вроде «32 bit float» — в спецификациях, обзорах, руководствах. К сожалению, последний элемент этой надписи часто недооценивается или вовсе игнорируется, и формат ставится в один ряд с привычными нам 16- или 24-битными. То есть многие просто не осведомлены о преимуществах представления с плавающей запятой («float» — плавающий). Потому распространены суждения в духе «зачем 32, если мне и 24 достаточно». Разберёмся, зачем и где это всё-таки нужно.

Когда речь идёт о 16, 20, 24 или 48 битах, то обычно под этим подразумевается противоположность плавающей запятой — фиксированная запятая. Подписывается это как «int», то есть integer — целочисленный, т.к. в этом виде удобно представлять целые числа. Именно о представлении с фиксированной запятой считает своим долгом рассказать любой автор, пишущий об основах цифрового звука. Поэтому не будем вдаваться подробности, а лишь вспомним, что 00 = 0, 01 = 1, 10 = 2, 11 = 3 и т.д., но только с соответствующим числом разрядов (разряды и биты — одно и то же в данном контексте, если что :) Правда, один бит отдаётся под знак — так удобнее представлять «цифровую волну», которая колеблется в обе стороны относительно нуля. С разным количеством бит получается разный диапазон чисел, но самое большое по модулю число в этом диапазоне всё равно соответствует 0 дБ. Это пресловутый Full Scale, выше которого не прыгнешь, т.к. все биты уже единицы. Но иногда прыгнуть нужно.

Во-первых, в процессе обработки звука возможны очень сильные изменения уровней. Они могут быть не совсем заметными с точки зрения пользователя, но на отдельных шагах алгоритмов внутри устройств и программ обработки перепады могут быть чрезвычайно серьёзными. А ведь при традиционном целочисленном представлении количество бит у нас ограничено. Если сделаем слишком тихо, то уйдём в полный ноль или, как минимум, оставим мало места для плавного изменения уровня «волны», а если слишком громко, то получим не подлежащий исправлению клиппинг.

Во-вторых, это просто удобно: если есть возможность прыгнуть выше нуля без последствий, то потом можно спокойно понизить уровень, и в итоге ничего не потерять. Это позволяет забыть о слежении за уровнями в каждой точке системы и сосредоточиться на деле, внося необходимые коррективы где-нибудь дальше по течению, уже за точкой, где множество потоков сливаются воедино.
 
Несколько примечаний. Целочисленное (integer, int) представление данных - это не фиксированная запятая. Фиксированная запятая (точка) тоже относится к дробному представлению чисел, как и числа с плавающей точкой. Разница в том, что в числах с плавающей точкой может быть, грубо говоря, произвольное количество цифр после точки, а в числах с фиксированной - фиксированное, например "только два". Однако, математика с фиксированной запятой часто применяется в устройствах без встроенного FPU, ибо происходит она с помощью целых чисел - дробное fixed point-число выражается двумя целыми.
Что до звука в 16, 20, 24 или 48 битах - то это, как правило, звук, который хранится в целочисленном формате - без всякой фиксированной или плавающей точки.
 

Сейчас просматривают