Почему раздел данных некоторых файлов wav отключен на 2 байта?

Я пробовал wav joiner-программу на vb.net для соединения wav-файлов, и хотя иногда она работает нормально, часто результирующий wav-файл не воспроизводится. Заглянув в исходные файлы WAV, я заметил, что подгруппа данных, в которой находится слово "данные", начинается со смещения 38 вместо 36. Это то, что запутывает объединяющее устройство, которое предполагает смещение 36. Когда я экспортировал этот файл WAV из Audacity, он исправил это, и подзапуск данных начинается в 36. Все программы воспроизводят оригинальный файл хорошо, таким образом, я предполагаю, что это допустимо. Почему в этих файлах wav есть два дополнительных значения в 00 байтов прямо перед словом "data"?

1 ответ

Решение

Это предположение, но вы смотрели на четырехбайтовое число, которое по смещению 16 в файлах, где data начинается со смещения 38?

fmt sub-chunk имеет переменный размер, и его размер указывается двойным словом со смещением 16 относительно идентификатора чанка, который в ваших файлах равен нулю. Это значение dword является размером оставшейся части подчасти, исключая поле идентификатора и само поле размера. Я предполагаю, что если вы посмотрите туда, те, у кого есть два дополнительных байта, скажут, что их fmt sub-chunk имеет длину 18 байт, а не 16 (спасибо ooga за то, что поймал мою ошибку в этом).

https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

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

Другие вопросы по тегам