c ++将FFT应用于wav文件数据

时间:2014-02-17 07:41:56

标签: c++ audio fft wav openal

这是我第一次使用wav文件和fft一样。给出以下代码:

    char* loadWAV(const char* fn, int& chan, int& samplerate, int& bps, int& size){
        char buffer[4];
        ifstream in(fn, ios::binary);
        in.read(buffer, 4);                                                             //ChunkID "RIFF"
        if(strncmp(buffer, "RIFF", 4) != 0){ 
                cerr << "this is not a valid wave file";
                return NULL;
        }   
        in.read(buffer,4);                                                              //ChunkSize 
        in.read(buffer,4);                                                              //Format "WAVE"
        in.read(buffer,4);                                                              // "fmt "
        in.read(buffer,4);                                                              // 16
        in.read(buffer,2);                                                              // 1
        in.read(buffer,2);                                                              // NUMBER OF CHANNELS
        chan = convertToInt(buffer,2);
        in.read(buffer,4);                                                              // SAMPLE RATE
        samplerate = convertToInt(buffer,4);
        in.read(buffer,4);                                                              // ByteRate
        in.read(buffer,2);                                                              // BlockAlign
        in.read(buffer,2);                                                              // bits per sample
        bps = convertToInt(buffer,2);
        in.read(buffer,4);                                                              // "data"
        in.read(buffer,4);
        size = convertToInt(buffer,4);
        char * data = new char[size];
        in.read(data,size);
        return data;
}

我假设数据指针包含我需要的信息,但我不知道如何辨别这些信息。 我正在使用this作为参考,但我不知道如何制作“右声道左声道”方面以及如何准备这些数据以用于FFT。 如果你有任何关于这方面的良好文档的参考,我很感激,我的搜索工作到目前为止已经导致了NILL。

编辑:也如果有人能指出我在这个级别上使用wav格式文件操作的好指南,我将非常感激。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您拥有的数据位于PCM个数据包中。

尝试以下问题为出发点:

对于问题的FFT部分,您可能需要考虑https://dsp.stackexchange.com/