所以我正在开展一个非常重要的学校项目。我现在知道如何从WAVE文件中读取所有内容,包括数据。问题是我不仅需要真实的数据值,还需要符号。该文件是16 bps但我不知道如何获得实际值,如-365或+19934。 这就是我到目前为止所做的事情
leer = fread(& sbyte,1,X,audio);
我应该用什么号码代替“X”。 4?
我将sbyte定义为签名字符,但签名字符仅从-128到127,这意味着它不会向我提供所需的信息。
我需要这些数字做一些分析。如果你能在这里帮助我,那我就太迷失了。
感谢。
答案 0 :(得分: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个字节,并将其存储在短片中。您将希望在循环中执行此操作
答案 1 :(得分:1)
首先,您需要阅读前44个字节中的header
信息,如下面的链接所示:
https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
从那里,您可以获得BitsPerSample
并将读取字节转换为short
整数(如果为16),char
(如果为8)或int
(如果为32)< / p>
答案 2 :(得分:-1)
short[] data = new short[NumSamples * NumChannels];
fread(data, sizeof(short), NumSamples * NumChannels, audio);