Почему процесс внутри аудиопрерывания/обратного вызова медленнее, чем в цикле?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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