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

标签 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 格式文件,我将不胜感激。提前谢谢你。

最佳答案

您拥有的数据在PCM中数据包。

尝试将这些问题作为起点:

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

关于c++ 将 FFT 应用于 wav 文件数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21823333/

相关文章:

c++ - 如何从函数指针调用非静态方法?

c++ - 如何有效地将数组的一系列值与给定数字相乘?

c++ - 结合python和c++,或者cython,优化一个函数;最大似然示例;对c++的了解很少

android - 更改mp3文件中的wave标题

.net - 是否可以在不使用Windows Media Player的情况下获取WMA文件的长度?

facebook - 为Facebook时间轴(如Spotify)创建播放按钮?

python - 遍历大量文件并保存数据图的最快/最有效的方法是什么?

c++ - 用户输入不完整

c# - C# 中快速傅里叶变换 (FFT) 的实现

Matlab、FFT频率范围差异还是相同?