использование ossaudiodev для воспроизведения - PullRequest
1 голос
/ 25 мая 2011

Я пытаюсь написать потоковый аудио-клиент, и я бы хотел использовать функции 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

Есть какие-нибудь хитрости к этому?

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

Ответы [ 2 ]

0 голосов
/ 25 мая 2011

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

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

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

0 голосов
/ 25 мая 2011

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

...