Откройте файл WAV для чтения данных в текстовом редакторе против Sndfile
Я хочу прочитать данные 8-битного wav-файла с помощью textPad, я знаю, что данные расположены на 44/46-м байте, но у меня возникают проблемы с их чтением.
У меня есть этот код:
52 49 46 46 F8 37 01 00 57 41 56 45 66 6D 74 20
12 00 00 00 06 00 01 00 40 1F 00 00 40 1F 00 00
01 00 08 00 00 00 66 61 63 74 04 00 00 00 C6 37
01 00 64 61 74 61 C6 37 01 00 D6 D4 56 54 D5 56
56 51 D4 D3 D0 D6 54 57 D4 54 57 51 57 D0 D3 D1
и т.п.
Часть, выделенная жирным шрифтом, является данными этого.
Проблема в том, когда я читаю его в sndfile, используя sf_read_int
Я получаю в буфер следующие значения:
3670016 1572864 -3670016 -1572864 524288 -3670016 -3670016
так далее
Как я должен читать данные в файле WAV? Какое уравнение или "связь" между числами, которые я получил в sndfile, и данными в textPad?
Ох, и еще одна вещь, если я переключу чтение на sf_read_float
вместо int я получаю значения от -0,0001 до +0,0001...
Любая идея, что происходит, запись и обработка данных очень хороши, но я не понимаю, что происходит с этими значениями.
Спасибо.
2 ответа
Итак, я узнал, что файл wav закодирован, и libsndfile позаботится об этом без какого-либо вмешательства. Это вызвало "неравные" значения.
У вас есть шаблон для просмотра в файле.wav:
- "RIFF":
0x52 0x49 0x46 0x46
- "ВОЛНА":
0x57 0x41 0x56 0x45
- "fmt":
0x66 0x6d 0x74 0x20
- "данные":
0x64 0x61 0x74 0x61
Мы видим 64 61 74 61
по смещению 50. Таким образом, данные начинаются только со смещения 54, а не 46.
Вы можете найти волновую спецификацию, чтобы понять, как кодируется ваш файл.
Благодаря этой спецификации я могу сказать, что ваш файл закодирован в соответствии с "8-битным A-законом ITU-T G.711".