Raspbian でも「Raspberry Pi model A/B 用 DAC カード」を使うことが出来ないかと考え始めた。
Volumio でも十分(と言うか至れり尽くせり)なのだが、自分でプログラムを書いてみたくなるのだ。
Volumioの設定ファイルを参考に、DACカードのkernelモジュールが組み込まれるように設定する。
pi@raspberrypi ~ $ sudo vi /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
#snd-bcm2835 ← コメントアウト
snd_soc_bcm2708 ← 以下5行追加
snd_soc_bcm2708_i2s
bcm2708_dmaengine
snd_soc_pcm5102a
snd_soc_hifiberry_dac
「:wq」で書き込み。再起動する。
pi@raspberrypi ~ $ sudo shutdown -r now
再起動後、sshで再接続する。
接続する時に Xのポートフォワード設定をしておくと後で役に立つ。
isih@ishi-Pri-Ser:~$ ssh -X pi@192.168.11.201 ← 「-X」はフォワード設定
pi@192.168.11.201's password:
Linux raspberrypi 3.10.25+ #622 PREEMPT Fri Jan 3 18:41:00 GMT 2014 armv6l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
pi@raspberrypi ~ $
kernelモジュールを確認してみる。
pi@raspberrypi ~ $ lsmod
Module Size Used by
snd_soc_hifiberry_dac 2075 0 ← 組み込まれた
snd_soc_pcm5102a 1378 1 ← 組み込まれた
bcm2708_dmaengine 5108 1 ← 組み込まれた
virt_dma 2273 1 bcm2708_dmaengine
arc4 1683 2
rt2800usb 16720 0
rt2800lib 67495 1 rt2800usb
crc_ccitt 1529 1 rt2800lib
rt2x00usb 11492 1 rt2800usb
rt2x00lib 44267 3 rt2x00usb,rt2800lib,rt2800usb
mac80211 315594 3 rt2x00lib,rt2x00usb,rt2800lib
cfg80211 209273 2 mac80211,rt2x00lib
snd_soc_bcm2708_i2s 5474 2 ← 組み込まれた
regmap_mmio 2806 1 snd_soc_bcm2708_i2s
rfkill 19138 2 cfg80211
snd_soc_core 131268 3 snd_soc_hifiberry_dac,snd_soc_pcm5102a,snd_soc_bcm2708_i2s
regmap_spi 1897 1 snd_soc_core
snd_pcm 81593 2 snd_soc_core,snd_soc_hifiberry_dac
snd_page_alloc 5156 1 snd_pcm
regmap_i2c 1645 1 snd_soc_core
snd_compress 8076 1 snd_soc_core
snd_seq 53769 0
snd_timer 20133 2 snd_pcm,snd_seq
snd_seq_device 6473 1 snd_seq
leds_gpio 2059 0
led_class 3688 2 leds_gpio,rt2x00lib
snd 61291 6 snd_soc_core,snd_timer,snd_pcm,snd_seq,snd_seq_device,snd_compress
「snd_soc_bcm2708」がないようだが先へ進む。
デバイスファイルを確認してみる。
pi@raspberrypi ~ $ ls -l /dev/snd/
合計 0
drwxr-xr-x 2 root root 60 11月 29 02:04 by-path
crw-rw---T 1 root audio 116, 0 11月 29 02:04 controlC0
crw-rw---T 1 root audio 116, 16 11月 29 02:04 pcmC0D0p ← PCMデバイスができている。
crw-rw---T 1 root audio 116, 1 1月 1 1970 seq
crw-rw---T 1 root audio 116, 33 1月 1 1970 timer
pi@raspberrypi ~ $
音楽を聴くために何を使うかだが、「rhythmbox」をインストールする。
pi@raspberrypi ~ $ sudo apt-get install rhythmbox
略
http://mirrordirector.raspbian.org/raspbian/pool/main/r/rhythmbox/rhythmbox-plugins_2.97-2.1_armhf.deb の取得に失敗しました 404 Not Found
E: いくつかのアーカイブを取得できません。apt-get update を実行するか --fix-missing オプションを付けて試してみてください。
アップデートしろと怒られたので。。。
pi@raspberrypi ~ $ sudo apt-get update
略
無視 http://mirrordirector.raspbian.org wheezy/rpi Translation-ja
無視 http://mirrordirector.raspbian.org wheezy/rpi Translation-en
7,102 kB を 1分 13秒 で取得しました (96.0 kB/s)
パッケージリストを読み込んでいます... 完了
再度、「rhythmbox」のインストールにチャレンジする。
pi@raspberrypi ~ $ sudo apt-get install rhythmbox
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
libelf1 libgail-3-0
これを削除するには 'apt-get autoremove' を利用してください。
以下の特別パッケージがインストールされます:
at-spi2-core avahi-daemon bind9-host freepats gcc-4.8-base geoip-database gir1.2-atk-1.0 gir1.2-clutter-1.0 gir1.2-cogl-1.0
gir1.2-coglpango-1.0 gir1.2-freedesktop gir1.2-gconf-2.0 gir1.2-gdkpixbuf-2.0 gir1.2-glib-2.0 gir1.2-gnomekeyring-1.0
gir1.2-gst-plugins-base-0.10 gir1.2-gstreamer-0.10 gir1.2-gtk-3.0 gir1.2-javascriptcoregtk-3.0 gir1.2-json-1.0
略
rhythmbox-data (2.97-2.1) を設定しています ...
rhythmbox (2.97-2.1+b1) を設定しています ...
gir1.2-peas-1.0 (1.4.0-2) を設定しています ...
zeitgeist-core (0.9.0.1-1) を設定しています ...
rhythmbox-plugins (2.97-2.1+b1) を設定しています ...
menu のトリガを処理しています ...
python-support のトリガを処理しています ...
pi@raspberrypi ~ $
pi@raspberrypi ~ $ rhythmbox & ← 「rhythmbox」をコンカレント起動。
(UbuntuなどのLinuxを使用していれば「rhythmbox」が画面上に現れる)
しかし、実際に再生しようとすると Segmentation fault してしまう。困ったものだ。
しかたないので、aplay にて再生してみる。
pi@raspberrypi ~ $ aplay 12\ -\ SYMPHONY\ NO9\ \"GO\ IN\'\ HOME\".wav ← 「\」はエスケープシーケンス
再生中 WAVE '12 - SYMPHONY NO9 "GO IN' HOME".wav' : Signed 16 bit Little Endian, レート 44100 Hz, ステレオ
pi@raspberrypi ~ $
これは再生された。それではと、24Bit 96kHzのファイルを試してみると再生されない。
pi@raspberrypi ~ $ aplay 1-0002691665.wav
再生中 WAVE '1-0002691665.wav' : Signed 24 bit Little Endian in 3bytes, レート 96000 Hz, ステレオ
aplay: set_params:1145: hw params のインストールに失敗しました:
ACCESS: RW_INTERLEAVED
FORMAT: S24_3LE
SUBFORMAT: STD
SAMPLE_BITS: 24
FRAME_BITS: 48
CHANNELS: 2
RATE: 96000
PERIOD_TIME: 125000
PERIOD_SIZE: 12000
PERIOD_BYTES: 72000
PERIODS: 4
BUFFER_TIME: 500000
BUFFER_SIZE: 48000
BUFFER_BYTES: 288000
TICK_TIME: 0
pi@raspberrypi ~ $
取りあえず 16Bit 44.1kHzのファイルは再生することができた。
今日はここまでか。。。