Описание WAV по умолчанию, когда все спецификации "0"

Я учусь читать WAV-файлы в C++ и извлекать данные в соответствии с заголовком. У меня есть несколько файлов WAV. Просматривая заголовок всех них, я вижу, что все они следуют правилам волновых файлов. Тем не менее, записи файлов, производимые TeamSpeak, странные, но они по-прежнему воспроизводимы в медиаплеерах.

Итак, глядя на стандартный формат файлов WAV, это выглядит так:

Поэтому во всех файлах, которые выглядят нормально, я получаю допустимые значения для всех значений от "AudioFormat" до "BitsPerSample" (из рисунка). Однако в файлах TeamSpeak ВСЕ эти значения равны нулю.

Это, но первые 3 значения не равны нулю. Таким образом, в первой и третьей строках есть "RIFF" и "WAVE", а размер ChunkSize кажется законным.

Итак, мой вопрос: как игрок узнает что-либо о таком файле и распознает, что этот файл является моно или стерео? Частота дискретизации? Что-нибудь об этом? Как будто есть что-то стандартное, когда все эти значения равны нулю?


Обновление Я проверил файл с MediaInfo и получил это:

General
Complete name                            : ts3_recording_16_10_02_17_53_54.wav
Format                                   : Wave
File size                                : 2.45 MiB
Duration                                 : 13 s 380 ms
Overall bit rate mode                    : Constant
Overall bit rate                         : 1 536 kb/s

Audio
Format                                   : PCM
Format settings, Endianness              : Little
Format settings, Sign                    : Signed
Codec ID                                 : 1
Duration                                 : 13 s 380 ms
Bit rate mode                            : Constant
Bit rate                                 : 1 536 kb/s
Channel(s)                               : 2 channels
Sampling rate                            : 48.0 kHz
Bit depth                                : 16 bits
Stream size                              : 2.45 MiB (100%)

Тем не менее, не понимаю, как он пришел к этим выводам.

1 ответ

Решение

После изучения вашего файла с помощью шестнадцатеричного редактора с бинарными шаблонами WAV становится очевидным, что перед "fmt" есть дополнительный блок "JUNK" (скриншот прилагается). Блок JUNK, возможно, существует по некоторым причинам, но все его значения равны 0. Вам нужно найти (fseek возможно) wav-файл в вашем коде для первого появления байтов "fmt" и проанализировать информацию WAVEFORMATEX оттуда.

введите описание изображения здесь

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