这是我第一次使用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格式文件操作的好指南,我将非常感激。提前谢谢。
答案 0 :(得分:1)
您拥有的数据位于PCM个数据包中。
尝试以下问题为出发点:
对于问题的FFT部分,您可能需要考虑https://dsp.stackexchange.com/。