Я пытаюсь написать потоковый аудиоклиент, и я хотел бы использовать функции 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
Какие-нибудь трюки?
Изменить: ответ очевиден и глуп. Я играл в пандору во время запуска кода, поэтому динамики были "заняты", делая это. Может ли кто-нибудь объяснить, почему это так? Как другие приложения могут одновременно запускать несколько аудиопотоков, но я, похоже, не могу?
Даже в тех системах, где он доступен, интерфейс OSS обычно является просто фасадом по ALSA. Подумайте об использовании библиотеки, которая поддерживает несколько интерфейсов, таких как pyao.
ваш менеджер рабочего стола уже использует вашу звуковую карту, у вас может быть больше удачи с dmix-плагином для alsa, но это часто сложно
soundblaster live имеет hw-микширование, поэтому вы можете открывать его несколько раз
и да окончательно вы можете найти рабочий бэкэнд pyao