Raspberry Pi + IrBerryDAC でハイレゾ対応のポータブルオーディオ作った(ソフトウェア編)
ポータブルオーディオとしてのケース(エンクロージャ)作りに想像以上に時間を要してしまって、ここ最近ブログを書く間も惜しんで夜なべしてました。電子工作編を書いてから随分と間が開いてしまいましたが、自分の備忘録という意味も含めてソフトウェア編を書きます。
今回のシステムはハードウェア的には前回のエントリで記載しましたとおり Raspberry Pi + IrBerryDAC です。Raspberry Pi でハイレゾ再生を行うためには OS として RuneAudio か Volumio を入れておけば間違いない。好みでどちらを使うかわかれるところですが、今回は Volumio を選ぶこととします。基本的には手順は同じです。
一番簡単に環境を整えるには、IrBerryDAC の作者が公開しているイメージを SD カードに焼くことです。手順も作者のブログで公開されています。ただここで公開されている Volumio は ver1.4PI と ver1.5PI なのですが、1.5PI では 44.1kHz を超える音源が正常に再生されませんでした。本家の volumio で同様の報告がないことから IrBerryDAC との相性問題があるかもしれません。
そこで volumio 本家のほうから最新の 1.51PI を導入してみたところハイレゾ音源再生の不具合が解決されたため、ここでの説明は基本的には本家の最新版を OSX から導入する手順として説明をしていきます。
OSX から SD カードに Volumio のイメージを焼く手順
Raspberry PI A/B に挿すことができるのは通常サイズの SD カードですが、A+/B+ の micro SD カードでも基本的には手順は同じです。まずは Mac に SD カードをセットします。特にフォーマット等は不要で認識したらそのままマウントした後に、ターミナルを開いて以下の手順どおりにコマンドを実行します。
1. SD カードのデバイス名を把握する。下記の例では /dev/disk1s1 が SD カードとなります。
$ df -k Filesystem 1024-blocks Used Available Capacity iused ifree %iused Mounted on /dev/disk0s2 487712924 359669132 127787792 74% 89981281 31946948 74% / devfs 190 190 0 100% 658 0 100% /dev map -hosts 0 0 0 100% 0 0 100% /net map auto_home 0 0 0 100% 0 0 100% /home /dev/disk1s1 76186 20569 55617 27% 0 0 100% /Volumes/VOLUMIO
2. 最新の volumio のイメージをダウンロードする(ダウンロード先は ~/Downloads/ 配下)
https://volumio.org/get-started/
3. SD カードをアンマウントする
$ diskutil umount /Volumes/VOLUMIO Volume VOLUMIO on disk1s1 unmounted $ df -k Filesystem 1024-blocks Used Available Capacity iused ifree %iused Mounted on /dev/disk0s2 487712924 324381156 163075768 67% 81159287 40768942 67% / devfs 188 188 0 100% 652 0 100% /dev map -hosts 0 0 0 100% 0 0 100% /net map auto_home 0 0 0 100% 0 0 100% /home
4. volumio のイメージを SD カードに焼く
ダウンロードした volumio イメージを焼いて SD カードを Raspberry Pi で起動可能な OS としてインストールします。手順のうち rdisk1 の部分は、上記までの作業で出てきた disk1s1 の部分の文字列の disk1 の部分に r を付けた名前で、ご自分お環境と読み替えます。イメージを焼く作業は概ね 5 分〜 15 分程度かかります。
$ ls -la ~/Downloads/*.img -rw-r--r--@ 1 drk staff 1782579200 11 7 05:49 /Users/drk/Downloads/Volumio1.51PI.img $ sudo dd if=Volumio1.51PI.img of=/dev/rdisk1 bs=1m 1700+0 records in 1700+0 records out 1782579200 bytes transferred in 63.197932 secs (28206290 bytes/sec)
Raspberry Pi + volumio を起動して OS 側の設定を行う
まずは Raspberry Pi に SD カードを挿入し、ご家庭のルータに LAN ケーブルで接続した状態で電源を入れて起動します。
1. Raspberry Pi の IP アドレスを ping で調査
下記の例では 192.168.0.116 となります。
$ ping volumio.local PING volumio.local (192.168.0.116): 56 data bytes 64 bytes from 192.168.0.116: icmp_seq=0 ttl=64 time=31.630 ms 64 bytes from 192.168.0.116: icmp_seq=1 ttl=64 time=25.399 ms
2. Raspberry Pi に root でログインする
volumio の root のパスワードは voluimo で初期設定されています。セキュリティを気にされる方はパスワードを後で変更するなりしましょう。
$ ssh -lroot volumio.local The authenticity of host 'volumio.local (192.168.0.116)' can't be established. RSA key fingerprint is db:b4:76:52:92:08:a8:b8:bb:5f:0a:73:af:f7:fd:c0. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'volumio.local,192.168.0.116' (RSA) to the list of known hosts. [email protected]'s password: Linux volumio 3.12.26+ #702 PREEMPT Wed Aug 6 17:43:49 BST 2014 armv6l ___ /\_ \ __ __ __ ___\//\ \ __ __ ___ ___ /\_\ ___ /\ \/\ \ / __`\\ \ \ /\ \/\ \ /' __` __`\/\ \ / __`\ \ \ \_/ |/\ \L\ \\_\ \_\ \ \_\ \/\ \/\ \/\ \ \ \/\ \L\ \ \ \___/ \ \____//\____\\ \____/\ \_\ \_\ \_\ \_\ \____/ \/__/ \/___/ \/____/ \/___/ \/_/\/_/\/_/\/_/\/___/ Free Audiophile Linux Music Player - Version 1.5 C 2013 Michelangelo Guarise - Volumio.org Volumio Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.
3. IrBerryDAC のプログラムで必要な環境を整える(python-rpi.gpio をインストール)
root@volumio:~# echo ' deb http://archive.raspberrypi.org/debian/ wheezy main ' >> /etc/apt/sources.list root@volumio:~# apt-get update root@volumio:~# apt-get -y install python-rpi.gpio python-daemon
4. IrBerryDAC の pythonスクリプトのインストール
root@volumio:~# cd /home/volumio root@volumio:~# wget nw-electric.way-nifty.com/blog/files/mpd_ctrl.py root@volumio:~# chmod +x /home/volumio/mpd_ctrl.py
/etc/rc.local を編集して自動でpythonスクリプトを起動するようにするために、下記の1行を exit 0 の前に追加する
root@volumio:~# sudo vi /etc/rc.local /usr/bin/python /home/volumio/mpd_ctrl.py & /dev/null 2>&1
5. 電源をいきなり切っても再起動時に mpd で問題が起きないようにする
/etc/init.d/mpd を修正して mpd プロセスが起動する際に mpd_stop を必ず実行するように変更を加えます。
root@volumio:~# vi /etc/init.d/mpd start) mpd_stop mpd_start
6. 母艦の OSX から samba 経由で SD カードを read/write 可能とする
volumio にはデフォルトで samba がインストールされていますが自動起動ではありません。自動起動しておくと何かと便利です。
root@volumio:~# chkconfig samba on --level 2345 root@volumio:~# chkconfig --list samba samba 0:off 1:off 2:on 3:on 4:on 5:on 6:off root@volumio:~# /etc/init.d/samba start [ ok ] Starting NetBIOS name server: nmbd. [ ok ] Starting SMB/CIFS daemon: smbd.
7. SDカードの空き容量に新規パーティションを作成
ポータブルオーディオとして活躍できるようにするために、基本的には 64GB 以上の SD カードを用意します。ただし volumio のイメージを焼いた時点では空き容量が見えていない状態にあります。まずは空き容量に新規パーティションを作成します。
下記の作業内容がわからない場合は、基本的には何も考えずに赤文字の部分の通りに入力します。
root@volumio:~# fdisk /dev/mmcblk0 Command (m for help): p Disk /dev/mmcblk0: 128.1 GB, 128059441152 bytes 4 heads, 16 sectors/track, 3908064 cylinders, total 250116096 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00043284 Device Boot Start End Blocks Id System /dev/mmcblk0p1 * 2048 155647 76800 b W95 FAT32 /dev/mmcblk0p3 155648 3411967 1628160 83 Linux Command (m for help): n Partition type: p primary (2 primary, 0 extended, 2 free) e extended Select (default p): p Partition number (1-4, default 2): 4 First sector (3411968-250116095, default 3411968): Using default value 3411968 Last sector, +sectors or +size{K,M,G} (3411968-250116095, default 250116095): Using default value 250116095 Command (m for help): p Disk /dev/mmcblk0: 128.1 GB, 128059441152 bytes 4 heads, 16 sectors/track, 3908064 cylinders, total 250116096 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00043284 Device Boot Start End Blocks Id System /dev/mmcblk0p1 * 2048 155647 76800 b W95 FAT32 /dev/mmcblk0p3 155648 3411967 1628160 83 Linux /dev/mmcblk0p4 3411968 250116095 123352064 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks.
8. 一旦再起動を行います。
root@volumio:~# reboot
9. 新規パーティションをフォーマットしてを使える状態にする
Raspberry Pi が立ち上がったら再度 root でログインを行います。7 の作業でき領域は /dev/mmcblk0p4 となります。fdisk でフォーマットして使える状態にします。
root@volumio:~# mkfs.ext4 /dev/mmcblk0p4 mke2fs 1.42.5 (29-Jul-2012) Discarding device blocks: done Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 7716864 inodes, 30838016 blocks 1541900 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=0 942 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
次に起動時にフォーマットした領域が自動でマウントされるように設定します。
"/dev/mmcblk0p4 /mnt/USB ext4 defaults 0 0" の一行を追加します。
root@volumio:~# vi /etc/fstab GNU nano 2.2.6 File: /etc/fstab # /etc/fstab: static file system information. # #/dev/mmcblk0p3 / ext4 noatime,discard,data=writeback,journal_async_commit,nouser_xattr,barrier=0,errors=remount-ro 0 1 /dev/mmcblk0p3 / ext4 noatime,nouser_xattr,errors=remount-ro 0 1 /dev/mmcblk0p1 /boot vfat utf8 0 0 /dev/mmcblk0p4 /mnt/USB ext4 defaults 0 0 Ramdisk /run/shm tmpfs defaults,size=256M,noexec,nodev,nosuid 0 0
最後に /mnt/USB で新しく使える領域が増えていることを確認します。
root@volumio:~# df -h Filesystem Size Used Avail Use% Mounted on rootfs 1.5G 711M 711M 50% / /dev/root 1.5G 711M 711M 50% / devtmpfs 239M 0 239M 0% /dev tmpfs 49M 408K 49M 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 256M 0 256M 0% /run/shm /dev/mmcblk0p1 75M 20M 55M 27% /boot /dev/mmcblk0p4 116G 60M 110G 1% /mnt/USB Ramdisk 256M 0 256M 0% /run/shm
ハードウェアを外に持ち出せるよう WiFi 関連を設定
LANケーブル接続では外に持ち出せません。また volumio は基本的にすべての作業がブラウザ経由となります。ここでは家庭内 LAN へ接続する設定に加えて、道中テザリングでスマホから volumio へアクセスする設定を行います。 今回は バッファローの WLI-UC-GNM Wireless LAN Adapter を使っていますが、小さくて良いのですが消費電力が高めです。とある調査結果では IO-DATA WN-G150UMK が最も消費電力が低いようです。1. WiFi アダプタがハード的に認識できているかを確認します。
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 004: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070] root@volumio:~# ip link show 1: lo:mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether b8:27:eb:8f:ba:1b brd ff:ff:ff:ff:ff:ff 3: wlan0: mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 link/ether cc:e1:d5:17:32:ff brd ff:ff:ff:ff:ff:ff
2. wpa_passphrase を用いて wpa_supplicant を作成
[SSID] [PASSWORD] は各自の wifi の設定に合わせて読み替えます。複数指定可能なので、家庭内LANとテザリングの情報をそれぞれ入力します。
root@volumio:~# wpa_passphrase [家庭内SSID] [PASSWORD] >> wpa_supplicant.conf root@volumio:~# wpa_passphrase [テザリングSSID] [PASSWORD] >> wpa_supplicant.conf
3. そのままでは動かないので wpa_supplicant を下記のように変更します。
基本的には赤字部分を追加します。青文字の部分は基本的にはなくても動作しますが、動作しない場合に設定を追加・変更します。主なパラメータの意味は下記のとおりです。
wpa-scan-ssid | 0, 1 ※APがステルスモードの場合は1、それ以外は0 |
wpa-key-mgmt | WPA-PSK, WPA2-PKS など |
wpa-proto | WPA, WPA2 など |
wpa-pariwise | CCMP, TKIP など |
wpa-group | CCMP, TKIP など |
root@volumio:~# vi wpa_supplicant.conf ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="入力した家庭内LANのSSID" #psk="入力した家庭内LANのPW" psk=生成された文字列 proto=WPA key_mgmt=WPA-PSK scan_ssid=0 pairwise=CCMP group=CCMP } network={ ssid="入力したテザリングのSSID" #psk="入力したテザリングのPW" psk=生成された文字列 }
4. /etc/network/interfaces の設定を下記のように修正します
本来は wifi も固定IPだと楽なのですが、テザリングなどで固定IPにできないため、IP は dhcp て付与することにします。
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp allow-hotplug wlan0 iface wlan0 inet dhcp wpa-driver wext wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf iface default inet dhcp
5. LANケーブルを抜いて再起動を行います
root@volumio:~# reboot
6. 起動後に IP アドレスを確認します
ここまで成功していれば、Raspberry Pi は WiFi 経由で LAN 環境に接続できているはずです。 ssh して確認してみます。192.168.0.116 で接続出来ました。
ここまでくれば、スマホのテザリングでも同じようにアクセス可能となってるはずです。
root@volumio:~# ifconfig eth0 Link encap:Ethernet HWaddr b8:27:eb:8f:ba:1b UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:11 errors:0 dropped:0 overruns:0 frame:0 TX packets:11 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:634 (634.0 B) TX bytes:634 (634.0 B) wlan0 Link encap:Ethernet HWaddr cc:e1:d5:17:32:ff inet addr:192.168.0.116 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::cee1:d5ff:fe17:32ff/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:332 errors:0 dropped:0 overruns:0 frame:0 TX packets:230 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:39335 (38.4 KiB) TX bytes:32322 (31.5 KiB)
お疲れ様でした。これで wifi 経由で Raspberry Pi + volumio を操作できるようになりました。通勤道中などはテザリングでハイレゾを楽しむことができます。
ちなむにデフォルトブラウザよりも chrome で volumio は操作したほうが快適です。
Raspberry Pi へ曲を転送する方法
SDカードは ext4 でフォーマットされているため、OS X から直接参照することができません。samba 経由でアクセスすることができます。 まずは Finder のメニューから "移動" > "サーバへ接続..." を行いますサーバへ接続画面が表示されたら、そのまま接続します。
次の画面ではゲストユーザで接続を行います。
次の画面ではマウント先の選択です。/mnt/USB を選択します。
以上の操作で、Finder から /mnt/USB がアクセス可能です。後は iTunes なりの曲をドラッグして曲を転送可能です。転送速度と SD カードの速度に依存しますが、比較的もの凄く時間がかかります。
時間がかかるのが嫌な方は、4,000 円ほど出して Paragon ExtFS for Mac OS X 9 というソフトウェアを購入すると、ext4 でフォーマットされた SD カードも直接 OS X でマウントできるようになるので、超高速に曲を転送することができます。
コメントやシェアをお願いします!