前回にLinuxのサウンドについてざっくりと書いたので、それを踏まえて今回はALSAのみで音を鳴らしてみる。
ファイル取得
ベース環境
ベースの環境はこれを使う。
meta-local
作業用のレイヤとしてmeta-localを準備する。
ファイルの作成
必要なディレクトリおよびファイルを作成する。
$ cd ~/rpi2/poky $ mkdir -p meta-local/conf $ touch meta-local/conf/layer.conf
layer.confの作成
meta-local/conf/layer.confを下記の内容で作成する。
# We have a conf and classes directory, add to BBPATH BBPATH .= ":${LAYERDIR}" # We have recipes-* directories, add to BBFILES BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes*/*/*.bbappend" BBFILE_COLLECTIONS += "local" BBFILE_PATTERN_local = "^${LAYERDIR}/" BBFILE_PRIORITY_local = "7"
ビルドディレクトリ
以下のコマンドでbuildディレクトリに移動する。
$ cd ~/rpi $ source poky/oe-init-build-env build
conf/bblayers.conf
bblayers.confにmeta-localを追加する。
BBLAYERS ?= " \ /home/mickey/rpi2/poky/meta \ /home/mickey/rpi2/poky/meta-yocto \ /home/mickey/rpi2/poky/meta-yocto-bsp \ /home/mickey/rpi2/poky/meta-raspberrypi \ /home/mickey/rpi2/poky/meta-local \ "
ALSA関連のパッケージ追加
rpi-basic-imageにパッケージを追加する。
bbappend
$ cd ~/rpi2/poky $ mkdir -p meta-local/recipes-core/images/ $ touch meta-local/recipes-core/images/rpi-basic-image.bbappend
rpi-basic-image.bbappendの内容を以下のようにする。
IMAGE_INSTALL += " alsa-lib \ alsa-utils \ "
ビルド
bitbake
以下のコマンドでイメージを作成する。
$ bitbake rpi-basic-image
書き込み
SDに書き込む。
$ sudo dd if=./tmp/deploy/images/raspberrypi2/core-image-weston-raspberrypi2.rpi-sdimg of=/dev/sdb bs=40M
実行
サウンドデバイスの確認(初期状態)
# aplay -l aplay: device_list:268: no soundcards found...
初期状態ではないと言われる。
サウンドドライバの組み込み
初期状態ではみつからない。
# lsmod Not tainted ipv6 331419 16 [permanent], Live 0x7f017000 uio_pdrv_genirq 2916 0 - Live 0x7f013000 joydev 8515 0 - Live 0x7f00d000 uio 7608 1 uio_pdrv_genirq, Live 0x7f007000 evdev 9794 0 - Live 0x7f000000
modprobeでドライバを組み込む
# modprobe snd_bcm2835
確認
# lsmod Not tainted snd_bcm2835 19547 0 - Live 0x7f0bf000 snd_pcm 73676 1 snd_bcm2835, Live 0x7f0a2000 snd_timer 17315 1 snd_pcm, Live 0x7f098000 snd 49918 3 snd_bcm2835,snd_pcm,snd_timer, Live 0x7f081000 ipv6 331419 16 [permanent], Live 0x7f017000 uio_pdrv_genirq 2916 0 - Live 0x7f013000 joydev 8515 0 - Live 0x7f00d000 uio 7608 1 uio_pdrv_genirq, Live 0x7f007000 evdev 9794 0 - Live 0x7f000000
サウンドデバイスの確認
ドライバ組み込み後はデバイスが見つかるようになる。
# aplay -l **** List of PLAYBACK Hardware Devices **** card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA] Subdevices: 8/8 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 Subdevice #7: subdevice #7 card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI] Subdevices: 1/1 Subdevice #0: subdevice #0
再生確認
RPi2のジャック(J7)にヘッドフォンを挿入し以下のコマンドを実行する。
aplay /usr/share/sounds/alsa/Front_Center.wav Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
若干ノイズが気になるけど、Front_Center.wavがもともとノイジーではある。 何か対策を講じる必要があるかはよくわからない。