Raspberry PiをAirPlay対応の音楽再生機にするためにVolumioをインストールしましたが、音が鳴ったり鳴らなかったりで動作が安定せず、少し悩みました。
その際に試したこのについてのメモです。
あまり整理できていませんが、何かの参考になれば。
1. ハードウェア編
1.1. USB電源
動作が不安定な時にまずは疑いたいのは電源。1.5A以上、できれば2.0A以上を供給できるUSB電源に交換してみましょう。
Raspberry Pi 2 Model Bのような新しいモデルでは問題になることが減りましたが、今回使用したのはRaspberry Pi Model B Rev.2という少し古いモデル。古いモデルほど安定した、余裕のある電源が必要です。
1.2. USBハブ
原因ははっきりしませんが、今回はUSBハブを使うことでより安定する傾向にありました。
なお、後述するUSB-DACは外部から電源を供給するタイプであり、バスパワードではありません。
外部電源タイプのUSBハブをお持ちであれば、USBオーディオデバイスとRaspberry Piの間に挟んでみると、もしかしたら問題が解決するかもしれません。
1.3. USB-DAC / USBスピーカー
今回、利用したかったのはFOSTEX PC200USB-HRというハイレゾ対応のUSB-DAC(Digital to Analog Converter)ですが、MacBook Proに接続すると正常に鳴るのに、Raspberry Piに接続すると鳴らずに悩みました。(これはおそらく、後述するplughw
が関連するかと)
当たり前ですが、原因の切り分けのために別のマシン、オーディオデバイスがあると便利です。
今回は、USB-DACの他にOlasonic TW-S7を使ってみましたが、こちらは何の問題も無く鳴りました。
1.4. ケーブル抜き差し
これもありがちな話ですが、ケーブルを抜き差しするだけでオーディオデバイスを認識することがありました。
オーディオデバイス側か、あるいはデバイスドライバ側の作りが甘いのでしょう・・・。
2. ソフトウェア編
2.1. lsusb / dmesg
オーディオデバイスがUSB接続であれば、lsusb
コマンドを使って該当のオーディオデバイスが認識されているかどうか確認してみましょう。
dmesg
も合わせて確認するのが良いでしょう。何かしらエラーメッセージが出力されているかもしれません。
root@volumio:~# 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 005: ID 1019:0402 Elitegroup Computer Systems (ECS)
Bus 001 Device 004: ID 08bb:2704 Texas Instruments Japan
root@volumio:~# dmesg
[ 212.617008] usb 1-1.3.4: new full-speed USB device number 6 using dwc_otg
[ 212.780441] usb 1-1.3.4: config 1 has an invalid interface number: 3 but max is 2
[ 212.805776] usb 1-1.3.4: config 1 has an invalid interface number: 3 but max is 2
[ 212.831149] usb 1-1.3.4: config 1 has an invalid interface number: 3 but max is 2
[ 212.856795] usb 1-1.3.4: config 1 has no interface number 2
[ 212.902453] usb 1-1.3.4: New USB device found, idVendor=1019, idProduct=0402
[ 212.927542] usb 1-1.3.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 212.953259] usb 1-1.3.4: Product: PERSONAL AMPLIFIER
[ 212.976458] usb 1-1.3.4: Manufacturer: FOSTER Elec. CO., LTD
[ 213.039241] input: FOSTER Elec. CO., LTD PERSONAL AMPLIFIER as /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3.4/1-1.3.4:1.0/0003:1019:0402.0001/input/input0
[ 213.128294] hid-generic 0003:1019:0402.0001: input,hidraw0: USB HID v1.00 Device [FOSTER Elec. CO., LTD PERSONAL AMPLIFIER] on usb-bcm2708_usb-1.3.4/input0
[ 213.391117] snd_usb_audio: unknown parameter 'nrpacks' ignored
[ 213.457577] usbcore: registered new interface driver snd-usb-audio
2.2. proc
ALSA(Advanced Linux Sound Architecture)レベルでオーディオデバイス(ALSAレイヤーでは「サウンドカード」)が認識されているかどうか確認してみましょう。
/proc/asound/cards
でサウンドカードの一覧を確認することができます。
root@volumio:~# cat /proc/asound/cards
0 [DAC ]: USB-Audio - USB Audio DAC
Burr-Brown from TI USB Audio DAC at usb-bcm2708_usb-1.3, full speed
1 [ALSA ]: bcm2835 - bcm2835 ALSA
bcm2835 ALSA
2 [AMPLIFIER ]: USB-Audio - PERSONAL AMPLIFIER
FOSTER Elec. CO., LTD PERSONAL AMPLIFIER at usb-bcm2708_usb-1.2, full speed
/proc/asound/card0/stream0
でサウンドカードのストリームの詳細を確認することができます。card0
、stream0
の0
はデバイス番号、ストリーム番号です。
再生中の場合、Status: Stop
の箇所がStatus: Running
となり、出力中のサンプリング周波数などの情報が出力されます。
root@volumio:~# cat /proc/asound/card0/stream0
FOSTER Elec. CO., LTD PERSONAL AMPLIFIER at usb-bcm2708_usb-1.3, full speed : USB Audio
Playback:
Status: Stop
Interface 3
Altset 1
Format: S16_LE
Channels: 2
Endpoint: 3 OUT (ADAPTIVE)
Rates: 96000, 88200, 48000, 44100, 32000
Interface 3
Altset 2
Format: S24_3LE
Channels: 2
Endpoint: 3 OUT (ADAPTIVE)
Rates: 96000, 88200, 48000, 44100, 32000
2.3. alsamixer
オーディオ関係でありがちなのは「ボリュームが絞られていて音が鳴らない」。alsamixer
コマンドでボリュームを確認、設定しましょう。
なお、複数のオーディオデバイスが存在する場合、F6キーでオーディオデバイスを切り替えることができます。
2.4. aplay
シンプルなオーディオプレーヤーで音が鳴るかどうか確認してみましょう。
例えばaplay
コマンド。このコマンドでは-D
オプションでオーディオデバイス、ストリームを指定できます。
aplay /usr/share/sounds/alsa/Front_Left.wav
aplay -D hw:1 /usr/share/sounds/alsa/Front_Left.wav
aplay -D hw:2,0 /usr/share/sounds/alsa/Front_Left.wav
aplay -D plughw:2,0 /usr/share/sounds/alsa/Front_Left.wav
FOSTEX PC200USB-HRの場合、hw
では鳴らず、plughw
であれば鳴りました。
2.5. shairport-sync
Volumio 1系では-sync
の付かないshairport
が使われています。
これは時間の同期を行わないAirPlayエミュレータのため、動画の音声をAirPlay経由で再生すると、音声が遅延して使い物になりません。
開発中のVolumio 2系であればshairport-sync
が使われているようですが、Linuxディストリビューションとしてはまだ使い物になるレベルではありませんでした。(評価したのはVolumio 2 Alpha 4)
別途、shairport-sync
をビルド、インストールすることで、音声と映像が同期された状態で再生できるようになりました。これについては別途記事を書きました。