Page 1 / 31 :  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Next › »

Current filter: »upmpdcli« (Click tag to exclude it or click a conjunction to switch them.)

May 24, 2024

古いRaspberry PiをRoon、Mpd、UPnPとかで使おうとしたら

さて先日、Ras Pi 3b+をroon bridgeにしたのだけど、これにmpd、upmpdcliをインストールする前に、まずは、かなり旧式になったRaspberry Pi B+で何かできないかと考えた。B+はいくつか残っていて、使えるものなら使いたい。
そんなことを考えたせいで、あれこれといじることになった。

以下、顛末の記録。
このエントリーは長い。やたら長い。
自分でもどうかと思うが、備忘録だからある程度仕方ない。

というわけで、mpdなど諸々のインストールをどうするか。
mpd
https://www.musicpd.org/download.html

https://www.musicpd.org/news/2023/12/mpd-0-23-15-released/
mesonが要る。
https://www.musicpd.org/news/2018/10/mpd-0-20-23-released/
こっちは要らない。

libmpdclient https://www.musicpd.org/news/2023/12/libmpdclient-2-22-released/
こっちはmesonが要る。
https://www.musicpd.org/news/2021/11/libmpdclient-2-20-released/
こっちは要らない。

それから、 upmpdcli https://www.lesbonscomptes.com/upmpdcli/
https://www.lesbonscomptes.com/upmpdcli/pages/downloads.html
https://www.lesbonscomptes.com/upmpdcli/pages/upmpdcli-manual.html#UPMPDCLI-BUILDING
こちらも最新はmeson。
autotoolsでインストール出来るのは前のバージョンだ。

piCore、Tiny Coreでは、インストールしたソフトウェアをtczファイルという形式に固めて格納する。mesonでインストールすると、それがやりにくいのだ。
2019年にはそうだった。
今はどうなっているだろう。
最新でやってみるか、mesonでやろう。ということで、やってみるということだ。

まず、普段使用のPCにlibmpdclient-2.22をダウンロード。
https://www.musicpd.org/download/libmpdclient/2/libmpdclient-2.22.tar.xz
展開し、README.rstを確認。必要な環境を確認。

You need:
- a C99 compliant compiler (e.g. gcc)
- `Meson 0.56 `__ and `Ninja `__
Run ``meson``:
meson setup output
Compile and install::
ninja -C output
ninja -C output install

次にmpd。
https://www.musicpd.org/download/mpd/0.23/mpd-0.23.15.tar.xz
README.mdを確認。
For basic installation instructions
[read the manual](https://www.musicpd.org/doc/user/install.html).
ネット上の説明を読めということらしいので、読む。

In any case, you need:
a C++17 compiler (e.g. GCC 8 or clang 7)
Meson 0.56.0 and Ninja
Boost 1.58
pkg-config

次、upmpdcli。
https://www.lesbonscomptes.com/upmpdcli/pages/upmpdcli-manual.html#UPMPDCLI-BUILDING

For building from source, you will need a C++ compiler with C++17 support, and the development packages for the supporting libraries: libcurl, libmicrohttpd, libmpdclient, and possibly expat, depending on configuration options.
Also the Python modules for streaming service support use the python3-requests package, so you may need to install it (it is only needed at run time).
Older releases of the packages used the GNU autotools for building. Newer releases (and current git code) use meson and ninja. The change releases were libnpupnp 6.1.2, libupnpp 0.26.3 and upmpdcli 1.8.10.

(グーグル翻訳)
ソースからビルドするには、C++17 をサポートする C++ コンパイラーと、構成オプションに応じてサポート ライブラリ (libcurl、libmicrohttpd、libmpdclient、および場合によっては expat) の開発パッケージが必要です。 また、ストリーミング サービス サポート用の Python モジュールは python3-requests パッケージを使用するため、インストールする必要がある場合があります (実行時のみ必要です)。 パッケージの古いリリースでは、ビルドに GNU オートツールを使用していました。新しいリリース (および現在の git コード) では、meson と ninja が使用されます。変更リリースは、libnpupnp 6.1.2、libupnpp 0.26.3、および upmpdcli 1.8.10 でした。

必要な環境がある程度分かったところで、下記からpiCoreのイメージをダウンロード。Ras Pi b+なので、armv6。
http://tinycorelinux.net/14.x/armv6/releases/RPi/
http://tinycorelinux.net/14.x/armv6/releases/RPi/piCore-14.1.0.zip

リポジトリは下記。
http://tinycorelinux.net/14.x/armv6/tcz/

imgファイルをmicroSDに焼いて、cmdline.txt にhost=pC141bpと追記、config.txtを編集しイヤホンジャックを止めて、ラズパイに刺して電源を入れる。無事、起動した。
sshでログインし、filetool.sh -bでsshの鍵を保存する。
パーティションを拡張。2Gも足しとけばよかろう。

libmpdcliantの要求で、gcc、etcをインストール。
ついでに、どうせ要るであろうsquashfs-toolsもインストール。
tce-load -wi gcc.tcz gcc_libs.tcz gcc_libs-dev.tcz gcc_base-dev.tcz meson.tcz ninja.tcz squashfs-tools.tcz

mpdの要求で以下、インストールだ。
tce-load -wi boost-dev.tcz boost.tcz pkg-config.tcz

upmpdcli,以下、インストール。
tce-load -wi curl.tcz curl-dev.tcz libmicrohttpd.tcz libmicrohttpd-dev.tcz expat2.tcz expat2.tcz expat2-dev.tcz

加えて、PPAPで動かすつもりならnmapをインストールする必要がある。
あと、alsa関連も一応。
tce-load -wi nmap.tcz
tce-load -wi alsa-modules-6.1.68-piCore.tcz alsa.tcz alsa-utils.tcz alsa-utils-doc.tcz alsa-utils-locale.tcz alsa-plugins.tcz alsa-plugins-dev.tcz

以上で、準備完了、かな。

インストールは、libmpdclient、upmpdcli、mpd の順序で行う。

libmpdclient

wget https://www.musicpd.org/download/libmpdclient/2/libmpdclient-2.22.tar.xz
tar Jxfv *tar.xz

tc@pC141bp:~$ ls
libmpdclient-2.22/    	libmpdclient-2.22.tar.xz
tc@pC141bp:~$ ls *22
AUTHORS        	README.rst     	libmpdclient.ld	src/
LICENSES/      	doc/           	meson.build    	test/
NEWS           	include/       	meson_options.txt  test.ld
tc@pC141bp:~$
tc@pC141bp:~$ cd *22
tc@pC141bp:~/libmpdclient-2.22$ mkdir ../libmpdclient
tc@pC141bp:~/libmpdclient-2.22$ meson . ../libmpdclient
The Meson build system
Version: 1.1.0
Source dir: /home/tc/libmpdclient-2.22
Build dir: /home/tc/libmpdclient
Build type: native build
Project name: libmpdclient
Project version: 2.22

meson.build:1:0: ERROR: Unable to detect linker for compiler `cc -Wl,--version`
stdout:
stderr: collect2 version 12.2.0
[cannot find ld] -plugin /tmp/tcloop/gcc/usr/local/bin/../lib/gcc/armv7l-unknown-linux-gnueabihf/12.2.0/liblto_plugin.so   # ( snip ) #
collect2: fatal error: cannot find 'ld'
compilation terminated.

A full log can be found at /home/tc/libmpdclient/meson-logs/meson-log.txt
WARNING: Running the setup command as `meson [options]` instead of `meson setup [options]` is ambiguous and deprecated.
tc@pC141bp:~/libmpdclient-2.22$

エラーを吐いて止まってしまった。何が足りないんだ。
ldってなに。
https://stackoverflow.com/questions/35970824/gcc-collect2-fatal-error-cannot-find-ld
これを参考にする。
tc@pC141bp:~/libmpdclient-2.22$ export PATH=$PATH:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin
これは効果なし。
gcc入ってるから要らないと思ったけど、clang入れてみるか。

tce-load -wi clang.tcz

これで、意外にたくさんのtczファイルが追加インストールされる。
出来るかな。

tc@pC141bp:~/libmpdclient-2.22$ meson . ../libmpdclient
The Meson build system
Version: 1.1.0
Source dir: /home/tc/libmpdclient-2.22
Build dir: /home/tc/libmpdclient
Build type: native build
Project name: libmpdclient
Project version: 2.22
C compiler for the host machine: cc (gcc 12.2.0 "cc (piCore) 12.2.0")
C linker for the host machine: cc ld.bfd 2.39
Host machine cpu family: arm
Host machine cpu: armv6l
Checking for function "strndup" : YES
Checking for function "getaddrinfo" : YES
Configuring config.h using configuration
Compiler for C supports arguments -Wcast-align: YES
Compiler for C supports arguments -Wcast-qual: YES
Compiler for C supports arguments -Wdouble-promotion: YES
Compiler for C supports arguments -Wfloat-equal: YES
Compiler for C supports arguments -Wmissing-declarations: YES
Compiler for C supports arguments -Wmissing-noreturn: YES
Compiler for C supports arguments -Wmissing-format-attribute: YES
Compiler for C supports arguments -Wmissing-prototypes: YES
Compiler for C supports arguments -Wno-deprecated-declarations: YES
Compiler for C supports arguments -Wpointer-arith: YES
Compiler for C supports arguments -Wredundant-decls: YES
Compiler for C supports arguments -Wshadow: YES
Compiler for C supports arguments -Wstrict-prototypes: YES
Compiler for C supports arguments -Wundef: YES
Compiler for C supports arguments -Wunused: YES
Compiler for C supports arguments -Wwrite-strings: YES
Compiler for C supports arguments -Wunreachable-code-aggressive: NO
Compiler for C supports link arguments -Wl,--version-script=/home/tc/libmpdclient-2.22/test.ld: YES
Configuring version.h using configuration
Build targets in project: 2

Found ninja-1.10.0 at /usr/local/bin/ninja
WARNING: Running the setup command as `meson [options]` instead of `meson setup [options]` is ambiguous and deprecated.
tc@pC141bp:~/libmpdclient-2.22$

警告出てるけどいけたかな。clang、要るんだな。では、ninjaでビルド、インストールだ。

tc@pC141bp:~/libmpdclient-2.22$ ninja -C ../libmpdclient
ninja: Entering directory `../libmpdclient'
[60/60] Linking target example
tc@pC141bp:~/libmpdclient-2.22$

tc@pC141bp:~/libmpdclient-2.22$ sudo ninja -C ../libmpdclient install
ninja: Entering directory `../libmpdclient'
[0/1] Installing files.
Installing libmpdclient.so.2.22 to /usr/local/lib
Installing /home/tc/libmpdclient-2.22/include/mpd/async.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/audio_format.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/client.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/capabilities.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/compiler.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/connection.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/database.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/directory.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/entity.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/error.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/fingerprint.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/idle.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/list.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/mixer.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/mount.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/neighbor.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/parser.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/partition.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/password.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/player.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/playlist.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/position.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/protocol.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/queue.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/recv.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/replay_gain.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/response.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/send.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/status.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/stats.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/tag.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/output.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/pair.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/search.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/socket.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/song.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/sticker.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/settings.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/message.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/binary.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/albumart.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/include/mpd/readpicture.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient/include/mpd/version.h to /usr/local/include/mpd/
Installing /home/tc/libmpdclient-2.22/AUTHORS to /usr/local/share/doc/libmpdclient
Installing /home/tc/libmpdclient-2.22/LICENSES/BSD-2-Clause.txt to /usr/local/share/doc/libmpdclient
Installing /home/tc/libmpdclient-2.22/LICENSES/BSD-3-Clause.txt to /usr/local/share/doc/libmpdclient
Installing /home/tc/libmpdclient-2.22/NEWS to /usr/local/share/doc/libmpdclient
Installing /home/tc/libmpdclient-2.22/README.rst to /usr/local/share/doc/libmpdclient
Installing /home/tc/libmpdclient/meson-private/libmpdclient.pc to /usr/local/lib/pkgconfig
Installing symlink pointing to libmpdclient.so.2.22 to /usr/local/lib/libmpdclient.so.2
Installing symlink pointing to libmpdclient.so.2 to /usr/local/lib/libmpdclient.so
tc@pC141bp:~/libmpdclient-2.22$

おおおおおお、、、どうすべこれ。
よく見たら、

/usr/local/lib/libmpdclient.so.2.22
/usr/local/include/mpd/
/usr/local/share/doc/libmpdclient/
/usr/local/lib/pkgconfig/libmpdclient.pc
/usr/local/lib/libmpdclient.so.2
/usr/local/lib/libmpdclient.so

以上を、取りまとめたら、いいらしい、のかな。めんどくさいなあ、、、

tc@pC141bp:~$ cd
tc@pC141bp:~$ mkdir libmpdclientx
tc@pC141bp:~$ mkdir libmpdclientx/usr
tc@pC141bp:~$ mkdir libmpdclientx/usr/local
tc@pC141bp:~$ mkdir libmpdclientx/usr/local/lib
tc@pC141bp:~$ mkdir libmpdclientx/usr/local/include
tc@pC141bp:~$ mkdir libmpdclientx/usr/local/share
tc@pC141bp:~$ cp -R /usr/local/lib/libmpdclient.so.2.22 libmpdclientx/usr/local/lib
tc@pC141bp:~$ cp -R /usr/local/include/mpd libmpdclientx/usr/local/include
tc@pC141bp:~$ mkdir libmpdclientx/usr/local/share/doc
tc@pC141bp:~$ cp -R /usr/local/share/doc/libmpdclient libmpdclientx/usr/local/share/doc
tc@pC141bp:~$ cp -R /usr/local/lib/libmpdclient.so.2 libmpdclientx/usr/local/lib
tc@pC141bp:~$ cp -R /usr/local/lib/libmpdclient.so libmpdclientx/usr/local/lib
tc@pC141bp:~$
tc@pC141bp:~$ mksquashfs libmpdclientx libmpdclient-2.22.tcz
Parallel mksquashfs: Using 1 processor
Creating 4.0 filesystem on libmpdclient-2.22.tcz, block size 4096.
[=========================================================-] 187/187 100%

Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 4096
    compressed data, compressed metadata, compressed fragments,
    no xattrs, compressed ids
    duplicates are removed
Filesystem size 203.33 Kbytes (0.20 Mbytes)
    32.18% of uncompressed filesystem size (631.84 Kbytes)
Inode table size 1014 bytes (0.99 Kbytes)
    39.56% of uncompressed inode table size (2563 bytes)
Directory table size 701 bytes (0.68 Kbytes)
    63.10% of uncompressed directory table size (1111 bytes)
Number of duplicate files found 0
Number of inodes 60
Number of files 49
Number of fragments 17
Number of symbolic links 2
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 9
Number of hard-links 0
Number of ids (unique uids + gids) 2
Number of uids 1
    tc (1001)
Number of gids 1
    staff (50)
tc@pC141bp:~$ md5sum libmpdclient-2.22.tcz > libmpdclient-2.22.tcz.md5.txt
tc@pC141bp:~$ ls
libmpdclient/              	libmpdclient-2.22.tcz
libmpdclient-2.22/         	libmpdclient-2.22.tcz.md5.txt
libmpdclient-2.22.tar.xz   	libmpdclientx/
tc@pC141bp:~$
tc@pC141bp:~$ ls /mnt/*2/tce
mydata.tgz  onboot.lst  ondemand/   optional/
tc@pC141bp:~$ sudo mv *tcz* /mnt/*2/tce/optional
tc@pC141bp:~$ sudo vi /mnt/*2/tce/onboot.lst
(# libmpdclient-2.22.tcz 書き込み)
tc@pC141bp:~$
tc@pC141bp:~$ ls
libmpdclient/         	libmpdclient-2.22.tar.xz
libmpdclient-2.22/    	libmpdclientx/
tc@pC141bp:~$ rm -rf lib*
tc@pC141bp:~$ filetool.sh -b

libmpdclient、インストール終了。手間がかかる。2019年のときとやり方は変わらん。
まあいい、次はupmpdcliだ。

upmpdcli

え、、、え?!、Deezer Plugin、ってなに!
2021年、upmpdcli 1.5.9からDeezerに対応したようだ。
Qobuz、Tidalはもう少し古くて、Upmpdcli 1.2.0からのようだ。2017年より以前のことだ。Spotifyのプラグインはない。
python3-requests パッケージが要るって、これのことか。
どうやって使うのだろう。
https://www.lesbonscomptes.com/upmpdcli/pages/upmpdcli-manual.html#UPMPDCLI-MS-STR
上記の記載によると、昨年秋にDeezerは使えなくなったとのこと。なんとまあ。

まあいい、とりあえず、以下、順次インストールする。

libnpupnp-6.1.2.tar.gz
libupnpp-0.26.4.tar.gz
upmpdcli-1.8.11.tar.gz

まず、libnpupnp


tc@pC141bp:~$ wget https://www.lesbonscomptes.com/upmpdcli/downloads/libnpupnp-6.1.2.tar.gz
Connecting to www.lesbonscomptes.com (62.210.16.61:443)
saving to 'libnpupnp-6.1.2.tar.gz'
libnpupnp-6.1.2.tar. 100% |*********************************************************************|  436k  0:00:00 ETA
'libnpupnp-6.1.2.tar.gz' saved
tc@pC141bp:~$ tar xf lib*
tc@pC141bp:~$ ls
libnpupnp-6.1.2/    	libnpupnp-6.1.2.tar.gz
tc@pC141bp:~$ vi .ash_h*
tc@pC141bp:~$ cd *2
tc@pC141bp:~/libnpupnp-6.1.2$ mkdir ../libnpupnpx
tc@pC141bp:~/libnpupnp-6.1.2$ meson setup . ../libnpupnpx
The Meson build system
Version: 1.1.0
Source dir: /home/tc/libnpupnp-6.1.2
Build dir: /home/tc/libnpupnpx
Build type: native build
Project name: libnpupnp
Project version: 6.1.2
C++ compiler for the host machine: c++ (gcc 12.2.0 "c++ (piCore) 12.2.0")
C++ linker for the host machine: c++ ld.bfd 2.39
Host machine cpu family: arm
Host machine cpu: armv6l
Run-time dependency threads found: YES
Found pkg-config: /usr/local/bin/pkg-config (0.29.2)
Run-time dependency libcurl found: YES 8.0.1
Run-time dependency libmicrohttpd found: YES 0.9.70
Run-time dependency expat found: YES 2.5.0
Compiler for C++ supports arguments -Wno-deprecated-declarations: YES
Compiler for C++ supports arguments /D_CRT_SECURE_NO_WARNINGS: NO
Compiler for C++ supports arguments /wd4251: NO
Configuring upnpconfig.h using configuration
Configuring autoconfig.h using configuration
Build targets in project: 1

Found ninja-1.10.0 at /usr/local/bin/ninja
tc@pC141bp:~/libnpupnp-6.1.2$
tc@pC141bp:~/libnpupnp-6.1.2$ ninja -C ../libnpupnpx
ninja: Entering directory `../libnpupnpx'
#
# ( snip なんかごちゃごちゃいろいろが表示され1時間ぐらいかかる )
#
[28/28] Linking target libnpupnp.so.13
tc@pC141bp:~/libnpupnp-6.1.2$ sudo ninja -C ../libnpupnpx install
ninja: Entering directory `../libnpupnpx'
[0/1] Installing files.
Installing libnpupnp.so.13 to /usr/local/lib
Installing /home/tc/libnpupnp-6.1.2/inc/netif.h to /usr/local/include/npupnp/
Installing /home/tc/libnpupnp-6.1.2/inc/upnpdebug.h to /usr/local/include/npupnp/
Installing /home/tc/libnpupnp-6.1.2/inc/upnpdescription.h to /usr/local/include/npupnp/
Installing /home/tc/libnpupnp-6.1.2/inc/UpnpGlobal.h to /usr/local/include/npupnp/
Installing /home/tc/libnpupnp-6.1.2/inc/upnp.h to /usr/local/include/npupnp/
Installing /home/tc/libnpupnp-6.1.2/inc/upnptools.h to /usr/local/include/npupnp/
Installing /home/tc/libnpupnpx/upnpconfig.h to /usr/local/include/npupnp/
Installing /home/tc/libnpupnpx/meson-private/libnpupnp.pc to /usr/local/lib/pkgconfig
Installing symlink pointing to libnpupnp.so.13 to /usr/local/lib/libnpupnp.so
tc@pC141bp:~/libnpupnp-6.1.2$

さて。

/usr/local/lib/libnpupnp.so.13
/usr/local/include/npupnp/
/usr/local/lib/pkgconfig/libnpupnp.pc
/usr/local/lib/libnpupnp.so

以上、まとめたらいい(しかし、symlinkとか気にせず機械的にやってるけど大丈夫なのかな)。

tc@pC141bp:~$ mkdir libnpupnp
tc@pC141bp:~$ mkdir libnpupnp/usr
tc@pC141bp:~$ mkdir libnpupnp/usr/local
tc@pC141bp:~$ mkdir libnpupnp/usr/local/lib
tc@pC141bp:~$ mkdir libnpupnp/usr/local/lib/pkgconfig
tc@pC141bp:~$ cp -R /usr/local/lib/libnpupnp.so.13 libnpupnp/usr/local/lib
tc@pC141bp:~$ cp -R /usr/local/lib/pkgconfig/libnpupnp.pc libnpupnp/usr/local/lib/pkgconfig
tc@pC141bp:~$ cp -R /usr/local/lib/libnpupnp.so libnpupnp/usr/local/lib
tc@pC141bp:~$ mkdir libnpupnp/usr/local/include
tc@pC141bp:~$ cp -R /usr/local/include/npupnp libnpupnp/usr/local/include
tc@pC141bp:~$
tc@pC141bp:~$ mksquashfs libnpupnp libnpupnp-6.1.2.tcz
Parallel mksquashfs: Using 1 processor
Creating 4.0 filesystem on libnpupnp-6.1.2.tcz, block size 4096.
[===================================================================|] 1718/1718 100%

Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 4096
    compressed data, compressed metadata, compressed fragments,
    no xattrs, compressed ids
    duplicates are removed
Filesystem size 2731.54 Kbytes (2.67 Mbytes)
    39.84% of uncompressed filesystem size (6856.43 Kbytes)
Inode table size 3572 bytes (3.49 Kbytes)
    48.21% of uncompressed inode table size (7409 bytes)
Directory table size 232 bytes (0.23 Kbytes)
    64.09% of uncompressed directory table size (362 bytes)
Number of duplicate files found 0
Number of inodes 17
Number of files 9
Number of fragments 2
Number of symbolic links 1
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 7
Number of hard-links 0
Number of ids (unique uids + gids) 2
Number of uids 1
    tc (1001)
Number of gids 1
    staff (50)
tc@pC141bp:~$ md5sum libnpupnp-6.1.2.tcz > libnpupnp-6.1.2.tcz.md5.txt
tc@pC141bp:~$ ls
libnpupnp/               	libnpupnp-6.1.2.tcz
libnpupnp-6.1.2/         	libnpupnp-6.1.2.tcz.md5.txt
libnpupnp-6.1.2.tar.gz   	libnpupnpx/
tc@pC141bp:~$ sudo mv *tcz* /mnt/*2/tce/optional
tc@pC141bp:~$ sudo vi /mnt/*2/tce/onboot.lst
(# libnpupnp-6.1.2.tcz 書き込み)
tc@pC141bp:~$ rm -rf lib*
tc@pC141bp:~$ filetool.sh -b
Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz Done.
tc@pC141bp:~$

次、libupnpp。

tc@pC141bp:~$ wget https://www.lesbonscomptes.com/upmpdcli/downloads/libupnpp-0.26.4.tar.gz
Connecting to www.lesbonscomptes.com (62.210.16.61:443)
saving to 'libupnpp-0.26.4.tar.gz'
libupnpp-0.26.4.tar. 100% |************************************************************|  123k  0:00:00 ETA
'libupnpp-0.26.4.tar.gz' saved
tc@pC141bp:~$ tar xf lib*
tc@pC141bp:~$ ls
libupnpp-0.26.4/    	libupnpp-0.26.4.tar.gz
tc@pC141bp:~$ cd *4
tc@pC141bp:~/libupnpp-0.26.4$ mkdir ../libupnpp
tc@pC141bp:~/libupnpp-0.26.4$ meson setup . ../libupnpp
The Meson build system
Version: 1.1.0
Source dir: /home/tc/libupnpp-0.26.4
Build dir: /home/tc/libupnpp
Build type: native build
Project name: libupnpp
Project version: 0.26.4
C++ compiler for the host machine: c++ (gcc 12.2.0 "c++ (piCore) 12.2.0")
C++ linker for the host machine: c++ ld.bfd 2.39
Host machine cpu family: arm
Host machine cpu: armv6l
Run-time dependency threads found: YES
Found pkg-config: /usr/local/bin/pkg-config (0.29.2)
Run-time dependency libnpupnp found: YES 6.1.2
Run-time dependency libcurl found: YES 8.0.1
Run-time dependency expat found: YES 2.5.0
Compiler for C++ supports arguments -Wno-deprecated-declarations: YES
Compiler for C++ supports arguments /D_CRT_SECURE_NO_WARNINGS: NO
Compiler for C++ supports arguments /wd4251: NO
Configuring config.h using configuration
Build targets in project: 2

Found ninja-1.10.0 at /usr/local/bin/ninja
tc@pC141bp:~/libupnpp-0.26.4$

tc@pC141bp:~/libupnpp-0.26.4$ ninja -C ../libupnpp
ninja: Entering directory `../libupnpp'
[32/35] Compiling C++ object libupnpp.so.16.p/libupnpp_smallut.cpp.o
In file included from /tmp/tcloop/gcc/usr/local/include/c++/12.2.0/vector:70,
             	from /tmp/tcloop/gcc/usr/local/include/c++/12.2.0/functional:62,
             	from ../libupnpp-0.26.4/libupnpp/smallut.h:25,
             	from ../libupnpp-0.26.4/libupnpp/smallut.cpp:18:
/tmp/tcloop/gcc/usr/local/include/c++/12.2.0/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {long long int&, long long int&}; _Tp = std::pair; _Alloc = std::allocator >]':
/tmp/tcloop/gcc/usr/local/include/c++/12.2.0/bits/vector.tcc:439:7: note: parameter passing for argument of type 'std::vector >::iterator' changed in GCC 7.1
  439 |   	vector<_Tp, _Alloc>::
  	|   	^~~~~~~~~~~~~~~~~~~
In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long int&, long long int&}; _Tp = std::pair; _Alloc = std::allocator >]',
	inlined from 'bool MedocUtils::parseHTTPRanges(const std::string&, std::vector >&)' at ../libupnpp-0.26.4/libupnpp/smallut.cpp:1136:29:
/tmp/tcloop/gcc/usr/local/include/c++/12.2.0/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1
  123 |       	_M_realloc_insert(end(), std::forward<_Args>(__args)...);
  	|       	~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[35/35] Linking target libupnpp.so.16
tc@pC141bp:~/libupnpp-0.26.4$
tc@pC141bp:~/libupnpp-0.26.4$ sudo ninja -C ../libupnpp install
ninja: Entering directory `../libupnpp'
[0/1] Installing files.
Installing libupnpp.so.16 to /usr/local/lib
Installing /home/tc/libupnpp-0.26.4/libupnpp/base64.hxx to /usr/local/include/libupnpp/
Installing /home/tc/libupnpp-0.26.4/libupnpp/log.h to /usr/local/include/libupnpp/
Installing /home/tc/libupnpp-0.26.4/libupnpp/log.hxx to /usr/local/include/libupnpp/
Installing /home/tc/libupnpp-0.26.4/libupnpp/soaphelp.hxx to /usr/local/include/libupnpp/
Installing /home/tc/libupnpp-0.26.4/libupnpp/upnpavutils.hxx to /usr/local/include/libupnpp/
Installing /home/tc/libupnpp-0.26.4/libupnpp/upnperrcodes.hxx to /usr/local/include/libupnpp/
Installing /home/tc/libupnpp-0.26.4/libupnpp/upnppexports.hxx to /usr/local/include/libupnpp/
Installing /home/tc/libupnpp-0.26.4/libupnpp/upnpplib.hxx to /usr/local/include/libupnpp/
Installing /home/tc/libupnpp-0.26.4/libupnpp/upnpputils.hxx to /usr/local/include/libupnpp/
Installing /home/tc/libupnpp-0.26.4/libupnpp/device/device.hxx to /usr/local/include/libupnpp/device/
Installing /home/tc/libupnpp-0.26.4/libupnpp/device/service.hxx to /usr/local/include/libupnpp/device/
Installing /home/tc/libupnpp-0.26.4/libupnpp/device/vdir.hxx to /usr/local/include/libupnpp/device/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/avtransport.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/cdircontent.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/cdirectory.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/conman.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/description.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/device.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/discovery.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/linnsongcast.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/mediarenderer.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/mediaserver.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/ohinfo.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/ohplaylist.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/ohproduct.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/ohradio.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/ohreceiver.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/ohsender.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/ohtime.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/ohvolume.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/renderingcontrol.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/service.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp-0.26.4/libupnpp/control/typedservice.hxx to /usr/local/include/libupnpp/control/
Installing /home/tc/libupnpp/meson-private/libupnpp.pc to /usr/local/lib/pkgconfig
Installing symlink pointing to libupnpp.so.16 to /usr/local/lib/libupnpp.so
tc@pC141bp:~/libupnpp-0.26.4$

ここでは、色々あるように見えるけど、

/usr/local/lib/libupnpp.so.16
/usr/local/include/libupnpp/
/usr/local/lib/pkgconfig/libupnpp.pc
/usr/local/lib/libupnpp.so

以上をまとめたらいい。

tc@pC141bp:~/libupnpp-0.26.4$ cd
tc@pC141bp:~$ mkdir libupnppx
tc@pC141bp:~$ mkdir libupnppx/usr
tc@pC141bp:~$ mkdir libupnppx/usr/local
tc@pC141bp:~$ mkdir libupnppx/usr/local/lib
tc@pC141bp:~$ mkdir libupnppx/usr/local/include
tc@pC141bp:~$ cp -R /usr/local/lib/libupnpp.so.16 libupnppx/usr/local/lib
tc@pC141bp:~$ cp -R /usr/local/lib/libupnpp.so libupnppx/usr/local/lib
tc@pC141bp:~$ mkdir libupnppx/usr/local/lib/pkgconfig
tc@pC141bp:~$ cp -R /usr/local/lib/pkgconfig/libupnpp.pc libupnppx/usr/local/lib/pkgconfig
tc@pC141bp:~$ cp -R /usr/local/include/libupnpp libupnppx/usr/local/include
tc@pC141bp:~$ mksquashfs libupnppx libupnpp-0.26.4.tcz
Parallel mksquashfs: Using 1 processor
Creating 4.0 filesystem on libupnpp-0.26.4.tcz, block size 4096.
[=================================================================|] 4731/4731 100%

Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 4096
    compressed data, compressed metadata, compressed fragments,
    no xattrs, compressed ids
    duplicates are removed
Filesystem size 8134.72 Kbytes (7.94 Mbytes)
    43.11% of uncompressed filesystem size (18867.71 Kbytes)
Inode table size 9406 bytes (9.19 Kbytes)
    46.36% of uncompressed inode table size (20288 bytes)
Directory table size 549 bytes (0.54 Kbytes)
    55.51% of uncompressed directory table size (989 bytes)
Number of duplicate files found 0
Number of inodes 45
Number of files 35
Number of fragments 16
Number of symbolic links 1
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 9
Number of hard-links 0
Number of ids (unique uids + gids) 2
Number of uids 1
    tc (1001)
Number of gids 1
    staff (50)
tc@pC141bp:~$ md5sum libupnpp-0.26.4.tcz > libupnpp-0.26.4.tcz.md5.txt
tc@pC141bp:~$
tc@pC141bp:~$ sudo mv *tcz* /mnt/*2/tce/optional
tc@pC141bp:~$ sudo vi /mnt/*2/tce/onboot.lst
(# libupnpp-0.26.4.tcz 書き込み)
tc@pC141bp:~$ rm -rf lib*
tc@pC141bp:~$ filetool.sh -b

次、upmpdcli。

tc@pC141bp:~$ wget https://www.lesbonscomptes.com/upmpdcli/downloads/upmpdcli-1.8.11.tar.gz
Connecting to www.lesbonscomptes.com (62.210.16.61:443)
saving to 'upmpdcli-1.8.11.tar.gz'
upmpdcli-1.8.11.tar. 100% |*******************************************************************|  614k  0:00:00 ETA
'upmpdcli-1.8.11.tar.gz' saved
tc@pC141bp:~$ tar xf upmpdcli*
tc@pC141bp:~$ cd *11
tc@pC141bp:~/upmpdcli-1.8.11$ mkdir ../upmpdcli
tc@pC141bp:~/upmpdcli-1.8.11$ meson setup . ../upmpdcli
The Meson build system
Version: 1.1.0
Source dir: /home/tc/upmpdcli-1.8.11
Build dir: /home/tc/upmpdcli
Build type: native build
Project name: upmpdcli
Project version: 1.8.11
C++ compiler for the host machine: c++ (gcc 12.2.0 "c++ (piCore) 12.2.0")
C++ linker for the host machine: c++ ld.bfd 2.39
Host machine cpu family: arm
Host machine cpu: armv6l
Found pkg-config: /usr/local/bin/pkg-config (0.29.2)
Run-time dependency libupnpp found: YES 0.26.4
Run-time dependency libcurl found: YES 8.0.1
Run-time dependency libmicrohttpd found: YES 0.9.70
Did not find CMake 'cmake'
Found CMake: NO
Run-time dependency jsoncpp found: NO (tried pkgconfig)

meson.build:22:8: ERROR: Dependency "jsoncpp" not found, tried pkgconfig

A full log can be found at /home/tc/upmpdcli/meson-logs/meson-log.txt
tc@pC141bp:~/upmpdcli-1.8.11$

え、cmakeがない、jsoncppがないとな。要るのか。
これでどうか。
tc@pC141bp:~/upmpdcli-1.8.11$ tce-load -wi cmake.tcz json-c.tcz json-c-dev.tcz
エラー。
jsoncppがないと。

json-glib.tcz json-glib-dev.tczもインストール。
tc@pC141bp:/etc/sysconfig/tcedir$ tce-load -wi json-glib-dev.tcz json-glib-dev.tcz
無理でした。
/home/tc/upmpdcli/meson-logs/meson-log.txt というのを読む。

CMake binary for 1 is not cached
CMake binary missing from cross or native file, or env var undefined.
Trying a default CMake fallback at cmake
Found CMake: /usr/local/bin/cmake (3.23.1)
# ( snip ) #
Preliminary CMake check failed. Aborting.
Run-time dependency jsoncpp found: NO (tried pkgconfig and cmake)

meson.build:22:8: ERROR: Dependency "jsoncpp" not found, tried pkgconfig and cmake

いろいろ悪足掻きして追加してみる。
tc@pC141bp:/etc/sysconfig/tcedir$ tce-load -wi json-glib-dev.tcz json-glib-doc.tcz json-glib-gir.tcz json-glib-locale.tcz
これでも無理。エラー、ついには環境依存との表示が出る。

実際、「jsoncpp」はTiny Coreだとリポジトリにtczがあるけど、piCoreには用意されていない。
今、メインシステムで使っているmpdサーバー(Tiny Core OS)にupmpdcliをインストールした時にも、jsoncppが足りなくて、後からインストールしたのだ。
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20210321a.htm
upmpdcliのサイトにはjsoncppについて書いてないように思うが、皆、どうしてるんだろう。

そういうわけで、Ras Pi b+にupmpdcliをインストールする試みは行き詰まった。
jsoncppをソースからインストールとなってくるといよいよハードルが高く、根負けした。

以上で、撤退である。

inter mission

upmpdcliをインストールするには「jsoncpp」というライブラリが必要になる。
aarch64のリポジトリにはtczファイルが用意されているが、armv6、armv7、armv7lには用意されていない。つまり、Ras Pi 3B以下の機種へのインストールは、容易には出来ないということだ。

そういうわけで、とりあえず、b+をPPAP Back Endにしてみた。
しかし、ノイズが入ったり音が切れたりで、快適には使えない。B+ってこうだったっけ。昔はB2で運用してたんだっけか。
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20180301a.htm
昔のエントリーによると、period-sizeとbuffer-sizeを上げたらB+でもBack Endで使えるようだ。

やっぱり、3b+を使わないといけないかな、と思ったら、3b+のpiCore、aarch64のリポジトリにはnmap.tczがない。3b+以上の機種をPPAPで使うとしたら、ソースからインストールする必要がある。
いろいろ制約が多い。
そういれば、そういうこともあって、apu2に移行したような記憶が、、、どうだったかな。

さて、ということは、Roon BridgeとPPAP Back Endを一体にできるのは、うちにあるRas Piだと2bしかない、ということになる。
B+はRoon Bridgをインストールできない。
3b+はUPnP化、Roon Bridge化は出来たとしても、nmapをインストールできない。つまりmpdサーバーの3b+からUSBでDACに出力することになる。それで運用というのもありだけど、作るのが大変な割に、音質は期待できない気がする。

実は今回、Roon (RAAT)とPPAPの音質を比較したいというのが、当初の目的だった。そのためには、Roon Bridgeとncat、両方を動かせる機械を作りたい。同一の機械じゃないと比較ができない。
本当は、Roon ROCKとRoon Ready対応の製品じゃないと、Roonの真価は分からないのかもしれないが、まあ、やってみたいということだ。

Raspberry Pi 2b

そういうわけで、、、Ras Pi 2bに手を入れていく。

http://tinycorelinux.net/14.x/armv7/releases/RPi/
http://tinycorelinux.net/14.x/armv7/releases/RPi/piCore-14.1.0.zip

zipをダウンロードし解凍。
imgファイルをmicroSDに焼いて、cmdline.txt にhost=pC141b2と追記、config.txtを編集しイヤホンジャックを止めて、ラズパイに刺して電源を入れる。

ab@fedora-pb650g1:~$ ssh tc@192.168.1.77
The authenticity of host '192.168.1.77 (192.168.1.77)' can't be established.
ED25519 key fingerprint is SHA256:QNgN5WKnnJhaFEsBAPWo1JOBLBVZtZRl+rVWl0BiduE.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.77' (ED25519) to the list of known hosts.
tc@192.168.1.77's password:
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)       	www.tinycorelinux.net

tc@pC141b2:~$
tc@pC141b2:~$ sudo fdisk -u /dev/mmcblk0

The number of cylinders for this disk is set to 120576.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p
Disk /dev/mmcblk0: 3768 MB, 3951034368 bytes, 7716864 sectors
120576 cylinders, 4 heads, 16 sectors/track
Units: sectors of 1 * 512 = 512 bytes

Device   	Boot StartCHS	EndCHS    	StartLBA 	EndLBA	Sectors  Size Id Type
/dev/mmcblk0p1	128,0,1 	1023,3,16     	8192 	139263 	131072 64.0M  c Win95 FAT32 (LBA)
/dev/mmcblk0p2	1023,3,16   1023,3,16   	139264 	172031  	32768 16.0M 83 Linux

Command (m for help): d
Partition number (1-4): 2

Command (m for help): n
Partition type
   p   primary partition (1-4)
   e   extended
p
Partition number (1-4): 2
First sector (16-7716863, default 16): 139264
Last sector or +size{,K,M,G,T} (139264-7716863, default 7716863): +2G

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@pC141b2:~$
tc@pC141b2:~$ filetool.sh -b
Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz Done.
tc@pC141b2:~$ sudo reboot

tc@pC141b2:~$ Connection to 192.168.1.77 closed by remote host.
Connection to 192.168.1.77 closed.
ab@fedora-pb650g1:~$ ssh tc@192.168.1.77
tc@192.168.1.77's password:
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)       	www.tinycorelinux.net

tc@pC141b2:~$ sudo resize2fs /dev/mmcblk0p2
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mmcblk0p2 is mounted on /mnt/mmcblk0p2; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mmcblk0p2 is now 524288 (4k) blocks long.

tc@pC141b2:~$

2bのRoon Bridgeは「Roon Bridge (armv7hf)」を使用。
前回エントリーに記載した手順で環境構築、インストールしていく。

tc@pC141b2:~$ tce-load -wi alsa.tcz alsa-utils.tcz alsa-plugins.tcz bash-dev.tcz bash.tcz curl.tcz

tc@pC141b2:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Audio [USB HiRes Audio], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
tc@pC141b2:~$

Pegasus DACを認識出来ている。

tc@pC141b2:~$ wget https://download.roonlabs.net/builds/RoonBridge_linuxarmv7hf.tar.bz2
Connecting to download.roonlabs.net (172.67.14.113:443)
saving to 'RoonBridge_linuxarmv7hf.tar.bz2'
RoonBridge_linuxarmv 100% |*************************************************************| 15.4M  0:00:00 ETA
'RoonBridge_linuxarmv7hf.tar.bz2' saved
tc@pC141b2:~$ tar jxf Roon*
tc@pC141b2:~$ ls
RoonBridge/                  	RoonBridge_linuxarmv7hf.tar.bz2
tc@pC141b2:~$
tc@pC141b2:~$ sudo RoonBridge/check.sh

Checking to see if RoonBridge can run on this machine

	Checking for Binary Compatibility                        	[   OK   ]
	Checking for ALSA Libraries                              	[   OK   ]

STATUS: SUCCESS

tc@pC141b2:~$ rm Roon*bz2
rm: remove 'RoonBridge_linuxarmv7hf.tar.bz2'? y
tc@pC141b2:~$

tc@pC141b2:~$ sudo vi /opt/bootlocal.sh
# ( write : /home/tc/RoonBridge/start.sh start )

tc@pC141b2:~$ filetool.sh -b
Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz Done.
tc@pC141b2:~$ sudo reboot
tc@pC141b2:~$ Connection to 192.168.1.77 closed by remote host.
Connection to 192.168.1.77 closed.
ab@fedora-pb650g1:~$ ssh tc@192.168.1.77
tc@192.168.1.77's password:
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)       	www.tinycorelinux.net

tc@pC141b2:~$ pstree
init-+-bootlocal.sh---start.sh---mono-sgen-+-2*[mono-sgen]
 	|                                 	`-processreaper
 	|-sh
 	|-sshd---sshd---sshd---sh---pstree
 	|-udevd---2*[udevd]
 	`-udhcpc
tc@pC141b2:~$

Roon Bridge化、成功。タブレット端末のRoonアプリ上で、Roon Bridgeとして認識されている。音も出た。

続いて、PPAP Back-End化。

tc@pC141b2:~$ tce-load -wi nmap.tcz alsa-modules-6.1.68-piCore-v7.tcz alsa.tcz alsa-utils.tcz alsa-utils-locale.tcz
alsa-modules-6.1.68-piCore-v7 is already installed!
alsa is already installed!
alsa-utils is already installed!

# ( snip )

nmap、インストールした。
ここで試しにコマンドを打ってみる。

tc@pC141b2:~$ /usr/local/bin/ncat -kl 4444 -e "/usr/local/bin/aplay -D plughw:0,0 -M --period-size=64 --buffer-size=512 -t raw -f cd"
/usr/local/bin/ncat: error while loading shared libraries:: cannot open shared object file: No such file or directory
tc@pC141b2:~$

libssl.so.1.1がないと言って、蹴られる。
http://tinycorelinux.net/14.x/armv7/tcz/
リポジトリを確認。openssl-1.1.1.tczというのがあるのでインストール。

tc@pC141b2:~$ tce-load -wi openssl-1.1.1.tcz
Downloading: openssl-1.1.1.tcz
Connecting to repo.tinycorelinux.net (128.127.66.77:80)
saving to 'openssl-1.1.1.tcz'
openssl-1.1.1.tcz	100% |***************************************************************| 1172k  0:00:00 ETA
'openssl-1.1.1.tcz' saved
openssl-1.1.1.tcz: OK
tc@pC141b2:~$
tc@pC141b2:~$ /usr/local/bin/ncat -kl 4444 -e "/usr/local/bin/aplay -D plughw:0,0 -M --period-size=64 --buffer-size=512 -t raw -f cd"
^C
tc@pC141b2:~$

tc@pC141b2:~$ vi /opt/bootlocal.sh
( write : /usr/local/bin/ncat -kl 4444 -e "/usr/local/bin/aplay -D plughw:0,0 -M --period-size=256 --buffer-size=512 -t raw -f S32_LE -r44100 -c2" )

tc@pC141b2:~$ filetool.sh -b
Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz Done.
tc@pC141b2:~$
tc@pC141b2:~$ sudo reboot
tc@pC141b2:~$ Connection to 192.168.1.77 closed by remote host.
Connection to 192.168.1.77 closed.
ab@fedora-pb650g1:~$ ssh tc@192.168.1.77
tc@192.168.1.77's password:
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)       	www.tinycorelinux.net

tc@pC141b2:~$

音は出るだろうか。、、、なんでか、動かない。mpdからの送信を受け付けないようで、ncmpcppで「paused」と表示される。
tc@pC141b2:~$ tce-load -wi openssl-dev.tcz alsa-plugins-dev.tcz
無効。
Roon Bridgeも動かない。
ということは、同一機械での併用は出来ないのか。
PPAPのコマンドを止めたら、Roon Bridgeは動くようになった。alsa出力を奪い合うんだろうか。
その割には、Roonを止めてもPPAPは動かない。
何しろ、うまくいかない。

しかたない。
Raspberry Pi 2bでRoon BridgeとPPAP併用は止めることにする。

Raspberry Pi 3b+

さて、3b+に、mpdとupmpdcliをインストールして、PCトランスポートとして動かしてみることにした。音質への配慮は2の次だ。UPnPPPAPは使わない。基本、アップサンプリングもしない(高度な処理はRas Piには負担が大きいからだ)。

まず、piCoreをダウンロード。3B+を使うことにするので、下記から落とす。バージョンは14.1。
http://tinycorelinux.net/14.x/aarch64/
http://tinycorelinux.net/14.x/aarch64/releases/RPi/piCore64-14.1.0.zip
imgファイルをmicroSDに焼いて、cmdline.txt にhost=pC141b3pと追記、config.txtを編集しイヤホンジャックを止めて、ラズパイに刺して起動。さすがに長いので、環境構築のコマンドは羅列で済ます。

sudo fdisk -u /dev/mmcblk0
filetool.sh -b
sudo resize2fs /dev/mmcblk0p2
tce-load -wi gcc.tcz gcc_libs.tcz gcc_libs-dev.tcz gcc_base-dev.tcz meson.tcz ninja.tcz squashfs-tools.tcz
tce-load -wi boost-dev.tcz boost.tcz pkg-config.tcz clang.tcz curl.tcz curl-dev.tcz libmicrohttpd.tcz expat2.tcz expat2.tcz expat2-dev.tcz
tce-load -wi alsa.tcz alsa-utils.tcz alsa-utils-locale.tcz alsa-plugins.tcz alsa-plugins-dev.tcz
tce-load -wi jsoncpp.tcz jsoncpp-dev.tcz

ここで問題が発覚。upmpdcliのインストールに必要な、libmicrohttpd がリポジトリにない。
ソースからインストールしないといけない。無しではいけないかな。
面倒だなあ、、、止めよう。

Raspberry Pi 2b again

2bを、2台にしよう。

Roon Bridgeは既に作ってある。
だから、ここではPPAP Back-Endを作る。

http://tinycorelinux.net/14.x/armv7/releases/RPi/piCore-14.1.0.zip
zipをダウンロードし解凍。
imgファイルをmicroSDに焼いて、cmdline.txt にhost=pC141b2-ppapBEと追記、config.txtを編集しイヤホンジャックを止めて、ラズパイに刺して電源を入れる。

ab@fedora-pb650g1:~$ ssh tc@192.168.1.77

# ( snip )

tc@192.168.1.77's password:
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)       	www.tinycorelinux.net

tc@pC141b2-ppapBE:~$ sudo fdisk -u /dev/mmcblk0

# ( snip )

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@pC141b2-ppapBE:~$ filetool.sh -b
Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz Done.
tc@pC141b2-ppapBE:~$ sudo reboot
tc@pC141b2-ppapBE:~$ Connection to 192.168.1.77 closed by remote host.
Connection to 192.168.1.77 closed.

ab@fedora-pb650g1:~$ ssh tc@192.168.1.77
tc@192.168.1.77's password:
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)       	www.tinycorelinux.net

tc@pC141b2-ppapBE:~$ sudo resize2fs /dev/mmcblk0p2
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mmcblk0p2 is mounted on /mnt/mmcblk0p2; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mmcblk0p2 is now 51200 (4k) blocks long.

tc@pC141b2-ppapBE:~$ tce-load -wi nmap.tcz alsa.tcz alsa-utils.tcz

# ( snip )

tc@pC141b2-ppapBE:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Audio [USB HiRes Audio], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
tc@pC141b2-ppapBE:~$
tc@pC141b2-ppapBE:~$ vi /opt/bootlocal.sh

# ( write : /usr/local/bin/ncat -kl 4444 -e "/usr/local/bin/aplay -D hw:0,0 -M --period-size=256 --buffer-size=1024 -t raw -f S32_LE -r44100 -c2" )

tc@pC141b2-ppapBE:~$ filetool.sh -b
Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz Done.
tc@pC141b2-ppapBE:~$ sudo reboot

tc@pC141b2-ppapBE:~$ tce-load -wi openssl-1.1.1.tcz
tc@pC141b2-ppapBE:~$ sudo reboot

うっかりしてopenssl-1.1.1.tczを入れ忘れて、後からインストール。そうしたらちゃんと機能した。

結末

そんなわけで、うちではRaspberry Pi 2b が2台、メインシステムに加わった。Roon BridgeとPPAP Back-Endだ。
ちょっと、あれこれ賑やか過ぎる。そのうち、なんとかしよう。

あれこれやる合間に、久しぶりにRas Pi B+ / piCore7でmpdサーバーを作った。サブシステムに使う。
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20180103a.htm
上記の過去エントリーの作り方だと、うまくいかない。
リポジトリからgcc.tczとか諸々多数のライブラリをインストールすることになっているんだけど、今、現在の時点で、gcc.tczはダウンロードできない状態になっている。リポジトリ側の都合らしい。
mpdのインストール、リポジトリからするなら、gccとか余計なライブラリは要らない。
以下、自分用構築メモ備忘録、最小限。

http://tinycorelinux.net/7.x/armv6/releases/RPi/piCore-7.0.zip

dtparam=i2c=off,spi=off,i2s=on,i2c_vc=off
dtoverlay=hifiberry-dac

filetool.sh -b
vi /opt/.filetool.lst

vi /opt/bootlocal.sh

mkdir /mnt/music
mkdir /mnt/music/ariel
mkdir /mnt/music/titan
mkdir /mnt/music/x
touch /mnt/music/x/dummy.cue
chmod -R 777 /mnt/music

tce-load -wi alsa.tcz alsa-config.tcz alsa-doc.tcz alsa-dev.tcz alsaequal.tcz alsa-locale.tcz libcdio-dev.tcz libcdio.tcz curl.tcz curl-dev.tcz libsamplerate.tcz

tce-load -wi flac-dev.tcz flac.tcz libcue.tcz libcue-dev.tcz libmad.tcz mpg123.tcz lame-dev.tcz lame-doc.tcz lame.tcz faad2-dev.tcz faad2-doc.tcz faad2.tcz

tce-load -wi libmpdclient-dev.tcz libmpdclient-doc.tcz libmpdclient.tcz mpd-doc.tcz mpd.tcz

tce-load -wi libnfsidmap.tcz libnfsidmap-dev.tcz

vi .mpdconf

music_directory   "/mnt/music"
playlist_directory   "~/.mpd/playlists"
db_file   "~/.mpd/database"
log_file   "~/.mpd/log"
pid_file   "~/.mpd/pid"
state_file   "~/.mpd/state"
sticker_file   "~/.mpd/sticker.sql"
auto_update   "no"
#auto_update_depth "3"

audio_output {
type   "alsa"
name   "My ALSA Device"
device   "hw:0,0"   # optional
mixer_type   "software"   # optional
## mixer_device    "default"   # optional
## mixer_control   "PCM"   # optional
## mixer_index   "0"   # optional
}
# samplerate_converter   "Fastest Sinc Interpolator"
# audio_buffer_size   "8192"
# buffer_before_play   "20%"
# audio_output_format   "192000:24:2"

filesystem_charset   "UTF-8"
id3v1_encoding   "UTF-8"


mkdir .mpd
mkdir .mpd/playlists


vi .ashrc

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

alias ariel="sudo mount -o addr=192.168.1.120,nolock -t nfs 192.168.1.120:/ariel /mnt/music/ariel"
alias titan="sudo mount -o addr=192.168.1.80,nolock -t nfs 192.168.1.80:/titan /mnt/music/titan"
Posted at 21:54 in audio_diary | WriteBacks (0) | Edit Tagged as: , , ,

Apr 19, 2021

イメージファイルをアップするにあたって、うちのセットからの変更点

先日、Google Driveにうちで使っているアップサンプリングサーバーをイメージ化したものをアップした。
Phile Webで記事にしている。

UPnPレンダラー兼アップサンプリングサーバーのディスクイメージをアップしました
https://community.phileweb.com/mypage/entry/5010/20210418/67519/

https://drive.google.com/file/d/1eZ-ijekRj-ond1OIa7aZXgLxjWYbsIPy/view?usp=sharing

うちのシステムそのままだと不便だろうと思ったので、アップする前にいくつか改造を施した。
それらの点についてメモしておく。

1)OSブート時にmpd、upmpdcliが自動的に起動するようにした

うちではmpd、upmpdcliはsshでログインして起動するようにしている。 これを、OS boot時に同時に起動させるようにした。

sudo vi /opt/bootlocal.sh

mpd /home/tc/.mpdconf
adduser upmpdcli -H -D
upmpdcli -D -c /home/tc/.upmpdcliconf


vi .upmpdcliconf

mpdhost = localhost
logfilename = /home/tc/.upmpdcli.log
loglevel = 2
friendlyname = MPD-SRC
mpdport = 6600

これで、mpdはrootで起動する。 upmpdcliはrootでは起動できない仕様なので、ユーザーupmpdcliをboot時に作成し、これを依り代に起動させる。

うちのシステムでは何故こうしていないかというと、mpdがrootで起動していたら「mpd --kill」コマンドが効かないからだ。 mpd.confを書き換え設定変更することが多かったので、たびたびmpdを止める必要があった。いちいちps打ってプロセスidを確認してsudo killとか、面倒でやっていられない。 だから自動起動は不採用になった。

upmpdcliについては、そうした問題はないので採用してもいいんだけど、mpd起動のついでにupmpdcliもコマンド1発で起こせるので、ほったらかしになっているという感じ。この際だから、うちでも使うことにするかもしれない。

2)alsa出力設定を2つにした

mpd.confでalsa出力を設定している。 古いノートPCや、現在のうちのアップサンプリングサーバーでは問題なかったんだけど、新しいノートPC(といっても、10年近く前に発売だけど)でbootしたとき、BIOS設定でPCのサウンドカードをオフにしただけでは音が出ないことがあった。 aplay -lで確認したら、0,0ではなく1,0がUSB-DACに振られている。

tc@box:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 1: IncRAL2496UT1 [RATOC Systems, Inc.RAL-2496UT1_], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
tc@box:~$ 

BIOSでPCのサウンドカードをオンにしたままでPC起動したら、PCのサウンドカードが1,0、USB-DACが2,0になった。 つまり0,0が振られないのだ。

tc@box:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 1: PCH [HDA Intel PCH], device 0: ALC3228 Analog [ALC3228 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: IncRAL2496UT1 [RATOC Systems, Inc.RAL-2496UT1_], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
tc@box:~$

なぜこんな仕様になっているのか分からないけど、alsaを設定するのには困る。

対策が見つからなかったので、0,0と1,0、両方にalsa出力するようにmpd.confに記載した。 BIOSでオンボード音声をオフにして、USB-DACひとつだけ繋いだ状態なら、0,0か1,0、どちらかに引っかかって音声出力できるのではないだろうか。 うちにあるいくつかのPCで試した限りでは、問題なく機能した。 こんな感じ。

vi .mpdconf


audio_output {
 type   "alsa"
 name   "My ALSA Device 0"
 device "plughw:0,0"
}
audio_output {
 type   "alsa"
 name   "My ALSA Device 1"
 device "plughw:1,0"
}

3)alsa出力先サウンドカードの設定を変更しフォーマット変更に対応させた

alsaの出力先は、mpd.confで一般的には下記のように記載することが多い。

device "hw:1,0"

以前のエントリーで書いたが「hw:0,0」のような記載だと、mpd.confで指定されたフォーマットに出力が固定される。 うちではそれでいいが、他者が使う想定だと、個々のUSB-DACに設定を合わせないといけない。それには、mpd.confの書き換え、保存という手順が必要で、sshでログインして、viを使わないといけない、なんていうのは扱いにくいだろう。

device "plughw:0,0"

そこで、「plughw:0,0」に設定記載を変更した。 この記載だったら、USB-DACが対応しているフォーマットを、alsaが読み取って調整してくれる。DACが対応している最上限のフォーマットに自動的に合わせるはずだ。 mpd.confに書かれている768/32がセットが対応する上限設定ということになる。

Posted at 21:14 in audio_diary | WriteBacks (0) | Edit Tagged as: , , , ,

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 レンダラー

準備

最初から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-PACKAGES

For 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.html

Current 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.html

In most situations, upmpdcli will be run as follows:

upmpdcli -D -c /etc/upmpdcli.conf

The -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システムに繋がる筈ということだ。
こんなイメージ。

daphile-tiny core-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音源と比較したら若干軽い音色だけど(これはハード的な違いによるものかな?)、同等の音が出ている。

Page 1 / 31 :  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Next › »