Я работаю над проектом, который будет включать обработку аудиоданных PCM через fft во время воспроизведения, желательно синхронно. Я использую компилятор linux g ++ и в настоящее время читаю и воспроизводю аудиоданные с помощью OpenAL.
У меня такой вопрос: есть ли лучший способ обрабатывать аудиоданные PCM с помощью fft live, когда звук воспроизводится, а затем с использованием потоков? Если нет, то какую библиотеку потоков лучше всего использовать для этих целей.
это моя функция, которая загружает волновые данные в массив байтов, которые позже могут быть преобразованы в целые числа для обработки, и все, что я использую для воспроизведения данных, - это 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