Alsa
沒有預設輸出設備 -9996:通過 Django 播放聲音
通過網頁播放聲音時,我的 Raspberry Pi 遇到問題。該頁面是用 Django 內置的,非常簡單:按下按鈕並播放聲音(執行 Python 腳本)。我在 VirtualBox 環境中的 Debian 7 上成功測試了它,但後來我決定轉移到我的 Pi。
一切正常,但是當我點擊“播放”按鈕時,我收到 500 錯誤,並顯示以下消息:
/alarma/triggerAlarm 處的 IOError
$$ Errno Invalid output device (no default output device) $$ -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 執行時卻沒有。
想要播放聲音的程序必須能夠訪問 中的設備節點
/dev/snd/
(並讀取 中的文件/usr/share/alsa/
)。在這種情況下,這意味著 Web 伺服器的使用者必須成為該
audio
組的成員。