Raspberry Pi + IrBerryDAC でハイレゾ対応のポータブルオーディオ作った(ソフトウェア編)

ポータブルオーディオとしてのケース(エンクロージャ)作りに想像以上に時間を要してしまって、ここ最近ブログを書く間も惜しんで夜なべしてました。電子工作編を書いてから随分と間が開いてしまいましたが、自分の備忘録という意味も含めてソフトウェア編を書きます。

今回のシステムはハードウェア的には前回のエントリで記載しましたとおり Raspberry Pi + IrBerryDAC です。Raspberry Pi でハイレゾ再生を行うためには OS として RuneAudioVolumio を入れておけば間違いない。好みでどちらを使うかわかれるところですが、今回は Volumio を選ぶこととします。基本的には手順は同じです。

一番簡単に環境を整えるには、IrBerryDAC の作者が公開しているイメージを SD カードに焼くことです。手順も作者のブログで公開されています。ただここで公開されている Volumio は ver1.4PI と ver1.5PI なのですが、1.5PI では 44.1kHz を超える音源が正常に再生されませんでした。本家の volumio で同様の報告がないことから IrBerryDAC との相性問題があるかもしれません。

そこで volumio 本家のほうから最新の 1.51PI を導入してみたところハイレゾ音源再生の不具合が解決されたため、ここでの説明は基本的には本家の最新版を OSX から導入する手順として説明をしていきます。

DSC05555.jpg

- スポンサーリンク -

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.
root@volumio.local'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-ssid0, 1 ※APがステルスモードの場合は1、それ以外は0
wpa-key-mgmtWPA-PSK, WPA2-PKS など
wpa-protoWPA, WPA2 など
wpa-pariwiseCCMP, TKIP など
wpa-groupCCMP, 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 のメニューから "移動" > "サーバへ接続..." を行います

img005.png

サーバへ接続画面が表示されたら、そのまま接続します。

img001.png

次の画面ではゲストユーザで接続を行います。

img002.png

次の画面ではマウント先の選択です。/mnt/USB を選択します。

img003.png

以上の操作で、Finder から /mnt/USB がアクセス可能です。後は iTunes なりの曲をドラッグして曲を転送可能です。転送速度と SD カードの速度に依存しますが、比較的もの凄く時間がかかります。

img004.png

時間がかかるのが嫌な方は、4,000 円ほど出して Paragon ExtFS for Mac OS X 9 というソフトウェアを購入すると、ext4 でフォーマットされた SD カードも直接 OS X でマウントできるようになるので、超高速に曲を転送することができます。

- スポンサーリンク -