Help us understand the problem. What is going on with this article?

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

関連記事

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした