Я использовал sox для преобразования 2-канального, 48000 Гц, 24-битного wav-файла (new.wav) в монофонический wav-файл (post.wav).Вот соответствующие команды и выходы:
[Farmer@Ubuntu recording]$ soxi new.wav
Input File : 'new.wav'
Channels : 2
Sample Rate : 48000
Precision : 24-bit
Duration : 00:00:01.52 = 72901 samples ~ 113.908 CDDA sectors
File Size : 447k
Bit Rate : 2.35M
Sample Encoding: 24-bit Signed Integer PCM
[Farmer@Ubuntu recording]$ sox new.wav -c 1 post.wav
[Farmer@Ubuntu recording]$ soxi post.wav
Input File : 'post.wav'
Channels : 1
Sample Rate : 48000
Precision : 24-bit
Duration : 00:00:01.52 = 72901 samples ~ 113.908 CDDA sectors
File Size : 219k
Bit Rate : 1.15M
Sample Encoding: 24-bit Signed Integer PCM
Это выглядит хорошо.Но давайте проверим заголовок post.wav.
[Farmer@Ubuntu recording]$ xxd post.wav | head -10
00000000: 5249 4646 9856 0300 5741 5645 666d 7420 RIFF.V..WAVEfmt
00000010: 2800 0000 feff 0100 80bb 0000 8032 0200 (............2..
00000020: 0300 1800 1600 1800 0400 0000 0100 0000 ................
00000030: 0000 1000 8000 00aa 0038 9b71 6661 6374 .........8.qfact
00000040: 0400 0000 c51c 0100 6461 7461 4f56 0300 ........dataOV..
Это стандартная структура заголовка wav-файла .
Первая строка не проблема.
Вторая строка «2800 0000» показывает размер субчанка «fmt», он должен быть 0x00000028 (так как это младший порядковый номер) = 40 байтов.Но есть 54 байта (до суб-фрагмента "fmt" и суб-фрагмента "data").
В третьей строке показано, что ExtraParamSize составляет 0x0018 = 22 байта.Но на самом деле это 36 байтов (от «1600» третьей строки до «0100» 5-й строки).Предыдущие 16 байтов являются стандартными.
Так что же за дополнительные 36 байтов?