Ответ 1
Как вы заявляете, общедоступная документация не содержит подробностей о диапазоне, используемом для с плавающей запятой. Однако из практики в отрасли за последние несколько лет и из фактических данных, существующих как файлы с плавающей запятой, я бы сказал, что это допустимое предположение.
Есть практические причины для этого, а также очень общий диапазон для нормализации высокоточных данных, являющихся цветом, звуком, 3D и т.д.
Основная причина, по которой диапазон находится в интервале [-1, 1], заключается в том, что он быстро и легко масштабируется/преобразуется в целевой бит-диапазон. Вам нужно только указать целевой диапазон и умножить.
Например:
Если вы хотите воспроизвести его в 16 бит, вы бы сделали (псевдо, считая подписанный округленный до целочисленного результата):
sample = in < 0 ? in * 0x8000 : in * 0x7fff;
или 24-бит:
sample = in < 0 ? in * 0x800000 : in * 0x7fffff;
или 8-бит:
sample = in < 0 ? in * 0x80 : in * 0x7f;
и т.д.. без необходимости корректировать исходное значение ввода любым способом. -1 и 1 будет представлять значение min/max при преобразовании в цель (1x = x).
Если вы использовали диапазон [-0,5, 0,5], вы сначала (или в какой-то момент) должны отрегулировать входное значение, поэтому для преобразования, например, в 16 бит, потребуются дополнительные шаги - у этого есть дополнительная стоимость, не только для дополнительного шага, но и потому, что мы будем работать в области с плавающей запятой, который тяжелее вычислить (последнее, возможно, является немного устаревшей причиной, поскольку обработка с плавающей запятой в наши дни довольно быстрая, но в любом случае).
in = in * 2;
sample = in < 0 ? in * 0x8000 : in * 0x7fff;
Сохранение в диапазоне [-1, 1], а не в некотором предустановленном диапазоне (например, [-32768, 32767]) также позволяет использовать большее количество бит для точности (с использованием представления IEEE 754).
ОБНОВЛЕНИЕ 2017/07
Испытания
Основываясь на вопросах в комментариях, я решил трижды проверить, выполнив тест, используя три файла с 1-секундной синусоидальной волной:
A) Плавающая точка обрезана
B) Плавающая точка max 0dB, и
C) целочисленное сжатие (преобразованное из A)
Файлы, в которых затем сканируются положительные значения <= -1.0 и >= 1.0, начиная с поля chunk и size data
, чтобы значения min/max отображали фактические значения, найденные в аудиоданных.
Результаты подтверждают, что диапазон действительно находится в инклюзивном диапазоне [-1, 1], если он не обрезается (не соответствует истине <= 0 дБ).
Но это также показало еще один аспект -
Файлы WAV, сохраненные как с плавающей запятой, допускают значения, превышающие диапазон 0 дБ. Это означает, что диапазон действительно превышает [-1, 1] для значений, которые обычно будут скопированы.
Объяснением этого может быть то, что форматы с плавающей запятой предназначены для промежуточного использования в производственных настройках из-за очень небольшой потери динамического диапазона, где будущая обработка (усиление, сжатие, ограничение и т.д.) может вернуть значения ( без потерь) в пределах конечного и нормального диапазона -0,2 - 0 дБ; и тем самым сохраняет значения as-is.
В заключение
Файлы WAV с использованием с плавающей запятой сохраняют значения в [-1, 1], если не обрезаются (< = 0dB), но допускают значения, которые считаются обрезанными
Но при преобразовании в целочисленный формат эти значения будут скопированы в эквивалентный диапазон [-1, 1], масштабируемый по битовому диапазону целочисленного формата, независимо. Это естественно из-за ограниченного диапазона, который может удерживать каждая ширина.
Таким образом, он будет поддерживать программное обеспечение проигрывателя /DAW/edit для обработки обрезанных значений с плавающей запятой либо путем нормализации данных, либо просто клика обратно в [-1, 1].
Примечания. Максимальные значения для всех файлов измеряются непосредственно из данных образца.
Примечания: Произведено как обрезанный поплавок (+6 дБ), затем преобразован в 16-битный и обратно в float
Примечания: сжимается до +6 дБ
Примечания: Обрезано до +12 дБ
Простой тест script и файлы можно найти здесь.