打开一个wav文件,在文本编辑器和sndfile

时间:2016-07-13 07:14:22

标签: c wav textpad

我想使用textPad读取8位wav文件的数据,我知道数据位于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 66 61 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

粗体部分是数据。

问题是当我使用sf_read_int在sndfile中读取它时,我在缓冲区中获得以下值:

3670016  1572864  -3670016   -1572864   524288   -3670016   -3670016 

我应该如何读取wav文件中的数据?什么是等式或关系'我在sndfile中获得的数字与textPad中的数据之间的数据?

哦,还有一件事,如果我将读数切换到sf_read_float而不是int,我会得到介于-0.0001和+0.0001之间的值......

知道发生了什么,写作和数据处理非常好,但我不明白这些价值观是什么。

谢谢。

2 个答案:

答案 0 :(得分:1)

你可以在.wav文件中看到一些模式:

  • “RIFF”:0x52 0x49 0x46 0x46
  • “WAVE”:0x57 0x41 0x56 0x45
  • “fmt”:0x66 0x6d 0x74 0x20
  • “data”:0x64 0x61 0x74 0x61

我们在偏移 50 时看到64 61 74 61。因此,数据仅在偏移54而不是46开始。

您可以找到wave specification来了解如何对文件进行编码。

由于此规范,我可以告诉您,您的文件已编码为"8-bit ITU-T G.711 A-law"

答案 1 :(得分:1)

好的,所以我发现wav文件已编码,而libsndfile在没有任何干预的情况下处理它。这导致了“不平等”的价值观。