pusuke0418’s diary

すごく暇なSEのぶろぐ

raspberry pi でUSBスピーカから音出す

調べればいくらでも出てくる話ではございますが、Raspberry Piで音出したいときにUSBスピーカつないでそっから電気とってかつ音を出すと手軽。

はじめに、やることはぐぐったりして動作実績のあるものや、その後継とかを調べること。たいてい大丈夫だが、ハードウェアは相性問題もあるため。ちなみに手元ではMS-P05UWHを使っている。

つぎに、調達したUSBスピーカをRaspberry Piにつなぐ。そして、認識していることを確認する。ここはコマンドを入力したりする。まず、つながない状態で"lsusb"と打つ。そして、つないでもう一度"lsusb"と打つ。

ここで出力がなんか行数増えてれば認識していそうだと考えられる。例えば

$ lsusb
Bus 001 Device 002: ID 0424:9514 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 0410:0112 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter
Bus 001 Device 007: ID 0c76:160c JMTek, LLC. ←増えた

因みに、"-v"オプションをつけると詳細な出力がされる。詳細で意味わかんないけど出力中何となくAudioとか文字が見え隠れするとちょっと安心する。"-t"表示でツリー表示。audioとか文字が見えたりするとまたちょっと安心したりする

lsusbというのは、USBデバイスの情報を確認するコマンド。

そして、設定らしきことをするのだけれども、alsaというものが関係している。これは、Advanced Linux Sound Architectureの略なので、まぁそこは推して知るべし。まず、下のコマンド。そして例えば下記のように表示される

$ cat /proc/asound/modules 
 0 snd_bcm2835
 1 snd_usb_audio

これは、alsaサウンドカードドライバのリスト表示なので、snd_usb_audioとあるので、動作しそうであることがわかる。

最後に、alsaの設定ファイルを書き換える。対象は、/etc/modprobe.d/alsa-base.conf。そして、ファイル中に、先ほど確認した"snd_usb_audio"というものを見つける。そして、このindex値を書き換える。

/etc/modprobe.d/alsa-base.conf内

#options snd-usb-audio index=-2    ←書き換え前
options snd-usb-audio index=0   ←書き換え後

なぜindexを0にしているか、それは0を与えて先に読み込ませ、デフォルトの使用としたいから(コメントアウトするだけでも良いらしいけど手元ではなぜかうまく動かなかった)。-2は「ALSA にカードを優先的に使わせないようにする」とのこと(raspbianとは別ディストリビューションだが、arch linuxwikiAdvanced Linux Sound Architecture - ArchWikiより)。

上記までやったら、ちゃっと再起動させてみましょう。

他参考、alsa.opensrc.org