Jun 02, 2016
Raspberry Pi でメモリ再生を試みる(piCore7にmpdをインストールする)-いろいろ追記あり
http://www.yung.jp/bony/ こちらのサイトで5月頃から興味深い試みの報告が行われている。
mpdサーバのRAMに音楽ファイルを読み込んで再生したら、NASをマウントするよりもサーバの負担が少ないので音質改善が見込めるのではないかという話だ。
うちでも昔、NASを交換したときの音質変化に驚いたことがある。
機種によってはcifs、nfsでマウントすることが負担になるNASがあるようで、そうした機種だと音が悪くなる。データの転送自体が不安定になってジッタが増加するのが原因だと思う。
そうした経験があったので「メモリ再生でNAS接続の負担から開放される」という話は、なるほどそうか、という思いだった。
試みたいが、うちにはTiny Core Linuxを走らせるハードがないから出来ないな、と思っていたら、Ras PiでPiCoreという派生OSを走らせることが出来るという。
これは面白そうだ。
結局、raspbianとpiCore7にmpdをインストールした。少々苦労したがなんとかなったので備忘録にしておく。
今回はpiCore7について。
2018年1月、追記。
このエントリーは読んでも分かりにくい面があるので、改訂版というのか、書き直しのエントリーをアップした。
分かりやすくするという目論みが成功したとは言い難いが。
piCore7にmpdをインストールする方法
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20180103a.htm
microSDの準備。
piCore7はここから落としてくる。
http://tinycorelinux.net/7.x/armv6/releases/RPi/
これをmicroSDに焼く。
6月11日、追記。
Raspberry pi2以降の機種の場合は、こちらから落す。
http://tinycorelinux.net/7.x/armv7/releases/RPi2/
piはarmv6で、pi2以降はarmv7ということらしい。プロセッサーが違うということだ。
次に、下記のサイトから設定をもらってくる。hifiberryのデバイスの設定だ。
https://www.hifiberry.com/guides/configuring-linux-3-18-x/
以下にメモとして引用しておく。
DAC/DAC+ Light
dtoverlay=hifiberry-dac
DAC+ standard/pro
dtoverlay=hifiberry-dacplus
Digi/Digi+
dtoverlay=hifiberry-digi
Amp/Amp+
dtoverlay=hifiberry-amp
選択する機種によって設定が違うので合わせてconfig.txtに記載する。
ついでに、もとからある設定について下記のように記載変更した。
dtparam=i2c=off,spi=off,i2s=on,i2c_vc=off
piCore7を起動しsshでログイン。
microSDをRasPiに刺して電源供給するとpiCoreが起動する。
sshでログイン。
ipはxxx.xxx.xxx.116。ここらは環境によって変わる。
http://tinycorelinux.net/7.x/armv6/releases/RPi/README にも書いているが、userはtc、パスワードはpiCoreだ。
適宜、下記のコマンドで設定を保存していく。
filetool.sh -b
6月5日、追記。
ipアドレスを固定した。流れは下記のとおり。
tc@box:~$ ifconfig eth0 Link encap:Ethernet HWaddr B8:27:EB:36:8A:DF inet addr:192.168.1.116 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:775439 errors:0 dropped:92 overruns:0 frame:0 TX packets:250166 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1123681152 (1.0 GiB) TX bytes:24070244 (22.9 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 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:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) tc@box:~$ cd /opt tc@box:/opt$ ls alsa/ bootlocal.sh bootsync.sh shutdown.sh tcemirror tc@box:/opt$ vi eth0.sh #!/bin/sh pkill udhcpc ifconfig eth0 192.168.1.82 netmask 255.255.255.0 broadcast 192.168.1.255 up route add default gw 192.168.1.1 echo nameserver 192.168.1.1 > /etc/resolv.conf tc@box:/opt$ ls alsa/ bootlocal.sh bootsync.sh eth0.sh shutdown.sh tcemirror tc@box:/opt$ chmod +x eth0.sh tc@box:/opt$ ls -aFl total 28 drwxrwsr-x 3 root staff 200 Jun 4 12:46 ./ drwxr-xr-x 17 root root 380 Jan 1 1970 ../ -rw-rw-r-- 1 tc staff 403 Jun 4 10:53 .filetool.lst -rw-rw-r-- 1 root staff 145 Dec 31 2014 .xfiletool.lst drwxr-sr-x 2 root staff 40 May 31 08:36 alsa/ -rwxrwxr-x 1 root staff 360 Jan 20 2015 bootlocal.sh* -rwxrwxr-x 1 root staff 272 Dec 31 2014 bootsync.sh* -rwxr-xr-x 1 tc staff 179 Jun 4 12:46 eth0.sh* -rwxrwxr-x 1 root staff 613 Dec 31 2014 shutdown.sh* -rw-rw-r-- 1 root staff 31 Dec 31 2014 tcemirror tc@box:/opt$ sudo vi bootsync.sh #!/bin/sh # put other system startup commands here, the boot process will wait until they complete. # Use bootlocal.sh for system startup commands that can run in the background # and therefore not slow down the boot process. /usr/bin/sethostname box /opt/bootlocal.sh & /opt/eth0.sh & tc@box:/opt$ vi .filetool.lst opt home etc/passwd etc/shadow etc/group etc/gshadow usr/local/etc/ssh/ssh_host_dsa_key usr/local/etc/ssh/ssh_host_dsa_key.pub usr/local/etc/ssh/ssh_host_ecdsa_key usr/local/etc/ssh/ssh_host_ecdsa_key.pub usr/local/etc/ssh/ssh_host_ed25519_key usr/local/etc/ssh/ssh_host_ed25519_key.pub usr/local/etc/ssh/ssh_host_rsa_key usr/local/etc/ssh/ssh_host_rsa_key.pub usr/local/etc/ etc/fstab opt/bootlocal.sh opt/eth0.sh tc@box:/opt$ filetool.sh -b Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz\ Done. tc@box:/opt$
これでsudo rebootしたらipアドレスが固定される。
ディスクイメージを拡張。
以下の流れでディスクイメージを拡張。もともとは最低限の大きさなので、拡張しないと後で諸々のインストールに支障を生じる
tc@box:~$ sudo fdisk -u /dev/mmcblk0 Command (m for help): p Disk /dev/mmcblk0: 7948 MB, 7948206080 bytes 3 heads, 8 sectors/track, 646826 cylinders, total 15523840 sectors Units = sectors of 1 * 512 = 512 bytes Device Boot Start End Blocks Id System /dev/mmcblk0p1 8192 69631 30720 c Win95 FAT32 (LBA) /dev/mmcblk0p2 69648 93119 11736 83 Linux Command (m for help): d Partition number (1-4): 2 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First sector (8-15523839, default 8): 69648 Last sector or +size or +sizeM or +sizeK (69648-15523839, default 15523839): 15523839 Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table fdisk: WARNING: rereading partition table failed, kernel still uses old table: Device or resource busy tc@box:~$ tc@box:~$ sudo reboot tc@box:~$ Connection to 192.168.1.116 closed by remote host. Connection to 192.168.1.116 closed. tc@192.168.1.116's password: ( '>') /) TC (\ Core is distributed with ABSOLUTELY NO WARRANTY. (/-_--_-\) www.tinycorelinux.net tc@box:~$ tc@box:~$ sudo resize2fs /dev/mmcblk0p2 resize2fs 1.42.13 (17-May-2015) Filesystem at /dev/mmcblk0p2 is mounted on /mnt/mmcblk0p2; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 30 The filesystem on /dev/mmcblk0p2 is now 7727096 (1k) blocks long. tc@box:~$
この流れは http://tinycorelinux.net/7.x/armv6/releases/RPi/README にも書いているが、ちょっと不親切。
コマンドの使い方を調べる必要があった。
各種ライブラリやalsa、flacなどなどインストール。
下記のコマンドでいろいろインストール。
tc@box:~$ tce-load -wi gcc.tcz glib2-dev.tcz tc@box:~$ tce-load -wi ncurses.tcz ncurses-dev.tcz make.tcz automake.tcz tc@box:~$ tce-load -wi compile-essentials.tcz squashfs-tools.tcz bash.tcz bc.tcz tc@box:~$ tce-load -wi pkg-config-doc.tcz pkg-config.tcz tc@box:~$ tce-load -wi alsa.tcz alsa-config.tcz alsa-doc.tcz alsa-dev.tcz alsaequal.tcz alsa-locale.tcz alsa-modules-4.1.13-piCore+.tcz alsa-modules-4.1.20-piCore+.tcz tc@box:~$ tce-load -wi flac-dev.tcz flac.tcz flac-doc.tcz libcue.tcz libcue-dev.tcz icu-dev.tcz icu.tcz
ぞろぞろ文字やらなにやらインストールの状況が端末に表示される。
なかなか面白い。
当方ではflacをcue sheetで扱えれば充分なので上記のような感じだけど、他に扱いたいファイル形式があるなら適宜必要なものを追加してインストールしておく必要がある。
alsaはユーティリティとかなくてもいいのか?と思ってたけど、なくてもデバイスの認識は出来て音も出るようだ。
この時点でこんな感じ。
tc@box:~$ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0
6月24日、追記。
wavを再生する必要性が生じたため、下記コマンドにてインストール追加した。
tce-load -wi libsndfile-dev.tcz libsndfile-doc.tcz libsndfile.tcz
mpdを再インストールしないといけない。
以前にインストールした後に残っていた、mpd、mpd-0.17.6、両ディレクトリをsudo rm -rfで削除。
あとは、下記の流れに沿ってmpd-0.17.6.tar.gzを再解凍して再インストール、で問題なく動く。
mpdのインストール。
将来的には分からないけど5月31日の時点では、tce-load -wi mpd.tcz ではインストールできない。
libopus.tczがないとかでエラーになる。
なのでソースから自分でコンパイルしてということになる。
以下、コマンドを羅列。
tc@box:~$ wget https://www.musicpd.org/download/mpd/0.17/mpd-0.17.6.tar.gz tc@box:~$ tar xvf mpd* tc@box:~$ cd mpd*6 tc@box:~/mpd-0.17.6$ ./configure tc@box:~/mpd-0.17.6$ make tc@box:~/mpd-0.17.6$ sudo mkdir ../mpd tc@box:~/mpd-0.17.6$ tc@box:~/mpd-0.17.6$ sudo make DESTDIR=../mpd install tc@box:~/mpd-0.17.6$ cd .. tc@box:~$ tc@box:~$ mksquashfs mpd mpd-0.17.6.tcz tc@box:~$ ls mpd/ mpd-0.17.6/ mpd-0.17.6.tar.gz mpd-0.17.6.tcz tc@box:~$ md5sum mpd-0.17.6.tcz > mpd-0.17.6.tcz.md5.txt tc@box:~$ ls mpd/ mpd-0.17.6/ mpd-0.17.6.tar.gz mpd-0.17.6.tcz mpd-0.17.6.tcz.md5.txt tc@box:~$ ls /mnt mmcblk0p1/ mmcblk0p2/ tc@box:~$ sudo mv *tcz* /mnt/*2/tce/optional
コマンドの羅列にしたら、こんな感じ。
本当は間に文字やら何やらが表示される。
まずwgetコマンドでmpdのサイトからソースを落として解凍。
解凍されたディレクトリでconfigure、make。
ここから後が通常のlinuxと違うところで、mpdフォルダを作ってそこに一式まとめて、make installする。
その一式を、mksquashfsコマンドでtczファイルに圧縮。
md5sumコマンドで付録をつけて、/mnt/mmcblk0p2/tce/optionalディレクトリに送り保存する。
これで管理するのがtiny coreの作法ということだ。
次に、onboot.lstの末尾に、mpd-0.17.6.tczを追記する。
tc@box:~$ sudo vi /mnt/*2/tce/onboot.lst
ちなみに、mpd-0.17.6、mpd-0.16.8はインストールできた。 mpd-0.18.19、mpd-0.19.4、mpd-0.19.5はインストール自体ができなかったり実用にならなかったりしている。
RAMDISKでmusicフォルダを設定
6月5日、追記。
RAMDISKでmusicフォルダを設定などという余計なことはせず、普通にmusicフォルダのままがいいようだ。
RAMDISKは、raspbianにmpdをインストールした時に試してみたもので、特に問題なかったのでpiCoreでも設定していたんだけど、swapとの関係なのかどうなのか分からないが、ファイルの転送がうまくいかないようだ。
現在は/etc/fstabの設定は止めている。
tc@box:~$ sudo mkdir music tc@box:~$ sudo chmod 777 music tc@box:~$ sudo vi /etc/fstab tc@box:~$ # /etc/fstab proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 devpts /dev/pts devpts defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 /dev/zram0 swap swap defaults,noauto 0 0 /dev/mmcblk0p1 /mnt/mmcblk0p1 vfat noauto,users,exec,umask=000 0 0 # Added by TC /dev/mmcblk0p2 /mnt/mmcblk0p2 ext4 noauto,users,exec 0 0 # Added by TC tmpfs /home/tc/music tmpfs defaults,size=400m 0 0
これは意味があるのかどうか良く分からない。RAMDISKとして設定しなくても動くみたいだ。
sftpソフトでアクセスして/home/tc/musicに音楽ファイルを転送する。
mpd.confで、ここをmusic_directoryに設定する。
6月4日、追記。
homeディレクトリ以下にmusicフォルダを置くと、filetool.sh -bでmusicフォルダの音楽ファイルが記憶されてしまう、ということに今更気付いた。つまり、何かの必要があって再起動したら、その記憶されていた音楽ファイルが現れてくるということ。
通常運用し始めたらfiletool.sh -bを使う機会はそうそうないと思うけど、注意がいるかも。
そういう意味では、/musicとかfiletool.sh -bの影響を受けない場所を、bootlocal.shで指示して確保したほうがスマートかもしれない。
.filetool.lstへの追記
これは、うちの環境で意味があるのかどうか分からないんだけど、一応。
sudo vi /opt/.filetool.lst
以下の3行を追記している。
usr/local/etc/ etc/fstab opt/bootlocal.sh
bootlocal.shにmpdを記載することでboot時に起動するとかあるようなんだけど、うちでは上手くいかなかった。sshでログインしてmpdコマンドを打って起動させている。
mpdの設定。
tc@box:~$ tc@box:~$ mkdir .mpd tc@box:~$ mkdir .mpd/playlists tc@box:~$ sudo cp mpd-0.17.6/doc/mpdconf.example ~/.mpdconf tc@box:~$ tc@box:~$ sudo vi .mpdconf
mpd.confを設定する。
mpdのINSTALLファイルにデフォルト指定があるので、そのひとつの~/.mpdconfを選択。
music_directoryなどの設定、alsaを出力に設定。
後は勝手知ったるもので、好きなように設定したらいい。
auto_updateを有効にしておけば、ファイルを入れ替えたらすぐに反映されるので便利。
とりあえず、以上だ。
6月6日、さらに追記。
nfsでNASをマウントする
nfsでNASをマウントするコマンド。
addr=を使う必要がある。
tc@box:~$ sudo mount -o addr=192.168.1.80,nolock -t nfs 192.168.1.80:/titan /home/tc/music
上記のコマンドで、192.168.1.80のNASの共有フォルダtitanを、piCoreのmusicディレクトリにマウントできる。
これでメモリ再生とNASをマウントした場合の比較が出来るかな。
いまさら気付いたが、NASをマウントした場合はライブラリの自動アップデートが効かない。これはmpdのバージョンが古いせいだと思う。
参考にしたサイトは以下。
http://forum.tinycorelinux.net/index.php?topic=19913.0
writeback message:
Caution!!!
Now, Anyone cannot post a comment.