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

1

Я пытаюсь написать потоковый аудиоклиент, и я хотел бы использовать функции 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] != "\0"):
        audio.write(packets[packet])
        packet += 1

Какие-нибудь трюки?

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

Теги:
audio
audio-streaming

2 ответа

0
Лучший ответ

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

0

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

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

и да окончательно вы можете найти рабочий бэкэнд pyao

Ещё вопросы

Сообщество Overcoder
Наверх
Меню