Почему при использовании sounddevice в цикле список аудио устройств системы выводится некорректно?

Как добиться корректной работы данного кода, если во время его исполнения отключенное устройство остается в списке, а подключенное не появляется? Может ли библиотека sounddevice кэшировать список устройств, и как дополнительно работать с этой ситуацией?
  • 2 декабря 2023 г. 20:30
Ответы на вопрос 1
Библиотека sounddevice в Python использует Python CFFI для доступа к PortAudio, который в свою очередь, использует операционные системы для управления аудиоустройствами. Некоторые операционные системы могут кэшировать список аудиоустройств, что могло бы повлиять на то, как sounddevice обновляет свои данные.

Другим моментом является то, что sounddevice.query_devices() кэширует список устройств во время первого вызова и использует этот кэш для всех последующих вызовов в рамках одной сессии Python.

Об этом говорится и в документации sounddevice:

https://python-sounddevice.readthedocs.io/en/0.3.15/api.html#sounddevice.query_devices

Таким образом, если вы отключаете устройство во время работы программы или подключаете новое, sounddevice может не отразить это в списке аудиоустройств до момента перезапуска сессии Python соответственно.

Однако можно принудительно обновить список, вызвав sounddevice.query_devices(с вашим подключенным устройством). Это приведет к тому, что PortAudio освежит свой внутренний список устройств и обновит данные, доступные через sounddevice.

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