Mar 21, 2021
DaphileとTiny CoreでDeezer hifiを768kHzにアップサンプリングする(ついでにPPAPで飛ばす - たびたび追記あり)
前回に引き続き、UPnPでデータを飛ばしてレンダラーに組み込んだlibsamplerateでアップサンプリングするプラン。
DebianやFedoraなどではリポジトリから読み込みが出来る様なんだけど(訂正。今のFedoraではソースからのインストールが必要。リポジトリからのインストールが出来たのはv30、31の頃のようだ)、今回は、Tiny Core Pure 64での試み。ソースからのインストールが必要になる。
これが本丸だ。
相当梃子摺るかと思ったが、案外順調にできてしまった。順調と言ってもPulseaudioと比べたら、だけど。
以下、経過を記載しておく。
今回、打ち込んだコマンド等、過程の詳細な記載は省略した。要点だけ書いている。
いつもはこまごまと書くんだけど、長くなりすぎるので。
Daphileの操作画面キャプチャ画像。
右下にTiny Coreのmpdがレンダラーに選択されているのが見える。MPD-90というのはipアドレスだ。
Daphileサーバーはcompaq 6730bに戻している。有線LANに繋がらない2570pは返品、返金となった。

準備
最初からTiny Core Pure 64を組んでいくのは面倒なので、以前にmpdを組み込み、Pulseaudioを組み込みして、昨年10月にバックアップしたイメージを使う。
ストリーミング音源をpulseaudioで転送しアップサンプリング再生する(10月15日、追記)
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20201011a.htm
ハードはapu2c4。
以前はこれで768kHzへのアップサンプリング再生をしていたけど、最近は使っていなかった。
apu2c4で768kHzへのアップサンプリングに取り組む
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20181208a.htm
SDカードにイメージを書き込み、apu2c4に刺して起動。 sshでログイン。
まず、upmpdcliの説明サイトから引用。
Upmpdcli and associated libraries downloads
https://www.lesbonscomptes.com/upmpdcli/upmpdcli-manual.html#UPMPDCLI-PACKAGESFor building from source, you will need a C++ compiler with full C++11 support, and the development packages for the supporting libraries: libcurl, libmicrohttpd, libmpdclient, and libexpat.
Also the Python modules for streaming service support use the python-requests package, so you may need to install it (it is only needed at run time).
If you are using the source from the git repository, you will also need the autoconf, automake, libtool trio. Use the autogen.sh script to set things up.
この説明サイトは膨大で目が回りそうだけど、今回は要所だけ読んでなんとかした。
ライブラリとして、「libcurl, libmicrohttpd, libmpdclient, and libexpat」が必要と書いている。あと、python-requests、「autoconf, automake, libtool trio(トリオなんだ)」が要るような。
Tiny Coreの状況を確認。
curl expat2 expat2-devは既にインストールされている。
tceで、以下インストール。
# tce curl-dev.tcz libmicrohttpd.tcz libmicrohttpd-dev.tcz
libmpdclientはリポジトリにtczがないので、ソースからインストール。
最新のはインストールにmeson-ninjaを使う。
敢えて面倒な事はしたくなかったので、以前のバージョンを選択。
wget https://www.musicpd.org/download/libmpdclient/2/libmpdclient-2.11.tar.xz # tce doxygen automake
doxygenがないよ、と指摘される。そうだったっけ?
一応、確認したらautomakeもない。既にインストールされてるとばかり思っていた、、、
更に、作業の前には時計を合わせておかないと、エラーになるので合わせる。
sudo ntpclient -s -c 1 -h ntp.nict.jp
./configure、makeの過程で以下警告あり。今回は気にせず進む。
/home/tc/libmpdclient-2.11/include/mpd/connection.h:98: warning: explicit link request to 'MPD_HOST' could not be resolved /home/tc/libmpdclient-2.11/include/mpd/connection.h:98: warning: explicit link request to 'MPD_PORT' could not be resolved /home/tc/libmpdclient-2.11/include/mpd/connection.h:99: warning: explicit link request to 'MPD_TIMEOUT' could not be resolved sudo make DESTDIR=../libmpdclient install libtool: error: '../libmpdclient/usr/local/lib' must be an absolute directory name sudo make DESTDIR=/home/tc/libmpdclient install
make installから、tczファイルを作って、/mnt/*/tce/optionalに保存する。
ここらへんで、python-requestsをインストールしとく(インストールし忘れていた)。
# tce python3.6-requests.tcz
upmpdcliをインストール
下記のソースコード配布ページからソースをダウンロード。
Upmpdcli and associated libraries downloads
https://www.lesbonscomptes.com/upmpdcli/pages/downloads.htmlCurrent version (tar files):
libnpupnp-4.1.1.tar.gz
libupnpp-0.21.0.tar.gz
upmpdcli-1.5.11.tar.gz
sc2mpd-1.1.8.tar.gz
順次、インストールしていく。
sc2mpdはOpenHome関連で、うちの環境とは関係ないのでインストールしていない(後でインストールしとけば良かったかなと思ったけど、動く環境作る方が優先なので)。
これらのソース、あちこちファイル読んでもインストールの手法が見つからない。
./configure、make、make--install、tcz保存、通常の流れでインストールできる。
wget https://www.lesbonscomptes.com/upmpdcli/downloads/libnpupnp-4.1.1.tar.gz ./configure make checking whether build environment is sane... configure: error: newly created file is older than distributed files!
時計を合わせるのを忘れたらこんな警告が出る。
sudo ntpclient -s -c 1 -h ntp.nict.jp
順次、インストール。
wget https://www.lesbonscomptes.com/upmpdcli/downloads/libupnpp-0.21.0.tar.gz wget https://www.lesbonscomptes.com/upmpdcli/downloads/upmpdcli-1.5.11.tar.gz
途中で足りないライブラリがあると指摘され下記インストールしている。
# tce jsoncpp-dev.tcz
mpdを再インストール
さて、これで動くかというと動かない。下記、mpdの状況を確認。
tc@box:~$ mpd -V Music Player Daemon 0.20.20 Database plugins: simple pi@volumio:~$ mpd -V Music Player Daemon 0.19.1 Database plugins: simple proxy upnp Storage plugins: local smbclient nfs Neighbor plugins: smbclient upnp
Tiny CoreとVolumio 1.55のmpdの状況を比較。
使えるプラグインの表示が違う。Tiny Coreのほうはupnpの表示がない。
再インストールだ。
sudo ntpclient -s -c 1 -h ntp.nict.jp wget https://www.musicpd.org/download/mpd/0.20/mpd-0.20.20.tar.xz ./configure --enable-pipe-output
mpdインストールのいつもの工程で再インストールしたが、それだけでは動かなかった。
./configureのオプション指定を変える。
./configure --enable-pipe-output --enable-upnp configure: error: UPnP client support: libupnp not found # tce libupnp.tcz libupnp-dev.tcz
なんと、、ここでlibupnpがないと指摘された。
実は、tczリポジトリにはupnp関係のtczは沢山あって、でも何が要るやら分からなかったのでインストールしてなかったのだ。
tceでインストール。
その後は順調に進んで、インストールできた。
tc@box:~$ mpd -V Music Player Daemon 0.20.20 Database plugins: simple proxy upnp Storage plugins: local curl Neighbor plugins: upnp
インストール終了時点 概要
インストール終了時点でのonboot.lstは下記の通り。
sudo vi /mnt/*1/tce/onboot.lst openssh.tcz i2c-5.4.3-tinycore64.tcz alsa-modules-5.4.3-tinycore64.tcz alsa.tcz gcc.tcz boost-1.65-dev.tcz pkg-config.tcz bison.tcz autoconf.tcz libtool-dev.tcz bc.tcz cmake.tcz compiletc.tcz squashfs-tools.tcz ntpclient.tcz libsamplerate.tcz libsamplerate-dev.tcz lame.tcz lame-dev.tcz libmad.tcz libmad-dev.tcz nfs-utils.tcz nmap.tcz libcap-dev.tcz alsa-plugins-dev.tcz alsa-config.tcz alsa-dev.tcz gudev-lib.tcz dbus-dev.tcz pulseaudio-13.0.tcz libmicrohttpd.tcz libmicrohttpd-dev.tcz curl-dev.tcz doxygen.tcz automake.tcz libmpdclient-2.11.tcz python3.6-requests.tcz libnpupnp-4.1.1.tcz libupnpp-0.21.0.tcz jsoncpp-dev.tcz upmpdcli-1.5.11.tcz libupnp.tcz libupnp-dev.tcz mpd-0.20.20.tcz
upmpdcliを動かす
mpdを起動(うちではssh経由で起動するのがデフォルト)。
DaphileにUpNPレンダラーとして認識されたら、ウェブブラウザ操作画面のプレーヤー表示部に出てくるはずなんだけど、出て来ない。
upmpdcliがインストールしただけでは動いてないので、起動しないといけない。
Upmpdcli
https://www.lesbonscomptes.com/upmpdcli/upmpdcli-manual.htmlIn most situations, upmpdcli will be run as follows:
upmpdcli -D -c /etc/upmpdcli.confThe -D option tells upmpdcli to fork and run in background. The -c option specifies a configuration file. See the upmpdcli(1) manual page for more information about the command line.
マニュアル、膨大なんだけど。
わけが分からないと言いながらあれこれ、、、
tc@box:~$ upmpdcli --help upmpdcli: usage: -c configfile configuration file to use -h host specify host MPD is running on -p port specify MPD port -d logfilename debug messages to -l loglevel log level (0-6) -D run as a daemon -f friendlyname define device displayed name -q 0|1 if set, we own the mpd queue, else avoid clearing it whenever we feel like it -i iface specify network interface name to be used for UPnP -P upport specify port number to be used for UPnP -O 0|1 decide if we run and export the OpenHome services -v print version info -m <0|1|2|3|4> media server mode (default, multidev|only renderer|only media|embedded|multidev) Upmpdcli 1.5.11 libupnpp 0.21.0 tc@box:~$
試行錯誤するうちに、こんなんが表示された(実は --help 以外でも、例えば --x とかでも表示される)。
ここから起動コマンドを考える。
upmpdcli -D -m 1 -f MPD-90 -d /home/tc/.upmpdcli.log -l 2 -O 0
sshから上記コマンドでupmpdcliを起動。
出来ました!
Daphileにupnpレンダラーとして認識された。これで、音が出る筈。
本当は、upmpdcli.confで設定して運用するほうがスマートなんだけど、当面はこれで動かすことにする。
upmpdcli.confの原本は下記に保存されている。コピーして使えばいいのだろうか。
まだ使い方が分からない。
/usr/local/share/upmpdcli/upmpdcli.conf-dist
PPAPで音を出す
実はこのTiny Core Pure 64、もともとのイメージファイルがPPAP Frontとして機能するように作られている。
768kHzにアップサンプリングして、PPAP Back-Endに送る設定がこの時点で既に出来ている。
USB DACを繋いでmpd.conf再設定とか面倒だったので、いきなりそれで使ってみることにした。
PPAP環境は常日頃から使っていて出来ているので、Daphileから音を出す操作をしたら、そのままPPAPシステムに繋がる筈ということだ。
こんなイメージ。

音は出ました。
Frontの状況。
CPU0: 45.8% usr 3.5% sys 0.0% nic 50.0% idle 0.0% io 0.0% irq 0.5% sirq CPU1: 10.7% usr 3.3% sys 0.0% nic 85.9% idle 0.0% io 0.0% irq 0.0% sirq CPU2: 9.9% usr 2.5% sys 0.0% nic 87.5% idle 0.0% io 0.0% irq 0.0% sirq CPU3: 43.7% usr 0.3% sys 0.0% nic 55.2% idle 0.0% io 0.0% irq 0.5% sirq Load average: 1.09 0.97 0.56 3/386 3852 PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND 6776 1 tc S 507m 12.8 0 26.5 mpd 2841 6776 tc S 16480 0.4 2 1.4 /usr/local/bin/ncat 192.168.1.89 4400 3637 6742 tc R 4016 0.1 1 0.2 top 15901 1 tc S 1743m 44.2 3 0.1 upmpdcli -D -m 3 -f MPD-90 -d /home/tc/.upmpdcli.log -l 2 -O 0
Back-Endの状況。
tc@box:~$ cat /proc/asound/card*/pcm0p/sub0/hw_params access: MMAP_INTERLEAVED format: S32_LE subformat: STD channels: 2 rate: 768000 (768000/1) period_size: 4096 buffer_size: 32768 tc@box:~$ Mem: 103904K used, 3925992K free, 18384K shrd, 5676K buff, 34188K cached CPU: 0.2% usr 2.1% sys 0.0% nic 97.1% idle 0.0% io 0.0% irq 0.5% sirq Load average: 0.06 0.04 0.00 3/113 17254 PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND 17204 1213 root S 15484 0.3 3 1.0 /usr/local/bin/ncat -kl 4400 -e /usr/local/bin/aplay -D hw:0,0 -M --period-size=4096 --buffer-size=32768 -t raw -f S32_LE -r768000 -c2 17205 17204 root S 4608 0.1 1 0.5 /usr/local/bin/aplay -D hw:0,0 -M --period-size=4096 --buffer-size=32768 -t raw -f S32_LE -r768000 -c2 30 2 root IW 0 0.0 1 0.1 [kworker/1:1-eve] 17254 17226 tc R 4016 0.1 2 0.0 top 1213 1094 root S 15484 0.3 1 0.0 /usr/local/bin/ncat -kl 4400 -e /usr/local/bin/aplay -D hw:0,0 -M --period-size=4096 --buffer-size=32768 -t raw -f S32_LE -r768000 -c2 17222 1211 root S 5872 0.1 0 0.0 sshd: tc [priv]
音の方は、NASの音に比べてDaphileからのほうが固いような気がする。NASが絹のような感触だとしたら、Daphileからのほうはガラスのような感触というか。
そもそもアップサンプリングサーバーがHP Elitebookとapu2c4で違う機械だとか状況が違うので、音も違うのが当たり前だと思う。
もう少しだけソフトだったらいいかなと思うけど、768kHzじゃないと出ない音が出ている。
運用しながら調整していきたい。
24日、追記。
apu2c4で768kHzは、限界を超えるということを忘れていた。
以前は705.6kHzで主に運用していた。
今回、しばらくして音が途切れ始めたので705.6kHzで運用開始し始めている。
Raspberry Pi 3B+をBack-Endにしている。
何とかなる筈だけど、どうだろうか。
更に追記、3B+、700kHz台のBack-Endには力不足だ。
さあ、どうすっかね、、、
27日、追記。
現状、PPAPは難しいのでapu2c4から384kHzでUSB DACに出力している。
悪くはないけど、物足りない。若干、pulseaudioからの方が良く聴こえるのはハードの差によるものだろうか。
31日、追記。
apu2c4とras pi3B+では無理なのでハード変更。
現在はHP Elitebook 820G2とapu2c4の組み合わせにしている。
820G2はスペック自体は問題ないんだけど、なんだかbiosが危なっかしいんだよね、簡単に入れなくて操作を繰り返すことがある。中古だしなあ、、、あんまり困るようなら買い替えるかも。
音の方は、これですっかり安定した。
CD品質相当のストリーミング音源を、768kHzにアップサンプリング、PPAP再生出来るようになった。
NAS音源と比較したら若干軽い音色だけど(これはハード的な違いによるものかな?)、同等の音が出ている。
writeback message:
Caution!!!
Now, Anyone cannot post a comment.