2016-10-02 8 views
1

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

Так, глядя на стандартном формате WAV файлов, он выглядит следующим образом:

enter image description here

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

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

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


Update Я исследовал файл с 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%) 

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

+0

В таком случае эти WAV файлы сжаты. – VuVirt

+0

@VuVirt На самом деле он не выглядит сжатым по многим причинам. Во-первых, файл действительно огромный. Проверьте образец, который я предоставил. Это похоже на 13 секунд и имеет размер 2,5 МБ. Во-вторых, я могу преобразовать его в mp3 с libmp3lame, который обычно ничего не декодирует, просто читает образцы PCM (AFAIK). –

+0

http://www-mmsp.ece.mcgill.ca/documents/audioformats/wave/wave.html – VuVirt

ответ

0

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

enter image description here