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

  • 15
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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

関連記事