我在通过网页播放声音时遇到了 Raspberry Pi 的问题。该页面是用 Django 内置的,非常简单:按下按钮,就会播放声音(执行 Python 脚本)。我在 VirtualBox 环境中的 Debian 7 上成功测试了它,但后来我决定迁移到我的 Pi。
一切顺利,但当我单击“播放”按钮时,我收到 500 错误,并显示以下消息:
/alarma/triggerAlarm 处出现 IOError [Errno 输出设备无效(无默认输出设备)] -9996 请求方法:
GET Request URL: ttp://localhost/alarma/triggerAlarm Django Version: 1.5.4
Exception Type: **IOError Exception Value: [Errno Invalid output device (no default output device)] -9996 Exception**
Location: /usr/local/lib/python2.7/dist-packages/pyaudio.py in __init__, line 442 Python
Executable: /usr/bin/python Python Version: 2.7.3 Python Path:
['/var/www/webapps/example_django/example',
'/var/www/webapps/example_django/bin',
'/usr/local/lib/python2.7/dist-packages',
'/var/www/webapps/example_django/example', '/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload',
'/usr/lib/python2.7/dist-packages', '/usr/lib/pymodules/python2.7']
Server time: Sat, 19 Oct 2013 17:39:54 +0200
我尝试在 python 控制台中手动播放该文件,没有任何问题,但是当我尝试通过 django 执行此操作时,似乎不能。
我认为问题与此有关:
aplay -L 的输出:
null
Discard all samples (playback) or generate zero samples (capture)
sysdefault:CARD=ALSA
bcm2835 ALSA, bcm2835 ALSA
Default Audio Device
我在 Google 中搜索并尝试了几种解决方案,例如在主目录中创建 asound.conf 文件,但没有一个成功。我真的不明白为什么声音可以通过 aplay 命令和 python shell 工作,但在 python 脚本由 Django 执行时却不能工作。
答案1
想要播放声音的进程必须能够访问 中的设备节点/dev/snd/
(并读取 中的文件/usr/share/alsa/
)。
在这种情况下,这意味着 Web 服务器的用户必须成为该audio
组的成员。