1

所以我正在做一个非常重要的学校项目。我现在知道如何从 WAVE 文件中读取所有内容,包括数据。问题是我不仅需要真实的~数据值,还需要符号。该文件为 16 bps,但我不知道如何获得实际值,例如 -365 或 +19934。这就是我到目前为止所做的

leer = fread(&sbyte, 1, X, 音频);

我应该输入什么数字而不是“X”。4?

我将 sbyte 定义为有符号字符,但有符号字符仅从 -128 变为 127,这意味着它没有给我所需的信息。

我需要这些数字来做一些分析。如果你能在这里帮助我,因为我太迷路了。

谢谢。

4

3 回答 3

3

从这个页面:https ://ccrma.stanford.edu/courses/422/projects/WaveFormat/

16 位样本存储为 2 的补码有符号整数,范围从 -32768 到 32767。

在这种情况下,您想使用 16 位数据类型,在 C++/C 中是short

short data;
fread(&data, sizeof(short), 1, audio);

这将为您读取 2 个字节,并将它们存储在 short 中。您将希望循环执行此操作

于 2013-04-23T06:28:18.830 回答
1

首先,您需要读取header前 44 个字节中的信息,如以下链接所示: https ://ccrma.stanford.edu/courses/422/projects/WaveFormat/

从那里,您可以获取BitsPerSample并将读取的字节转换为short整数(如果char它是 16、8 或int32)

于 2013-04-23T06:27:28.637 回答
-1
short[] data = new short[NumSamples * NumChannels];
fread(data, sizeof(short), NumSamples * NumChannels, audio);
于 2013-04-23T07:04:08.753 回答