C++ c++;FFT在wav文件数据中的应用

C++ c++;FFT在wav文件数据中的应用,c++,audio,fft,wav,openal,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);

这是我第一次使用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;
}
char*loadWAV(常量char*fn、int&chan、int&samplerate、int&bps、int&size){
字符缓冲区[4];
ifstream-in(fn,ios::binary);
in.read(缓冲区,4);//ChunkID“RIFF”
如果(strncmp(缓冲区,“RIFF”,4)!=0{
cerr您拥有的数据以数据包的形式存在

尝试以下问题作为起点:


对于你的问题的FFT部分,你可能想考虑。

你知道你想要什么格式的数据吗?你的FFT函数期待什么?关于左/右:该网站是说一个立体声源将有两倍的样本大小(见字节如何乘以NUMPLANS),而左/右将流交织。(给定块“Subchunk2Size”包含两侧)我知道,我必须在GNU倍频源中查看WaveRe.m文件,当读它时,它会考虑到这个逻辑。我将尝试将它复制到C++中。我正在尝试进行脉冲检测,从OcthVE的WaveRead函数产生的向量的外观中,我可能不需要FFT。随着时间的推移,频率会发生变化。现在我需要弄清楚如何在播放音频时使用数据进行同步和脉冲检测。我正在考虑使用gnu倍频程源(wavread.m)中的代码它方便地把数据读入向量并绘出它给我正确的频率。它将它转换成C++函数的方式。这意味着我必须手工处理数据,并想出一种方法来同步数据流和音频。如果我使用OpenAL来从一个SEP播放WAV流,我应该多线程吗?我尝试做脉冲检测,最终目的是让机器人跳到WAV文件。谢谢。这是很多问题。R:C++,使用你觉得舒服的语言。C++是一种很好的方法。Re:同步流,这通常很难。R:多线程,最有可能,但是你应该集中精力让它工作。在切换到生产者-消费者模式之前,在一个大的缓冲区上使用g。希望这有帮助。