打开一个 wav 文件以在文本编辑器和 sndfile 中读取数据
Open a wav file to read data in text editor vs in sndfile
我想用 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 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
等等
粗体部分是它的数据
问题是当我使用 sf_read_int
在 sndfile 中读取它时,我在缓冲区中得到以下值:
3670016 1572864 -3670016 -1572864 524288 -3670016 -3670016
等等
我应该如何读取wav文件中的数据?我在 sndfile 中得到的数字和 textPad 中的数据之间的等式或 'relationship' 是什么?
哦,还有一件事,如果我将读数切换为 sf_read_float
而不是 int,我得到的值介于 -0.0001 和 +0.0001 之间...
知道发生了什么,写入和数据处理非常好,但我不明白这些值是怎么回事。
谢谢。
您可以在 .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" 编码的。
好的,所以我发现 wav 文件是经过编码的,libsndfile 会在没有任何干预的情况下处理它。这导致了 "unequal" 值。
我想用 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 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
等等
粗体部分是它的数据
问题是当我使用 sf_read_int
在 sndfile 中读取它时,我在缓冲区中得到以下值:
3670016 1572864 -3670016 -1572864 524288 -3670016 -3670016
等等
我应该如何读取wav文件中的数据?我在 sndfile 中得到的数字和 textPad 中的数据之间的等式或 'relationship' 是什么?
哦,还有一件事,如果我将读数切换为 sf_read_float
而不是 int,我得到的值介于 -0.0001 和 +0.0001 之间...
知道发生了什么,写入和数据处理非常好,但我不明白这些值是怎么回事。
谢谢。
您可以在 .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" 编码的。
好的,所以我发现 wav 文件是经过编码的,libsndfile 会在没有任何干预的情况下处理它。这导致了 "unequal" 值。