Я пытаюсь добавить неблокирующий аудио ввод / вывод в pyAudio.
pyAudio использует PortAudio для ввода / вывода звука. Чтобы сделать неблокирующее аудио в PortAudio, вы определяете функцию обратного вызова при открытии аудиопотока. Когда аудиопоток запускается, он вызывает функцию обратного вызова всякий раз, когда требуются новые аудиоданные.
Эта часть работает. Чтобы проверить это, я написал простой скрипт, который реализует функцию обратного вызова, похожую на эту:
def pyAudioCallback(frameCount,inADCtime,curTime,outADCtime,userData,inp = None):
data=getData(frameCount)
return (data,0)
Этот обратный вызов вызывается всякий раз, когда аудиопотоку нужны новые аудиосэмплы. Однако сценарий не знает, что аудиопоток все еще работает, и завершается всякий раз, когда это делается, что, конечно, также завершает аудиопоток.
Я могу обойти эту проблему, вставив куда-нибудь time.sleep()
. Воспроизведение аудио будет работать нормально, пока скрипт спит. Однако я бы предпочел отложить завершение сценария до тех пор, пока аудиопоток не решит, что он закончен.
Есть ли способ сохранить сеанс Python живым, пока не будут выполнены определенные критерии? Или какой-то цикл ожидания - единственный вариант?