我正在開發一個項目,這個項目涉及通過fft處理PCM音頻數據,因爲它正在播放,最好是同步播放。我正在使用linux g ++編譯器,並且正在使用OpenAL讀取和播放音頻數據。C++使用OpenAL進行實況PCM fft音頻處理?
我的問題是這樣的:有沒有更好的方式來處理PCM音頻數據與fft現場音頻播放,然後使用線程?如果沒有,那麼線程庫最適合用於這些目的。
這是我的函數,它將波形數據加載到一個字節數組中,稍後可以將它們轉換爲整數進行處理,我用來播放數據的所有數據都是OpenAL。
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作爲參考知道 WAV文件是如何格式化
爲什麼你擔心線程不起作用?你究竟在擔心什麼? – Pace