从WAV文件c ++中获取实际值

时间:2013-04-23 06:22:29

标签: c++ c audio voice voice-recognition

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

  
    

leer = fread(& sbyte,1,X,audio);

  

我应该用什么号码代替“X”。 4?

我将sbyte定义为签名字符,但签名字符仅从-128到127,这意味着它不会向我提供所需的信息。

我需要这些数字做一些分析。如果你能在这里帮助我,那我就太迷失了。

感谢。

3 个答案:

答案 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);