无默认输出设备-9996:通过Django播放声音

无默认输出设备-9996:通过Django播放声音

我在通过网页播放声音时遇到了 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组的成员。

相关内容