C 打开wav文件以在文本编辑器中读取数据,而不是在SND文件中读取数据

C 打开wav文件以在文本编辑器中读取数据,而不是在SND文件中读取数据,c,wav,textpad,C,Wav,Textpad,我想使用textPad读取8位wav文件的数据,我知道数据位于第44/46字节,但我在读取时遇到问题 我有这样的密码: 52 49 46 F8 37 01 00 57 41 56 45 66 6D 74 20 12 00 00 06 00 01 00 40 1F 00 00 40 1F 00 01 00 08 00 00 66 61 63 74 04 00 00C6 37 01 00 64 61 74 61 C6 37 01 00 D6 D4 56 54 D5 56 56 51 D4 D3 D0

我想使用textPad读取8位wav文件的数据,我知道数据位于第44/46字节,但我在读取时遇到问题

我有这样的密码:

52 49 46 F8 37 01 00 57 41 56 45 66 6D 74 20
12 00 00 06 00 01 00 40 1F 00 00 40 1F 00
01 00 08 00 00 66 61 63 74 04 00 00C6 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\u read\u int
在sndfile中读取它时,我在缓冲区中得到以下值:

3670016  1572864  -3670016   -1572864   524288   -3670016   -3670016 

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

哦,还有一件事,如果我将读数切换到
sf\u read\u float
而不是int,我会得到-0.0001到+0.0001之间的值

不管发生了什么,书写和数据处理都很好,但我不明白这些值是怎么回事


谢谢。

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

  • “RIFF”:
    0x52 0x49 0x46 0x46
  • “波浪”:
    0x57 0x41 0x56 0x45
  • “fmt”:
    0x66 0x6d 0x74 0x20
  • “数据”:
    0x64 0x61 0x74 0x61
我们在偏移量50处看到
64617461
。因此,数据只从偏移量54开始,而不是从偏移量46开始

您可以找到一个方法来了解文件的编码方式


多亏了这个规范,我可以告诉您您的文件是用编码的。

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

  • “RIFF”:
    0x52 0x49 0x46 0x46
  • “波浪”:
    0x57 0x41 0x56 0x45
  • “fmt”:
    0x66 0x6d 0x74 0x20
  • “数据”:
    0x64 0x61 0x74 0x61
我们在偏移量50处看到
64617461
。因此,数据只从偏移量54开始,而不是从偏移量46开始

您可以找到一个方法来了解文件的编码方式


多亏了这个规范,我可以告诉您您的文件是编码的。

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

好的,所以我发现wav文件是经过编码的,libsndfile会在没有任何干预的情况下处理它。这导致了“不相等”的值。

我假设当你说“在textPad”时,你有一个十六进制编辑器插件?(或者textPad内置了一个十六进制编辑器)是的,它确实内置了十六进制编辑器。我假设当你说“在textPad中”,你有一个十六进制编辑器插件?(或者textPad内置了一个十六进制编辑器)是的,它确实内置了十六进制编辑器。如果它是用8位ITU-T编码的,这意味着什么?好吧,假设它是54位,那么第一个字节是C6 37 01 00,sf_read_inti如何将它们解释为3670016 1572864-3670016,如果它被编码为8位ITU-T,这意味着什么?好吧,假设它是54,那么第一个字节是C6 37 01 00,sf_read_int如何将它们解释为3670016 1572864-3670016