Откройте файл 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".

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