Я работаю над проектом, который будет включать обработку аудио-данных 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;
}
спасибо за любую помощь.
редактировать: для тех, кто может быть заинтересован, я написал функцию, используя этот в качестве ссылки, чтобы знать
как форматируется WAV-файл
Вы надеетесь выполнить БПФ с использованием OpenAL? Я не знаю, возможно ли это. Ваш код, скорее всего, будет выполнять БПФ.
Вам не нужно явно устанавливать какие-либо темы. Тем не менее, ваша аудио библиотека будет делать это от вашего имени. Я не знаком с OpenAL, но способ работы многих аудио библиотек заключается в том, что вы можете указать обратный вызов, который будет выводить больше звука на выход. Таким образом, ваша основная программа будет загружать аудио из аудиофайла, помещать его в буфер (вероятно, защищенный мьютексом) для считывания обратного вызова аудио, вычислять FFT по окну аудио и, возможно, визуализировать данные для пользователя.
Опять же, аудио библиотека, вероятно, будет управлять потоками, поэтому вам не нужно беспокоиться о точной реализации потоков или о библиотеке. Но не забудьте правильно управлять общими данными с мьютексом.
Других решений пока нет …