Почему процесс внутри аудиопрерывания/обратного вызова медленнее, чем в цикле?C++

Программы на C++. Форум разработчиков
Anonymous
Почему процесс внутри аудиопрерывания/обратного вызова медленнее, чем в цикле?

Сообщение Anonymous »

Я пишу аудиоприложение в реальном времени на C++, которое выполняет огромную обработку фрагментов звука длительностью 10 мс. Я использую miniaudio для обработки аудио ввода-вывода. При оценке количества времени, которое занимает обработка, т. е. записи чисел из следующих внутри функции обратного вызова:

Код: Выделить всё

std::chrono::high_resolution_clock::time_point begin = std::chrono::high_resolution_clock::now();
process_audio(input, output);
std::chrono::high_resolution_clock::time_point end = std::chrono::high_resolution_clock::now();

float elapsed_microseconds = (float)std::chrono::duration_cast(end - begin).count();
Один процесс обычно занимает около 2,5 мс, но иногда время сокращается до 1,7 мс и до 4 мс.
Однако, если я сделаю то же самое в сценарии, не работающем в реальном времени (т. е. при загрузке аудиофайла и его обработке в цикле for без функции прерывания/обратного вызова), я получаю числа стабильно около 1,8 мс с очень небольшим отклонением.
Сначала я думал, что это может быть связано с операционной системой, но я наблюдаю то же самое в Windows, Mac и Linux. Я также думал, что это может быть как-то связано с miniaudio, но то же самое происходит и с RtAudio.
Что приводит к тому, что это происходит медленнее и более непредсказуемо внутри функции обратного вызова, и могу ли я что-нибудь сделать, чтобы улучшить его?

Подробнее здесь: https://stackoverflow.com/questions/786 ... -to-a-loop

Вернуться в «C++»