Dec 08, 2018

apu2c4で768kHzへのアップサンプリングに取り組む

Raspberry Pi2をPCトラポとして運用しているんだけど、やってみての感触から受ける印象だけなんだけど、384kHz以上へのアップサンプリングはRas Pi2初期型ではハードウェア的にいっぱいかな、という気がしている。
つまり384kHzが限界なのだ。
768kHzへのアップサンプリングは頑張っても出力できないだろうと思う。
DACを新しくしたのは700kHzの音がどうなのか確認する意味もあったので、ちょっと残念な状況。
そこでどうしたらいいか、ということを考えてみた。

まず、ハードの限界と考えるのでハードを変える。
選択枝として、まず「Raspberry Pi 3b+」が考えられる。
CPUのスペックが900MHzから1.4GHzに5割増し。うちのPi2は初期型なので、ARMv7からARMv8(64bit)にもアップすることになる。つまり64bit化が可能になる。メモリは1GBで変わらない。

課題がいくつか。
900MHzから1.4GHzへのアップで、どの程度の改善が見込めるのかという点がまず1つ。
64bit OSで使えたら処理能力アップが見込めるけど、使えるのかという点が2つめだ。

どんなOSが使えるのか。
今使っているpiCoreは、3b+への対応待ちで使えない。そして64bitへの対応はいつになるかも分からない。
raspbianは3b+で使えるけど64bitには対応していない。32bitだ。
この際なので64bitで使いたい。
ということだと、実はUbuntu、Fedora、Arch Linux、openSUSE、、と、いろいろ3b+に対応したOSがあったりする。どれか選んで、mpdをインストールして使うということになる。

ハードの選択枝はRas pi 3b+だけではない。
実は以前に、PCEngines社の「apu2c4」を入手していた。4GBのメモリを積んでるのでRAMメモリ再生機として使うつもりで入手したんだけど、結局、Ras Pi2で運用継続してしまったので、しまい込んだままになっていたのだ。
CPUはAMD 1GHzクアッドコアでほぼRas Pi2と同等だが、OSにRas Pi2で使い慣れたpiCoreの同系「Tiny Core Linux」のCore Pure 64か、dCore x86_64が使えるのではないかと思う。Tiny CoreはRAM上で動くというのも優位性と考えられる。
問題は、このハードは触らないまま今まで来てるということ。
つまり勝手が分からないのだ。
しかし勝手が分からないのは3b+でFedoraとかでも同じだ。

そんなわけで、まずapu2c4をTiny Core 64bit OSで動かしてみることにした。
参考にさせていただいたのは下記のサイト。

Tiny Core 6.1 64bit版のインストールと、dockerを動かそうとしたメモ
https://qiita.com/tukiyo3/items/d61b2054560451c47fdc

メモリ再生(8)~64bit版 Tiny Coreを使ってみる。~その1(イメージファイル配布)
http://flac.aki.gs/bony/?p=3535

インストールしたのは、CorePure64-7.2.iso。
CorePure64-9.0.isoは、SDカードへのインストールまでは出来たけどapu2c4で動かそうとしたら上手くいかなかった。
CorePure64-8.2.1.isoは試していない。

難儀したのは、なにしろ取り掛かって実際に触ってみないと、何をしたらいいのかよく分らなかったこと。何回か繰り返すうちに、だいぶ慣れた。
あと、OSインストールのベース機に使った64bitノートパソコンは日本語キーボードだったので、sshd_config.origのコピーに際して"_"の入力方法が分からなかったこと。Tiny Core OSには日本語キーボードのキー配列設定が入ってないのだ。
ネットで英語キーボードの配列を調べてなんとかした。「shiftキー」+「-キー」で"_"が打てた。
sshで接続したら、あとは概ね大丈夫だった。

tc@box:~$ uname -a
Linux box 4.2.9-tinycore64 #1999 SMP Mon Jan 18 19:59:34 UTC 2016 x86_64 GNU/Linux

tc@box:~$ cat /proc/asound/card*/pcm0p/sub0/hw_params
access: RW_INTERLEAVED
format: S32_LE
subformat: STD
channels: 2
rate: 768000 (768000/1)
period_size: 32768
buffer_size: 131072

これで、768kHz/32bitへのアップサンプリングを問題なく再生できるようになったかな、、、
今のところ、1時間以上連続再生してもノイズはない。
Tiny Coreの32bit OSだったらどうなのかは試していない。 音質評価はまだしていない。
でもとりあえず、シンディローパーのタイムアフタータイムが素晴らしく生々しい感じ。

以下、インストールのコマンドや記載内容など流れを羅列。
実際に触ったことがない人が見ても良く分からないと思うけど、自分用の備忘録だ。

備忘録だけなのも味気ないなと思ったので、分かりやすくなるように追記してみる。 まず準備するものを列記。

1)CorePlus-current.iso: Tiny Core Linuxのサイト(http://tinycorelinux.net/downloads.html)からダウンロードしたインストーラーOSのイメージファイル。「CorePlus」から落す。 うちではCD-ROMに焼いたけど、条件が合うならusbメモリに書き込んで使ってもいい。

2)64bit PC: インストールの母艦。 CorePlus-currentからの起動、SDカードへのOS書き込みと、SDカードにインストールしたTiny Coreからの起動を行う。 だから、まず必要な機能はCorePlus-current.isoを書き込んだメディアからの起動と、SDカードからの起動ができること、だ。内蔵DVDドライブとかusb接続のカードリーダー、何でもいいから、使うことになるメディアから起動できる機械を用意する。 且つ、CorePlus-currentから起動し、そこからSDカードに書き込みを行うので、2つのメディアを同時に使えるほうがいい(Tiny Coreはメモリ上で動くので、実はCorePlus-currentを起動した後はメディアは外せるんじゃないかと思うんだけど、試していない)。 64bit OSを動かすから、当然64bit PCである必要がある。 あと、sshで遠隔操作するのと、インストールするOSをダウンロードするので、ネットにつながる家庭内有線LANが使えること。 うちではhp compaq 6730b、サブマシンのノートを使った。内蔵DVDドライブとusb端子4つとSDカード端子が付いていてSDカードからの起動もできて扱いやすい。usbカードリーダーからの起動も使おうと思えば使える。

3)sshクライアントPC: ssh経由でOS、mpdのインストール操作からmpd起動までのほとんどを行うことになる。 sshが使えたら普段使いのPCで構わないと思う。

4)apu2c4: これを忘れてはいけなかった。現在は販売は終了しapu2d4が売られている。

準備ができたら、64bit PCを、CorePlus-current.isoを書き込んだメディアで起動する。 起動画面が表示されるので、下の方、「No X/GUI」と書いてあるのを選択し起動する。 CUI画面で起動するので、以下、流れを羅列。



##################    (boot 64bit PC CorePlus-current.iso CD-ROM No X/GUI : install openssh)
sudo passwd tc
tce
s
ssh
7 : 7. openssh.tcz
q
i
q
sudo /usr/local/etc/init.d/openssh start

CorePlus-currentが起動。ユーザーは「tc」になっている。 sshでログインできるように、passwdコマンドで「tc」のパスワードを設定。

tceコマンドで、opensshをインストールする。 「s」を打って「enter」、検索語入力になるので「ssh」、1からずらっと来て、7. openssh.tcz、と表示されるので「7」と打ち込むとopen.sshの説明が表示されるので「q」で閉じて、「i」でインストール。関連したものも含めてスイスイとインストールされる。「q」でtceを閉じる。

「sudo /usr/local/etc/init.d/openssh start」と打ち込むと、sshサーバーとして起動する。 これで、他のパソコンからsshでログイン、コントロールできる。



##################    (change machine : ssh login 64bit PC : install tiny core OS to SD card)
ssh tc@192.168.1.64

tce-load -wi tc-install.tcz
wget http://tinycorelinux.net/7.x/x86_64/release/CorePure64-7.2.iso

cp `which tc-install.sh` .
sed -e 's/vmlinuz/vmlinuz64/g' -e 's/core/corepure64/g' tc-install.sh > tc-install64.sh

おもむろに腰を上げて、sshクライアントとして使うPCに向かう。うちでは普段使いのノートPCを使った。 sshでCorePlus-currentが動いているインストール母艦にログイン。 ユーザー「tc」、パスは先刻設定したはず。ipアドレスは環境によって変わるので各個で確認のこと。

インストーラである「tc-install.tcz」をダウンロード、インストール。CorePlus-currentはインストールに使うOSなんだけど、なぜかインストーラをここでインストールしないといけないみたい。 続いて、インストールするOSのイメージファイル「CorePure64-7.2.iso」をホームディレクトリに落とす。 インストールスクリプト「tc-install.sh」をホームディレクトリにコピー。 そのスクリプトの書き換え。これをしないと、インストールできないということらしい。



### (insert SD card) ###
fdisk -l
sudo sh ./tc-install64.sh

i :iso-file
/home/tc/CorePure64-7.2.iso
f :frugal
2 :partition
4 : 4. sdb1
y : Would you like to install a bootloader?
Press Enter key : (Install Extensions from this TCE/CDE Directory)
4 : 4. ext4
y : Mark sdb1 active bootable? y/n
vga=normal syslog showapps waitusb=5 : Enter space separated boot options
y : Last chance to exit before destroying all data on sdb1

Installation has completed
Press Enter key to continue.

sudo poweroff

一旦、インストール母艦の64bit PCのところに戻って、SDカードを刺して、sshクライアントPCに戻る。 「fdisk -l」と打つと、64bit PC上のメディアの状況が一覧表示される。その中からSDカードのデバイス名を確認(うちではsdb1だった)。この確認を間違えると、母艦のOSが上書きされたりする大事故につながるので要注意だ。

「sudo sh ./tc-install64.sh」で、インストールスクリプトを走らせる。 「i」で、isoファイルからのインストールを選択。 次にファイルのアドレスを打ち込む。 「f」はfrugal。zipの「z」でもいいみたいだけど、今回は「f」を選んだ。画面には説明が英文表示されている。 パーティションにインストールするかどうか訊いてくる。パーティションでいいので「2」と応答。 インストールするパーティションを選択。今回は表示された中からsdb1を探して「4」。この数字はどこにインストールするかによって変わる。 ブートローダーをインストールするかどうか訊いてくる。「enter」で先に進む。 ファイル形式を訊かれるので「4」でext4を選択。 インストールするデバイスで起動可能にするかどうか訊いてくる。起動しないと困るので「y(yes)」。 オプションを訊かれるので、提示された例をコピペ。 「Last chance to exit before destroying all data on sdb1」と訊かれる。OSインストールするのでsdb1のデータが消えるのは仕方ないので「y」。

10秒ぐらいでインストール終了。 これでSDカードに「CorePure64-7.2」が書き込まれた。 「sudo poweroff」でインストール母艦をシャットダウンする。



##################    (change machine : boot 64bit PC SD card : install openssh, nfs)
uname -a
sudo passwd tc
tce
s
ssh
6 : 6. openssh.tcz
q
i

s
nfs
3 : 3. nfs-utils.tcz
q
i
q

cd /usr/local/etc/ssh
ls
sudo cp sshd_config.orig sshd_config
sudo /usr/local/etc/init.d/openssh start

インストール母艦の64bit PCのもとに移動。SDカードのCorePure64-7.2から起動する(必要ならBIOSで起動ディスクの優先順位を調整する)。 これからSDカードに書き込まれたCorePure64-7.2を使えるように設定していく。

「uname -a」でSDカードにインストールされたOSを確認できる。 Linux box 4.2.9-tinycore64 #1999 SMP Mon Jan 18 19:59:34 UTC 2016 x86_64 GNU/Linux、うちではこんな感じ。 sshでログインできるように、passwdコマンドで「tc」のパスワードを設定。

tceコマンドで、opensshをインストールする。 「s」を打って「enter」、検索語入力になるので「ssh」、1からずらっと来て、6. openssh.tcz、と表示されるので「6」と打ち込むとopen.sshの説明が表示されるので「q」で閉じて、「i」でインストール。関連したものも含めてスイスイとインストールされる。 続いて、うちではNASをマウントして使うつもりなのでnfsもインストールしておく。 最後は「q」でtceを閉じる。

sshサーバーとして動かすために、/usr/local/etc/sshディレクトリに移動。 sshd_config.origをコピーしてsshd_configを作る。ここで問題になるのは「_」の入力が日本語キーボードの表示のままに出来ないこと。CorePure64-7.2は英語キーボード配列しか認識していないからだ。日本語キーボードからだと「shiftキー」+「-キー」で「_」を入力できる。キーボードが英語キーボードだったら、こんな面倒はないかもしれない。 コピーができたら、opensshを起動。



##################    (change machine : ssh login 64bit PC : basic setting SD card)
vi .ssh/k*
ssh tc@192.168.1.64

vi /opt/bootlocal.sh

/usr/local/etc/init.d/openssh start
/usr/local/etc/init.d/nfs-client start
mkdir /mnt/music
mkdir /mnt/music/ariel
mkdir /mnt/music/titan
chmod -R 777 /mnt/music

vi /opt/.filetool.lst

etc/shadow
etc/passwd
usr/local/etc/ssh/sshd_config
usr/local/etc/
etc/fstab
etc/securetty
etc/inittab
sbin/autologin
/opt/bootlocal.sh

vi .ashrc

alias titan="sudo mount -t nfs 192.168.1.80:/titan /mnt/music/titan"
alias ariel="sudo mount -t nfs 192.168.1.120:/ariel /mnt/music/ariel"

filetool.sh -b
sudo poweroff


##################    (change machine : boot apu2c4 SD card)

おもむろに腰を上げて、sshクライアントPCに向かう。 sshでCorePure64-7.2が動いているインストール母艦にログインするんだけど、アクセスする前に「vi .ssh/k*」で.ssh/known_hostsファイルを編集する必要がある。母艦にはdhcpサーバーからipアドレスを割り振られているんだけど、CorePlus-currentとCorePure64-7.2に同じアドレスが割り振られた場合(そうなる場合が多いと思うけど)、CorePlus-currentからもらった鍵はCorePure64-7.2には合わないのでログインを蹴られるのだ。 予めknown_hostsファイルに保存されているインストール母艦のアドレスの行を削除し、その上で母艦にアクセスする。 ユーザーは「tc」。パスは先刻設定した奴。

ログインしたら「/opt/bootlocal.sh」の編集。 この項は、うちに固有の設定をメモ書きしていて、他の人の参考にならない部分が多い。 しかし「openssh start」の設定は必須。これを設定しておかないと、起動したあとでログインできないSDカードが出来てしまう。 「nfs-client start」は、nfsなんて使わないという人には要らない。 mkdir云々は、うちの固有設定だ。起動時にmpdのmusic_directoryとNASのマウントポイントを作るようにしている。

次に「/opt/.filetool.lst」の編集。 参考にさせていただいたサイトからコピーしたままで、うちの環境では本当は何が必要かどうかは全く検討していない。

「.ashrc」の編集、これはうちに固有の設定。 うちではNASのマウントやmpdの起動はsshから行うのがデフォルト。コントロールは端末ソフトからncmpcppで行うので、そうした操作は苦にならないのだ。

「filetool.sh -b」でSDカードに設定を保存、poweroff。 これでインストール母艦の役割は終了。SDカードを母艦から抜き、apu2c4に刺して起動する。



##################    (change machine : ssh login apu2c4 : mpd install, setting)
ssh tc@192.168.1.90

tce-load -wi \
ncurses-dev.tcz ncurses.tcz make.tcz gcc.tcz compiletc.tcz squashfs-tools.tcz \
perl5.tcz bash.tcz automake.tcz bc.tcz glib2-dev.tcz boost-dev.tcz icu-dev.tcz \
pkg-config.tcz glib2-python.tcz dbus.tcz dbus-dev.tcz flex-dev.tcz gdbm-dev.tcz \
bison.tcz binutils.tcz autoconf.tcz libtool-dev.tcz bc.tcz cmake.tcz

tce-load -wi \
libsamplerate.tcz libsamplerate-dev.tcz \
alsa-config.tcz alsa-plugins.tcz alsa-modules-4.2.9-tinycore64.tcz alsa-dev.tcz alsa.tcz \
lame.tcz lame-dev.tcz libmad.tcz libmad-dev.tcz flac.tcz flac-dev.tcz curl.tcz

wget https://www.musicpd.org/download/mpd/0.19/mpd-0.19.19.tar.xz
xz -dv mpd-0.19*
tar -xf mpd-0.19*
cd mpd-0.19*
./configure
make
mkdir ../mpd
sudo make DESTDIR=../mpd install
cd
mksquashfs mpd mpd-0.19.19.tcz
md5sum mpd-0.19.19.tcz > mpd-0.19.19.tcz.md5.txt

ls /mnt
ls /mnt/*1
ls /mnt/*1/tce

sudo mv *tcz* /mnt/*1/tce/optional
sudo vi /mnt/*1/tce/onboot.lst

vi .mpdconf

sudo rm -rf mpd*
cp /mnt/*1/tce/onboot.lst onbootlst.txt
sudo vi /mnt/*1/tce/onboot.lst
filetool.sh -b

SDカードをapu2c4に刺して起動、apuのipアドレスを確認、sshクライアントPCからユーザー「tc」でログイン。 あとは音楽再生環境を構築していく。

mpdインストールに必要な環境や、libsamplerateやalsaなど必要なライブラリをインストール。 今回はmpd-0.19.19をインストール。 ここらの流れは、詳細が必要なら他のエントリーを参照のこと。

http://blown-lei.net/endive/blosxom.cgi/audio_diary/20180103a.html
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20180529a.html

このあたりにmpdのインストールについて書いている。piCore用のエントリーだけど、似たようなものだ。 注意点は「mpd-0.xx.xx.tcz」と「mpd-0.xx.xx.tcz.md5.txt」を保管するディレクトリがpiCoreとは違うこと。うちでは今回は「/mnt/mmcblk0p1/tce/optional」だった。環境によってどう違ってくるか分からないので、確認した方がいいかな。

.mpdconfは、各個の環境に合わせて設定。 不要になったファイルをrm -rfで消去。 最後に「onboot.lst」を整理して、filetool.sh -b、で保存。

ほとんど.ash_historyファイルとかからのコピーとか。
ipアドレスとかパーティションやディレクトリのNo.とか、環境が違ったら他の数値になったりすることがあると思う。

Edit this entry...

wikieditish message: Ready to edit this entry.
















A quick preview will be rendered here when you click "Preview" button.