использование ossaudiodev для воспроизведения

#python #audio #audio-streaming

#python #Аудио #потоковое аудио

Вопрос:

Я пытаюсь написать клиент потокового аудио и хотел бы использовать функции ossaudiodev, которые помогут мне воспроизводить аудио на моем локальном компьютере. К сожалению, я получаю исключение каждый раз, когда пытаюсь запустить свой код:

 Unhandled exception in thread started by <function audioplayer at 0x88e96f4>
Traceback (most recent call last):
  File "client.py", line 56, in audioplayer
    audio = ossaudiodev.open("/dev/audio", 'w')
IOError: [Errno 16] Device or resource busy: '/dev/audio'
  

Вот мой код. По-моему, довольно просто, но не уверен, как освободить ресурс /dev / audio.

 def audioplayer():

    audio = ossaudiodev.open("/dev/audio", 'w')
    audio.setfmt(ossaudiodev.AFMT_MU_LAW)
    audio.channels(2)
    audio.speed(8000)

    packet = 0

    sleep(.20) # give it a little bit of time to fill ze buffers

    while (packets[packet] != ""):
        audio.write(packets[packet])
        packet  = 1
  

Какие-либо хитрости для этого?

Редактировать: ответ очевиден и глуп. Я играл в pandora во время выполнения кода, поэтому динамики были «заняты» этим. Кто-нибудь может пояснить, почему это так? Как другие приложения могут запускать несколько аудиопотоков одновременно, а я, похоже, не могу?

Ответ №1:

Даже в системах, где он доступен, интерфейс OSS обычно является просто фасадом над ALSA. Рассмотрите возможность использования библиотеки, поддерживающей несколько интерфейсов, таких как pyao.

Ответ №2:

ваш менеджер рабочего стола уже использует вашу звуковую карту, возможно, вам повезет больше с плагином dmix для alsa, но это часто бывает сложно

soundblaster live имеет hw-микширование, поэтому вы можете открывать его несколько раз

и да, окончательно вы можете найти работающий сервер pyao