Alsa

沒有預設輸出設備 -9996:通過 Django 播放聲音

  • October 28, 2013

通過網頁播放聲音時,我的 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組的成員。

引用自:https://unix.stackexchange.com/questions/97541