Подождите, пока воспроизведение не завершится

Я использую PortAudio в качестве интерфейса к механизму синтеза речи (преобразования текста в речь) и хочу предоставить функцию синхронного разговора, ожидающую завершения воспроизведения.

Похоже, что все функции PortAudio, которые имеют дело с этим, только ждут, пока базовый API не закончит потребление аудиоданных, а не до завершения воспроизведения.

Возможно ли это с PortAudio? Если нет, то есть ли какие-нибудь хорошие кроссплатформенные альтернативы PortAudio (должен включать интерфейс C), которые могли бы это поддерживать?


person jA_cOp    schedule 01.11.2012    source источник


Ответы (1)


Я не уверен, что обратный вызов streamFinished, как описано здесь:

http://portaudio.com/docs/v19-doxydocs/portaudio_8h.html#aa11e7b06b2cde8621551f5d527965838

это то, что вы хотите. Он может страдать от той же проблемы, но я думаю, что это сработает.

Две другие возможности:

  • Используйте настройки с меньшей задержкой.
  • Use the hardware timing. This information is available from calls like GetStreamTime(). For example:
    • get the current time
    • передать x секунд звука на оборудование
    • подождите, пока аппаратные часы покажут время начала плюс x секунд

Вас также может заинтересовать этот документ:

http://www.rossbencina.com/static/writings/portaudio_sync_acmc2003.pdf

Боюсь, я не знаю другого API с лучшей поддержкой для такого рода вещей.

person Bjorn Roche    schedule 02.11.2012