chakokuのブログ(rev4)

日々のごった煮ブログです

BeagleBoneでUSB Audioを動かす

BeagleBoneで音を鳴らしてみたいと思い、USB Audio(Sound Blaster Play!)を買ってみた。UbuntuとかだとUSBに差したら自動的に認識してMP3 Playerなんかで再生できるようだけど。。

とりあえずBeagleBoneにさしてみた。最初はTIのSDKLinuxで試したらそもそもUSB AudioのLEDすら点灯しない。そこで、一番良くできていると思われるAngstrom Linux(V2012.05)(BeagleBoneに同梱されていたSD)で試してみた。結果、LEDが点灯して、OSとしてもデバイスを認識した。。

以下 dmesgの結果


[ 414.401824] usb 1-1: new full-speed USB device number 4 using musb-hdrc
[ 414.542633] usb 1-1: New USB device found, idVendor=041e, idProduct=30d3
[ 414.542663] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=2
[ 414.542694] usb 1-1: SerialNumber: 1211120000C7
[ 414.550689] input: HID 041e:30d3 as /devices/platform/omap/musb-ti81xx/musb-hdrc.1/usb1/1-1/1-1:1.3/input/input1
[ 414.551025] generic-usb 0003:041E:30D3.0002: input: USB HID v1.00 Device [HID 041e:30d3] on usb-musb-hdrc.1-1/input3

バイスを認識してそうなので、次は再生というわけで、、MP3 Playerらしきものが/usr/binに入っていたので、 find / -name "*mp3" -print で適当なMP3を検索して再生してみた。コマンドは以下


mplayer /usr/share/cloud9/support/apf/elements/audio/office_lobby.mp3
するとAudioデバイスの指定も不要でUSB Audioから再生できた。。(イヤフォン使っています)
さすがLinux。。。デバイスドライバとかデバイスファイルとか、すべて装備されていたのであった。今回あまりに安直に動いてしまったのだけど、裏のからくりをちゃんと理解せねば*1。。

■追記 (130202)

debian , angstrom ではUSB Audioが利用可能だけど、TIのSDKで提供されるLinuxではSound Blasterのデバイス自体を認識しない。原因を調査。。

その後、Audioデバイスでははまりまくって泥沼状態。。まともに動くAngstromでは以下と表示される。

root@beaglebone:~# /usr/bin/aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: U0x41e0x30d3 [USB Device 0x41e:0x30d3], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

TIのSDKLinuxでは起動時にデバイスがUSBに刺さっていないと認識しないようであった。ホットプラグインには対応してないというか。。下に書いたgstreamerネタにも書いているように、どうやっても必須のmadをコンパイルできないのでTI版ではMP3再生を一旦あきらめた。

■追記 (130209)

MP3を再生するにはmplayerがあるけど、これ以外の方法として、gstreamerというライブラリ群(フレームワーク)がある。BeagleBoneと一番整合性が高いと思われるAngstromディストリビューションで再度トライ。MP3を再生するにはmadというエンコーダが必要なようで、これは著作権等の関係によるものか、opkgによるネット経由のインストールでは入らない。

そこで、まずは

http://www.angstrom-distribution.org/feeds/next/ipk/eglibc/armv7a/gstreamer/

から、madのパッケージ(gst-plugin-mad_0.10.16-r11.1.9_armv7a.ipk)を入手、

opkg install

で入れようとしたけど、依存関係の指摘を受けた。必要なパッケージを追加で入れて依存関係をクリアしようとたけどすでに入っているパッケージと矛盾してしまって解決することができなかった。最後の手段として、nodepsオプションで強制的に入れた。


opkg --nodeps install gst-plugin-mad_0.10.16-r11.1.9_armv7a.ipk
一応以下でMP3を再生できた。

gst-launch filesrc location=ethnic_01.mp3 ! mad ! alsasink
Angstromではこれで動くようになったけど、DebianディストリビューションではALSA自体が正しく設定できていないようで、再生デバイスがないと怒られる。。

■追記
mplayerはmp3 player程度のものではなくて、機能テンコ盛りのMPEG再生ソフトのようでした。

*1:トラブルがあって動かなかったりすると腹が立って燃え上がっていろいろ調べ倒して知識が増えるのだけど、これほどすんなり動くと調べるモチベーションが上がらない