我想使用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之间的值......
知道发生了什么,写作和数据处理非常好,但我不明白这些价值观是什么。
谢谢。
答案 0 :(得分:1)
你可以在.wav文件中看到一些模式:
0x52 0x49 0x46 0x46
0x57 0x41 0x56 0x45
0x66 0x6d 0x74 0x20
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在没有任何干预的情况下处理它。这导致了“不平等”的价值观。