2016-02-24 10 views
2

Я столкнулся с этой ссылкой MSDN: Intro to Audio Programming, Part 2: Demystifying the WAV Format. Пост говорит, что:Диапазон значений 16 бит WAVE

16-битных выборок в диапазоне от -32760 до 32760

который не является +/- (2^16)/2 из

некоторые сумасшедший бизнес с участием Эндианнесса и 2-го дополнения

В этом посте есть несколько ошибок, но эта часть меня больше всего раздражала. Насколько это верно, если что-нибудь?

+0

Некоторые очень ранние передискретизирующие преобразователи имели проблемы с образцами, которые прошли весь путь до рельсов; некоторые компакт-диски не могли воспроизводиться на ранних проигрывателях компакт-дисков, не сильно искажая их. Эти проблемы были зафиксированы давно, но ограничение диапазона данных может быть основано на стремлении к совместимости. Сомневаюсь, что конкретизация или дополнение 2 имеют к этому какое-то отношение. –

+0

@MarkRansom Интересная теория, спасибо за понимание. – Kaganar

ответ

2

Сообщение в этом отношении не так. Во-первых, сущность абсолютно не имеет ничего общего с чем-либо. Но есть проблема с дополнением 2s, которая заключается в том, что есть более отрицательные значения, чем положительные. Часто при выполнении обработки сигнала значения будут преобразованы в двойную точность в диапазоне от -1,0 до 1,0, а затем для преобразования в желаемое разрешение выходного бита. Если вы должны умножить на 32768 и преобразовать в целое число, то вы, очевидно, получите переполнение на положительном 1.0. Поэтому лучше всего умножить на 32767. Я не знаю, формально ли это формализовано, но по моему опыту это так. И если вы будете следовать этому предположению, вы рискуете столкнуться с волновым файлом со значением -32768 в нем, и при преобразовании в float вы получите число чуть меньше -1.0.

+0

Я сделал несколько тестов, и кажется, что можно все разделить на 32768. Из-за того, как усечение работает при кастинге от float до короткого int. Если вы изменяете поплавки, вам нужно зажать между -32768 и 32767 после умножения в любом случае. Другими словами, убедитесь, что максимальное значение <1.0f; – user1146657

1

Я не знаю, официально ли это формализовано.

Да! Это! Оба, как представляется, official RIFF spec и Broadcast WAVE format spec (которые предполагается использовать для приложений, совместимых с WAVE) утверждают довольно четкий 16-битный диапазон выборки от -32768 до 32767, как полагается Jaket.

Я обнаружил, что мне часто приходится брать статьи MSDN со вкусом соли, но их иногда трудно игнорировать, поскольку они представлены авторитетно. Поиск в сети за «wav 32760» откроет некоторые повреждения, которые эта статья сделала.

+0

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

+0

@MarkRansom В общем, это справедливая точка. Я обновил ссылку на то, что, по-видимому, является официальной спецификацией RIFF, и более подробно изложил, почему BWF применяется здесь - так вы смотрите на него, 32760 кажется ложным номером. – Kaganar

+0

Приятная находка на этой спецификации RIFF! Это действительно дает явный диапазон от 32768 до 32767. См. Мой комментарий по вопросу о моей собственной теории о том, как появился ограниченный диапазон. –