Я пытаюсь использовать WASAPI для рендеринга аудио в однопоточном приложении, основной цикл выглядит примерно так:
(я использую frame здесь для обозначения итерации цикла, а не аудиофрейма.)
while (!quitting)
{
AudioClips* audioClipsToPlay = AppLogic();
RenderGraphics();
// Calls WASAPI IAudioRenderClient::GetBuffer and ReleaseBuffer, render
// buffer size being initialized with N*TargetFrameDuration size.
// N is the amount of frames between the App wanting to play the clip,
// until it is played (latency).
OutputAudio(audioClipsToPlay);
SynchronizeToFrameDuration(TargetFrameDuration);
}
audioClipsToPlay
- это набор аудиоклипов (с часами и данными, такими как ожидаемое повторение), которые приложение хочет воспроизвести.
Эта система работает нормально, если частота кадров выше, чем N*TargetFrameDuration
, но иногда это не так. Очевидный способ решить эту проблему - увеличить N
, но это может увеличить задержку до нежелательных уровней.
Можно ли переписать / сбросить часть данных, которые были записаны в буфер рендеринга?