Переписывающий буфер рендеринга WASAPI - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь использовать 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, но это может увеличить задержку до нежелательных уровней.

Можно ли переписать / сбросить часть данных, которые были записаны в буфер рендеринга?

...