Edited at

Raspberry Piでオーディオデバイスが期待通りに動作しなかったときに確認したnつのこと

More than 1 year has passed since last update.

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でサウンドカードのストリームの詳細を確認することができます。card0stream00はデバイス番号、ストリーム番号です。

再生中の場合、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をビルド、インストールすることで、音声と映像が同期された状態で再生できるようになりました。これについては別途記事を書きました。


関連記事