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.とか、環境が違ったら他の数値になったりすることがあると思う。
writeback message:
Caution!!!
Now, Anyone cannot post a comment.