ALSA: Как узнать, когда звук закончился

У меня есть объект C ++, который принимает звуковые запросы и воспроизводит их с помощью ALSA. Есть поток, который обрабатывает звуковые запросы. Некоторые звуки являются периодическими и меняются по расписанию после записи содержимого файла wav в библиотеку ALSA. Есть ли способ узнать, когда все данные были воспроизведены? Функция snd_pcm_writei - это функция блокировки записи, но это не обязательно означает, что файл был воспроизведен.

Один из вариантов, который я рассматриваю, - это вызов snd_pcm_drain после воспроизведения каждого звукового файла, а затем вызов snd_pcm_prepare при воспроизведении следующего файла. Было бы это хорошим решением? Или это неэффективно?

Обновление: «Сливное решение» вроде работает, но не очень эффективно. Для возврата вызовов требуется время (возможно, это очищает некоторые ресурсы) и увеличивает задержку в программе. Задержка лучше всего видна, когда я проигрываю много маленьких файлов подряд. Между каждым файлом можно услышать несколько секунд тишины; это выполняется snd_pcm_drain.

8
задан waffleman 19 October 2010 в 18:43
поделиться