使用ossaudiodev进行播放
我正在尝试写一个音频流客户端,想用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
有什么窍门吗?
编辑:答案其实很明显,也有点傻。我在运行代码的时候正好在播放Pandora,所以扬声器正在“忙着”处理那个。有人能解释一下为什么会这样吗?其他应用程序怎么能同时运行多个音频流,而我似乎做不到呢?
2 个回答
0
你的桌面管理器已经在使用你的声卡了,可能用alsa的dmix插件会更好,但这通常比较复杂。
Soundblaster Live声卡支持硬件混音,所以你可以多次打开它。
没错,你肯定能找到一个能用的pyao后端。
0
即使在一些可以使用的系统上,OSS接口通常也只是ALS的一个表面包装。可以考虑使用一个支持多种接口的库,比如pyao。