RaspberryPiで音を鳴らす
こいつも結構毎回設定しているのでメモ。以下ののコマンドを実行してCONFIGを起動。コマンドラインでもできるけどこっちのほうが簡単。
出力先の設定
~ $ sudo raspi-config
メニューが表示されるので、
【(8)Advanced Options】を選択。
更に【A9 Audio】を選択。
すると
音声出力先の設定になります。 【Auto】にすると接続されているなかでHDMI→HeadPhoneの順で接続を確認し出力を行います。 HDMIで出力を行うのが前提であれば【Auto】でよいですが、外部スピーカーなどを使う場合には 【Force 3.5mm('headphone')jack】を選択するのがよいでしょう。
出力のテスト
設定が終わったら以下のコマンドでテストします。
~ $ speaker-test -t sine -f 1000
1kHzの正弦波を出力してくれるので意図したところからピーっと音が鳴るか確認します。
USBスピーカーを接続してみる
基本的には上で接続するパターンがほとんどなのですが、家にUSBスピーカーがあったのでそれも接続してみました。 USBデバイスなので自動認識するとは思うのですが・・・
初期状態は以下のようになっているのですが、
~ $ sudo lsusb Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB Bus 001 Device 005: ID 2019:1201 PLANEX Bus 001 Device 006: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
USBスピーカーを接続すると以下のようになります。
~ $ sudo lsusb Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB Bus 001 Device 007: ID 0c76:1619 JMTek, LLC. Bus 001 Device 005: ID 2019:1201 PLANEX Bus 001 Device 006: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 001 Device 007: ID 0c76:1619 JMTek, LLC.
が追加されているのがわかります。
aplayでもチェックしてみます。
~ $ aplay -L null Discard all samples (playback) or generate zero samples (capture) default:CARD=ALSA bcm2835 ALSA, bcm2835 ALSA Default Audio Device sysdefault:CARD=ALSA bcm2835 ALSA, bcm2835 ALSA Default Audio Device
USBスピーカーを接続すると以下のように変化して、USB Audioが追加していることがわかります。
~ $ aplay -L null Discard all samples (playback) or generate zero samples (capture) default:CARD=ALSA bcm2835 ALSA, bcm2835 ALSA Default Audio Device sysdefault:CARD=ALSA bcm2835 ALSA, bcm2835 ALSA Default Audio Device default:CARD=Device USB PnP Audio Device, USB Audio Default Audio Device sysdefault:CARD=Device USB PnP Audio Device, USB Audio Default Audio Device front:CARD=Device,DEV=0 USB PnP Audio Device, USB Audio Front speakers surround40:CARD=Device,DEV=0 USB PnP Audio Device, USB Audio 4.0 Surround output to Front and Rear speakers surround41:CARD=Device,DEV=0 USB PnP Audio Device, USB Audio 4.1 Surround output to Front, Rear and Subwoofer speakers surround50:CARD=Device,DEV=0 USB PnP Audio Device, USB Audio 5.0 Surround output to Front, Center and Rear speakers surround51:CARD=Device,DEV=0 USB PnP Audio Device, USB Audio 5.1 Surround output to Front, Center, Rear and Subwoofer speakers surround71:CARD=Device,DEV=0 USB PnP Audio Device, USB Audio 7.1 Surround output to Front, Center, Side, Rear and Woofer speakers iec958:CARD=Device,DEV=0 USB PnP Audio Device, USB Audio IEC958 (S/PDIF) Digital Audio Output
あとは出力をチェックするのですが…
~ $ aplay /usr/share/sounds/alsa/Front_Center.wav
音声は出力されません。(先ほど設定したデバイスから出力されます。)
続・設定
音声が出なかったのはサウンドデバイスの優先順位がUSBデバイスのほうが低かったからです。この優先順位をUSBスピーカーを優先(デフォルト設定)にしなければいけません。 USBスピーカーでの出力有線設定はalsa側で行います。
ここからはOSによって設定がかわります。
Wheezyの場合
~ $ sudo vi /etc/modprorbe.d/alsa-base.conf
このファイルを開き以下の部分をコメントアウトします。
options snd-usb-audio index=-2
↓
#options snd-usb-audio index=-2
または
options snd-usb-audio index=0
-2はありえない値のため設定がされないようです。設定部分を0にする設定か、あるいは設定そのものをコメントアウトします。 その後、一度alsaのモジュールをunloadして再度loadし直します。
~ $ sudo alsa unload Unloading ALSA sound driver modules: snd-usb-audio snd-usbmidi-lib snd-hwdep snd-seq-midi snd-seq-midi-event snd-rawmidi snd-bcm2835 snd-pcm snd-seq snd-seq-device snd-timer. ~ $ sudo modprobe snd_usb_audio ~ $ sudo modprobe snd_bcm2835 ~ $ cat /proc/asound/cards 0 [Device ]: USB-Audio - USB PnP Audio Device USB PnP Audio Device at usb-bcm2708_usb-1.3, full speed 1 [ALSA ]: bcm2835 - bcm2835 ALSA bcm2835 ALSA
それでもスピーカーから音がなりません・・・予想ですがドライバが対応していないのかもしれません。
使用したのはこのスピーカーでした↓
ネットの情報ではこちら↓は行けるみたいなんすけどね。残念。追って実験してみようと思います。
Jessieの場合
/etc/modprorbe.d/alsa-base.conf
を編集すればいいんだろうなあと思ったのですが、該当のファイルがありません。alsaのバージョンがかわったのでしょう。しかし、設定の情報がほとんどなくこまっていたのですが以下のブログで情報があったので実験してみました。
【参考】 www.tapun.net
/usr/share/alsa/alsa.conf
を編集します。
~ $ sudo vi /usr/share/alsa/alsa.conf
ファイル内に以下の部分があるのを確認します。
…中略… @hooks [ { func load files [ { @func concat strings [ { @func datadir } "/alsa.conf.d/" ] } "/etc/asound.conf" "~/.asoundrc" ] errors false } ] …中略… defaults.ctl.card 0 defaults.pcm.card 0 …中略…
これを以下のように編集。
…中略… @hooks [ { func load files [ { @func concat strings [ { @func datadir } "/alsa.conf.d/" ] } "/etc/asound.conf" # "~/.asoundrc" ] errors false } ] …中略… defaults.ctl.card 1 defaults.pcm.card 1 …中略…
編集後に再起動します。
~ $ sudo reboot
起動したら音声が出力されるかテストしてみると…
~ $ aplay /usr/share/sounds/alsa/Front_Center.wav
無事に再生されました。Wheezyで動作しなかったスピーカーも動くようになったのでラッキーでした。
これでUSBスピーカーで音声を鳴らす設定は完了です。 余計なケーブルがないのでUSBスピーカーは予想以上に便利ですがRaspberryPiの電源が弱いとリブートすることもあるそうなので電源には注意してください。