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: »upnp« (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: , , ,

Feb 16, 2024

DaphileでDeezerの再生ができなくなるので(3月25日、追記)

前回エントリーの追記に、2月になるとDaphileでDeezerの再生ができなくなると書いたが、まだ使えている。いつまで使えるんだろうね、、、
再度、引用。

https://forums.slimdevices.com/forum/user-forums/general-discussion/1668327-uesmartradio-com-and-mysqueezebox-com-servers#post1668327
logitech FORUMS
UESmartRadio.com and MySqueezebox.com Servers

After a more than ten year journey, as of February 2024, we will discontinue our UESmartRadio.com and MySqueezebox.com servers.
/—snip—/
Most notably this will impact users of TIDAL, Pandora, and Deezer.
/—snip—/

使えているからといって安穏とはしていられない。Daphileが使えないとなったら、PCのウェブプレーヤーかスマホやタブレットのDeezerアプリからの出力を、何とかしてオーディオシステムに送る方法を見つけないといけない。
とりあえず、BubbleUPnPを試したが、使えない。過去にDaphileを使い始める前にも試みたことがあって、うまくいかなかったんだけど、やはり今回も難しかった。

DeezerのストリーミングデータをDLNA/UPnPで出力できる装置が欲しいけど、見つからない。Daphile + MySqueezebox.comは、極めて貴重だった。
見つからない以上、諦めるしかない。

そういうわけで、WiiM Miniを入手した。

ストリーミングレシーバーとか、いうのかな、いろんなストリーミングサービスを受信して、イヤホン端子や光デジタルから出力する。WiiM MiniはDeezerを受けることができる。

WiiM Proという選択もあったんだけど、入力に有線LANがあるなど機能が多い分、Proのほうがノイズが多いかもしれない。
デジタル出力はUSBがないのは同じで、SPDIF出力のみだ。
こちらの要求は、当面そこそこの音でDeezerをギャップレス再生できればいいので、割り切ってMiniにした。
あと、もうひとつ、以下は製品サイトのサポートの表記から引用。

Features we're thinking about in future updates:
/—snip—/
Cast to Sonos and other 3rd DLNA devices
/—snip—/

将来的には、DLNAでデータを飛ばすアップデートを考えているらしい。もしもこれでうちのPPAPサーバーにデータを送れるようになるなら、非常にありがたい。
いつになるかは、分からないが。

音質は、とりあえず光出力をPegasus R2Rに入れて、Deezer HiFiの44.1/16として、普通にいい音で鳴る。
1万円以下でこの働きなら、現状、なにも言うことはない。PPAPサーバーを通した音と比較したら劣るけど(微細な表現とか芳醇さで差が出る)、十分に許容できる水準だ。
なんとなくだけど、44.1/16の音は、昔より良くなっている気がする。あれこれと電源やノイズの対策を重ねてきているのが効いている可能性はある。

ついでに書いておくと、なんとなく全般的に感じることなんだけど、最近の機械は光入力の音が昔(20世紀頃を想定)に比べて良くなっている気がする。これは入力信号の処理方法がどこかで技術的に改善されたんだろうか。よく知らないので分からないけど、そういうことがあってもおかしくないと思う。

むしろ困るのは操作性の方。手元のタブレットにWiiM Homeというアプリをインストールして、そこから操作するのだけど、いかんせん、パソコンで操作するDaphileのほうが操作性はいい。

これは、もう、仕方ないかもしれない。
パソコン画面で使うDaphileは、一つの画面に表示される情報量が多いのが僕にとって良いので、タブレットアプリでは端から勝負にならない。Wiim HomeはWindows、Macのアプリもあるんだけど、うちの環境はLinuxなので、やや敷居が高い。

タブレットでは、Deezer、Spotify、Squeezer、Roonなどアプリを触っているが、WiiM Homeはそれらと比べて劣ることはなく、一般的な使いやすさの水準は十分にクリアしている、と思う。
ただ、My Libraryの中を検索できないのはつらい。ひたすら狭い画面を指で、求める音源を探してスクロールするしかない。自分のライブラリなんか持つなとでもいうようだ。
もはや、辛抱して使うしかない。

もうひとつの問題は、Deezerにタブレットやスマホからアクセスするので、気が付いたらこれらの電池が0%近くになっていること。日常的に使うものなので、ときに慌てることがあるので、注意が必要。音を流しっぱなしにしている時は、WiiM Homeは止めておいた方がいい。

WiiM以外に使える機種はないのかというと、BluesoundもDeezerに対応している。USB2.0で出力できる。
Bluesound NODEは8万円、WiiM MIniよりも高価な分、上質な音が狙える可能性がある、かな。しかし、今回は様子見。WiiM Miniを買ったばかりだし。

日本のコンポ、ネットワークプレーヤーもいくつかチェックした。Deezerに対応している機種はそこそこあるけど、DLNA/UPnPで出力してくれるようでないと選択しようという気にならない。そういう機種はまだ見つけられていない。

さて、更に何ができるか考える。

Deezerで配信されるMQAを鳴らす手段がなくなるので、対処したい。MQAはこの先どうなるか分からないので、聴けるなら聴けるうちに聴いておくほうがいいかな。

S.M.S.L M500がUSB入力でMQAに対応しているけど、DeezerからDaphileへの経路が使えなくなったら、M500には伝送できない。
WiiM Miniの光出力によるMQAを受信できるDACが必要になる。
調べたら、S.M.S.L M300SEというDACが、SPDIFでもMQAに対応しているとのことで、しかも2万円を切る。というわけで、ゲットした。こんなふうにして散財していくものなのかも。

M300SEは、光入力でMQAを受けることが出来るという。そこで、WiiM Miniからの出力を入れてみたが、認識しない。
PCMとして再生する。なんでだ、、、

原因は、WiiM Homeでの設定ミスだった。
タブレットの画面で「デバイス」から、WiiM Miniの設定に入れるんだけど、その中に「オーディオ設定」という項目があって、その中に「MQAベータ版」という項目がある。
そこを「オン」にしてはいけなかった。
これは、WiiM MiniでMQAを処理するためのもので、DACでMQAを受けることが出来る場合は、触ってはいけないのだろう。ここをオフにして、普通にDeezerのデータがロスレスでM300SEに送られるようにしたら、ちゃんとMQA (352.8kHz) を認識、352.8kHzで再生できた。

ちなみに、2Lの音源が全て352.8kHzなわけではない。中には44.1kHzのMQAもある。44.1kHzのMQAともなれば、PCMと比べて良いのかどうかよく分からない。聴き比べまではしていないから評価できないのだ。案外、環境によっては違いが出るのかもしれない。

M300SEの音はいい。
若干、低音が細い気がするけど、そこまで求めるのは多くを望みすぎだろう。M300SEは完成度が高いという評がネット上にあって、僕もそのとおりだと思う。

ちなみに、WiiM MiniはUPnPレンダラーでもあるので、現時点ではDaphileからMQA音源のデータを送ることが出来る。
しかしそれも、2月末までには終了するだろう。

さて、DaphileからWiiM Miniに送るMQAと、WiiM Homeからの指示でWiiM Mini自身が受信するMQA、どちらの音がいいか。
後者の方が、伸びやかに聞こえる。同じデジタルデータでWiiM Miniから光出力するMQAなのに。これには、MQAもデジタルオーディオの呪縛から逃れられないんだなあ、という思いを強くした。

TidalがMQAから撤退する中、MQAのストリーミング配信は、Deezerの2L音源に殆ど限定される状況になった、ということだ。
ある意味、貴重かもしれない。

個人的には、MQA (特に352.8kHz) は手軽にかなり良い音が得られるので、フォーマットとして残ってほしいと思う。音源制作過程がPCMと違って密室だというので受け入れられないという意見もあるようだが、録音機器や再生機器の特性を反映させた上でのMQA音源の再生なので、それを公開したらそれら個々の機器のジッターの内実を晒すことになる、と思う。
そんなことになるのは、機器のメーカーは何処も受け入れないと思うので、結果、MQAは密室のままでやっていかざるを得ないだろうと思うので、まあ、仕方ない。

個人的には、何をやっているのか、公開してもいいのではないか、と思う。
幾多のレコーディング機器やオーディオ機器のメーカーが慌てることになるだろうけど、ほとぼりが冷めたらデジタルオーディオとジッターを取り巻く状況は1歩も2歩も前進すると思うので。ただ問題は、そうした騒動があったとして、その後にMQAを受け入れるメーカーが、どのくらいいるだろうかということだ。高音質音源はPCMかDSDのハイレゾに特化するというメーカーばかりになるかもしれない。
まあ、そうなったらなったで、現状と大して変わらないという見方もできるが。

最近、Grimmというオーディオメーカーが、標本化定理に沿ったDA変換が出来るようになったと謳っているとネット上で見た。
製品は数年前に売り出されていて、MU1という。
最近のデジタルオーディオの論調は「理想どおりのDA変換はDACチップの技術的限界で不可能」というものだったので、どうやって実現しているんだろう、とか思う。問題は、量子化誤差(量子化ノイズ)とか、折り返し歪みといったものになるんだろうけど、ここらあたり、ジッターの悪影響で括ってしまってもいいのではないかと(乱暴だな)、、、

3月25日、なんとなく読み返して、気付いたので追記。

上記の文面、普通に読んだらMU1はDACだとしか読めない。まずい。
MU1は、DACではなくトランスポートに類するものなのだ。
それが、なんで理想的なDA変換を謳っているのかというと、DACへの送り出しに際して高精度の信号に高精度のクロック信号を載せて送るからということだ。いや、それだけじゃないんだろうけど、肝はそういうことだ。
つまりUSB出力がない。一般的な出力はAES、SPDIFだけだ(最初はAESだけだったらしい)。そういう恐ろしい機械なのだ。
誤解がないように追記しておく。

ネット上で触れられる情報によると、MU1は殆どコンピューターであり、コンピューターで扱える特別なフィルターで技術的限界越えを実現した、ということで、僕なりに考えたのは、おそらく、そうだとしたら、MU1が行っていることは、MQAが行っていることと実は似ているのではないか、ということ。
つまり、機器のジッター特性を排除するフィルターを機器に実装したら、出てくる音はジッターの影響を最小限にした音、つまり、標本化定理に沿った理想的なDA変換に極めて近似した音になる。
そうした手法ならば、やっていることはMQA再生に似ているのではないか、と。
空想だけど。

GrimmとMQAの違いは、Grimmはハイエンド機器で、MQAはM300SEでも実装できるということと、Grimmは普通のPCM音源の再生でも恩恵が得られるが、MQAは特別に仕立てたMQA音源の再生に限られるということ。
そして前者はビットパーフェクトなPCMの再生で、後者はロスレスではないブラックボックスだ。

どっちがいいかとか、どっちがダメとか、そういう議論には、僕は結論を出したくない。
むしろ、両方ある方がいいんじゃないかと思う。PCMやDSDは基本技術として重要だけど、それだけでは閉塞的だ。

M500とM300SEで、MQAの音を比較しようと思っていたら、M500にUSB出力するpiCorePlayerが使えなくなった。
Squeezeliteが動かなくなったのだ。まだMySqueezebox.comのサーバーは動いていて、使えなくなった理由は不明。
試しにpCPにLMSをインストールしてみたけど、やはり動かない。よく調べて何か設定に手を入れたら動くのかもしれないけど、よく分からない。pCPを新規インストールしたら一瞬、動いたが、じきに不調となって音が出ない。

現状、Ras Piからの出力は、UPnPでDeezerからの信号を受けてUSB出力してくれさえしたらいい。
Volumioに入れ替えてみた。
音は出て、DeezerのMQAも再生できる。しかし、なぜか安定しない。すぐに音が出なくなる。こっちも結局、原因は不明だ。継続使用は断念。

別に、PPAPを通してapu2からMQAデータを送ることは、出来ないわけではない。問題はmpdなど複数のサーバーの設定を変えないといけないことだ。そして、普段の使い方に戻すときにはまた設定を戻してやる必要がある。
面倒だ。
DAC間のMQA再生音の比較なんか、しなくてもいいかな。

そうこうするうちに、うちにあった一番古いNASが、ついに壊れた。
さいきん、いろいろ壊れる。
2007年のIODATAの製品で、一番最初に入手したNASだった。2台目は同型機だが、これも暫く前、昨年だったかに壊れた。3台目はオーディオ用のつもりで2010年代に入手したのだけど、早々に不調になり、今も使っている4台目のHS-210に代替わりした。その後、HS-251、TS-212p、HS-264、と入手している。

今、残っているのは、HS-210、TS-212p、HS-264ということになる。
考えたら、ずいぶん壊れたものだ。HDDが壊れたものもあれば、そうでないのもある。
古いデータは500GBの半分しかなかったので、必要なデータは新しいNASに救出した。移動しきれなかったデータもあるけど、長年触ることもなかったもので、なくしてもダメージは少ないものだ。

思えば世の中も、最近はいろんなものが壊れていく。
日本でも世界でも、壊れなくてもいいものが次々と壊れているので、うちなんか何でもない方だ。
もうじき、花粉症の季節が来る。
去年はゴーグルとマスクなしには外を歩けなかった。
今年は、症状が軽ければいいんだけど。

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

Mar 16, 2021

DaphileとVolumio 1.55でDeezer hifiをアップサンプリングする

UPnPでデータを飛ばしてレンダラーに組み込んだlibsamplerateでアップサンプリングするプランだけど、いくらか試みた中で、めぼしいところを書いておこうと思う。
途中経過報告だ。

実は、Daphileでアップサンプリングが出来る(いきなり逆走してるが、時系列上仕方ない)。
アップサンプリングして、Daphileがオーディオデバイスとして認識しているUSB DACに出力することは可能だ。
設定項目の表記からの推定だけど、使われるライブラリはSoXらしい。
piCorePlayerに送るLMSからの出力は、アップサンプリングできない。

この際なので、Daphileのアップサンプリングも試してみようと思ってやってみた。だけど、どうも思わしくない。
44.1/16を整数倍していって、88.2kHzから352.8kHzまで試してみた。しかし音が滲んだ感じになり、締りがなくなりぼんやりしている。アップサンプリングなどしない方がいい。
加えてアップサンプリングさせたらギャップレス再生が出来なくなった。こちらも大きな問題で、Daphileを使う意味がなくなる。

Daphileを動かしているのはCompaq 6730bでハードとして古いので強化したらどうだろうかとか、64-bit x86か、32-bit x86を使ったらどうだろうとか、思うところもあるんだけど、取り敢えず直ぐに使えるハードがないし、想像以上に上手くいかなかったので最早あんまり期待していない、、、
しかし手持ちの古いハードで遣り繰りしていくのにも、そろそろ限界を感じている。上を目指す気があるなら、新しいハードがもう少しあった方が余裕があるよね、、、ということでアップサンプリングサーバーとして使っているHP EliteBook 2570pを、もう1台、入手することにした。

それにしても、新しくすると言っても2012年頃の製品だ。6730bは2008年頃の製品だから、4年ぐらい新しくなる。
4年新しくするって、意味ないかな、、、
そんなこと思いながらも、安いのがあったので注文してしまった。

さて、次の作戦はUPnP、Volumioだ。Volumioといっても、懐かしのv1.55を使う。構造がシンプルで扱いやすいし、UPnPクライアントとしての機能も内蔵している。
しかもリサンプラーはデフォルトでlibsamplerate派生と思われるlibresampleだ。
考えてみたら、これは使ってみない手はない。

下記サイトからSourceForgeのダウンロードへのリンクが貼ってある。
Volumio 1.55 for Raspberry Pi & Raspberry Pi 2
https://community.volumio.org/t/volumio-1-55-for-raspberry-pi-raspberry-pi-2/2393

ディスクイメージを焼いて、Raspberry pi2に刺して起動、ipアドレスを確認しウェブブラウザからアクセスすると操作画面が表示される。
右上の「MENU」から「Playback」、MPD Configuration の「Audio Output」からDACへの出力を設定する。
どうも、繋ぐDACによって表示がまちまちな様子なので、適宜その時の状況で合わせる。

UPnPレンダラーの設定は4年前にしたことがある。
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20170102a.htm

右上の「MENU」から「System」に入る。
Services managementの「UPNP Control」と「UPNP\DLNA Indexing」をON。「APPLY」。
再起動が必要だけど、volumio 1.55はブラウザからの操作で上手く再起動しないことがよくあるので、シャットダウンして電源を入れ直した方が確実だと思う。

レンダラー

Daphileのほうは、下記サイトに操作画面のキャプチャ付きで詳しい説明がある。多謝。
PCで音楽: Daphileのメディアサーバー化
http://asoyaji.blogspot.com/2019/07/daphile.html

Settings、Advanced Media Server Settings から「plugins」の中の「UPnP/DLNA bridge」「UPnP/DLNA Media Interface」を有効にする。
「3rd party Plugins」のプラグインリストから選んでチェックボックスにチェックを入れ、右下のapplyをクリック、再起動。選択したプラグインが「Active Plugins」のリストに移動する。
「UPnP/DLNA bridge」の「settings」をクリックし、「Start the Bridge」にチェックを入れ、「Restart」をクリック。
こんな感じで「Audio Player」の画面に戻ると、UPnPレンダラーがプレーヤーとして表示されるようになる。
うちでの「Audio Player」画面のキャプチャ。
この画面から操作したら音が出る。

Daphile

そんな感じで、DaphileとVolimioを繋いでみた。
まず、アップサンプリングなし。問題なく音楽が再生できる。
アップサンプリングを設定。
まずDACの状況を確認する。
sshでVolumio 1.55にログイン、ユーザーはpi、パスワードはraspberry。
コマンド「cat /proc/asound/card0/stream0」でUSB DACの入力対応を確認。s32leなので32bitで周波数を上げていくことにする。

以下、ウェブブラウザの画面から設定。
右上の「MENU」から「Playback」、MPD Configurationの項目。
Audio buffer sizeはアップサンプリングするなら増量していく必要がある。
Audio output formatで、サンプリング周波数とビット深度を設定。
Sample rate converterは「Fastest Sinc Interpolator」で固定。Best、Mediumの設定も出来るが、Raspberry Pi2には負担が大きすぎて、まともに再生できないこともあるので使わない。Fastestがもともとmpdではデフォルトだし、それで十分にアップサンプリングによる音質向上効果が得られる。

話が逸れるが、個人的にはlibsamplerateのFastestの方が、SoXのVery Highよりも正確な処理をしているのではないかと思う。
正確というのは、もとのデジタル信号から理想的なDA変換をして得られるアナログ波形から、異なるサンプリング周波数とビット深度で理想的なAD変換を行ったときに得られるデジタルデータに、より近いデータに変換される、という意味だ。ややこしいけど。

過去に、ハイレゾ音源の音と、その音源から作られたCD相当の音源をlibsamplerateでアップサンプリングした音を、聴き比べたことがあるのだけど、殆ど差異がないという印象だった。
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20170625a.htm
以前のエントリーの文面としては「結果はというと、44.1のアップサンプリングよりハイレゾ音源の方が繊細で耳あたりがいい鳴り方をする。アンプのボリュームが上がっていきやすい。ある意味、順当な結果になって良かった、という感じ。」と書いているが、、、
実は、差を「盛って」書いている。
今更こんなこと言うのはあれだけど「ここまで差が無いなら、アップサンプリングでいいじゃん」と思ったのが本音だった、、、
しかし当時は、それを弩ストレートに書く気になれなかったので、5mmを5cmぐらいに読み取る感じで書いた(ちょっと追記。普段、聴いているときよりもアンプのボリュームを上げたときに若干だが聴きやすいのはハイレゾ音源の方だった。通常の音量では聴き分けは難しいと思ったので、音量を上げて聴いたという経緯だ)。
その後のうちのオーディオのやり方は、やっぱりハイレゾ音源の方がいい、ではなく、CD音源でlibsamplerateによるアップサンプリング一辺倒で768kHzに至っている。結局、そういうことしか、うちではしていない。多分、4年前に聴いた300kHz台ハイレゾ音源の音は、700kHz台へのアップサンプリングになった時点で越えている。聴き比べしたわけじゃないので、多分だけど。

あと、SoXとlibsamplerateの音の違いを確認したこともあった。
http://blown-lei.net/endive/blosxom.cgi/audio_diary/20180318a.htm
SoXはソースのサンプリング周波数の整数倍へのリサンプリングと、非整数倍へのリサンプリングで、再生音の定位が違う。libsamplerateは大きくは違わない。多分、libsamplerateの方が正確なのだ。正確さは音質にも影響している。
僕が700kHz台までやってみようと思えたのは、音質が確実に良くなったからだ。SoXしか弄ってなかったら、そんなことはしていないだろう。

話を戻す。
192kHzまでは安定して再生。
しかし300kHz台では途切れて音楽にならない。
これは、想定内、、、過去の経験からも、300kHz台以上はRaspberry Pi2にはきつい。それでapu2に移行した経緯がある。

ここで、EliteBook 2570pが届いた。
USBメモリでDaphileを動かしているCompaq 6730bをシャットダウンし、2570pに刺し替えて起動。
トラブル発生。一応、ipアドレスが振られている?のにDaphileの起動画面にアクセスできない。
そしてpingすら通らない。
あれこれと試した末、有線LAN端子の接点がひとつ折れているのを発見する。
なるほど、有線は使えないってことね、、、1万4千円だからな、、、返品は面倒だな、、、

Compaq 6730bで起動し直し、Wifi接続に設定し直して、再度、2570pで起動。
今度は、LANにつながった、、、
無線でも速度は確保出来ているようだ。
これだったら384kHzはいけるだろうか。6730bに比べたらましな感じだが、、、
結果からいえば無理だった。クロックアップしてみたり、sshでVolumioにログインして/etc/mpd.confを書き換えて352.8kHzを設定もしてみたけど、どうしても音が途切れ不安定になる。

192kHzで使用継続する意味があるかどうか。
web player、pulseaudio、libsamplerateで384kHzにアップサンプリングするほうが音はいい。実在感といえばいいか、音色の深み、輝きに差が出る。どうしても192kHzでは見劣りしてしまう。 しかしそれでも、Volumioを使って192kHzに上げた方が、Daphileに直接、USB DACを繋ぐよりはいいようだ。
当面、使ってみることにした。
使用上の問題で、何故かVolumioの音量が勝手に変わるということがある。音が出ないな、と思ったらボリュームが0とかになっている。何か理由があるんだろうけど確認できていない。

今回いくつか、普段使わないディストリビューションを使ったけど、うちでは何だか不具合が出て上手くいかなかった。
そういうわけで、いずれはTiny Coreベースでなんとかしたい。Tiny Coreはうちでは比較的安定している。少々荒っぽいことをしても動くタフなディストリビューションだという印象がある。
直ぐには出来ないだろうが、当面はWeb Player-Pulseaudio-384kHz、Daphile-Volumio 1.55-192kHzで凌ぐつもり。

Jan 02, 2017

VolumioをUPnP/DLNAで繋いでみた(1月4日、追記あり)

あらためて明けましておめでとうございます。

昨年末、UPnP/DLNAは難しいというエントリを上げたんだけど、早々にvolumio1.55を2台、upnpで繋げてしまった。
音質はノイズが多いと書いたけど、i2sDACに出力するようにしたら、かなり解消した。ras piのイヤホン出力で聴いてノイズが多いと思ったけどi2sは影響が少ない様子だ。
ちなみに使ってるのは、raspberry pi B+。
ということで、メモ書きにエントリに書いておく。

早々にあちこちに気付いたこと、足りないことを追記した。つうか、このエントリーそのまま読んでも何をしたのか分からない。新しいエントリーでとも思ったけど、追記したほうがいいと思った。

メインのコンポに継いでみたりしたけど、意外に悪くない感じだ。
もっと扱いやすかったらいいんだけど。

まず、前回のエントリの流れで記載。
ras pi、volumioを2つ用意。両方、/etc/minidlna.confを編集、前回のエントリーの最初のほうに書いた通り。
1つをサーバーに、もう1つをレンダラーに割り当てる。
サーバーの設定は、UPNP\DLNA IndexingとDLNA Library ServerをON。レンダラーの設定は、UPNP ControlとUPNP\DLNA IndexingをON。

サーバー レンダラー

サーバーの設定について、前のエントリーを引用。

次に、sshでrootでログイン。パスはvolumio。
/etc/minidlna.confを編集。
#media_dir=/var/lib/mpd/music
上記の行のコメントアウトを外す。
dlnaサーバを再起動するのに以下のコマンドを打つ。
service minidlna restart

これでvolumio1.55がDLNA serverになる。
もしもvolumioにマウントしたNASのデータだけをupnpクライアントに認識させたかったら、/etc/minidlna.confを以下のよう編集したらいい。
media_dir=/var/lib/mpd/music/NAS

で、今回はDLNAサーバーにNASをマウントしてレンダラーに送る。
サーバー化したvolumioにwebブラウザでアクセスし、音楽データベースであるNASのディレクトリをマウントしていく。
ということなんだけど、ここで問題は、DLNAでは大量のファイルを扱えないし(どうも10000程度が限界らしい?)、原因は分からないが認識できないファイルも出るらしいということ。

当初、NAS上の音楽データ用ディレクトリをそのままvolumioにマウント。
そしてminiDLNAのデータベースを構築しようとしたら(うちのデータは音声ファイルとカバーアート画像ファイルあわせたら、ゆうに10000を超える)、ハングした。その経過は前のエントリに書いたとおり。

そこで対策として、登録する音声ファイルを減らすために、音楽データ用ディレクトリの子ディレクトリを、一つ一つマウントしていった。
次に、画像ファイルをDLNAで管理する必要はなく音声ファイルだけ認識してくれたらいいので、/etc/minidlna.confの記載は以下の様に書き直した。これで音声ファイルのみ管理するようになる。
media_dir=A,/var/lib/mpd/music/NAS

で、複数の子ディレクトリをvolumioにマウントして、トータルファイル数1600強(音楽ファイルのみ)をminiDLNAのデータベースに登録してみたら、数10分かかる。
上記、前回エントリの引用で、service minidlna restart とコマンドを打つと書いてある。
打って数分待つと「 ok 」と表示されて、もういいのかな、と思うんだけど、実はこの時点でtopコマンドを打つと、minidlnaがCPUの50%以上を食って大忙しにしていたりする。
これが仕事を終えるまでは次のステップには進めない、ということ。

volumioにNASをマウントし、volumioのデータベースを構築するだけなら、ファイル数が相当多くても正確に取り込んでくれて登録ミスなどはない(問題を生じるのはこっちが何か間違えているときだけだ)。一方、DLNAのほうは、ファイル数が少なくてもデータベースへの取り込みミスがしばしばあり、原因がはっきりしない。
現時点では、そういうものと思うしかない。

さて、volumioDLNAサーバーのminidlnaが仕事を止めたのを、sshのtop画面で確認し、次はレンダラーだ。
レンダラーのvolumioにwebブラウザ、ncmpcpp、sshでアクセスしてみる。

webブラウザではUPNPは表示されないようなので、これ以上の操作はできない。
ncmpcppからレンダラーのvolumioにアクセスしたら、UPNPと表示されている。そこを選択すると、upnpサーバーのvolumioが表示される。

UPNPにvolumioを表示

上の図では「root」と表示されているが「minidlna」と表示されるのが通常運用らしい。何回か再起動するうちに、今はうちでもそう表示されている。どうしたらそうなるかというのは、実はよく分からないんだけど、、、

あとは階層をたどって表示される音源を選択し再生を指示したら、レンダラーのvolumioから音が出る。

音源を表示

ということなんだけど、実はサーバー側でデータベースが再構築されていた場合、レンダラー側はこれに自動的に合わせてはくれない。レンダラーのほうで登録されているmpdのデータベースと、サーバーのデータベースをすり合わせる必要がある。
つまり、レンダラーのncmpcpp画面には、レンダラー側が作ったデータベースが表示されているということ。
サーバーの実体が表示されてるわけではないのだ。

ncmpcppのブラウズ画面で「u」キーを打つとアップデートできる。
サーバー側のminidlnaとかと、レンダラー側のdjmount、mpdとかで、データのやり取りを行い再構築が行われる。
これにも数10分かかる。
仕事が終わるのを確認するためには、sshでtopを打ち監視しておく必要がある。上級者なら仕事が終わったらビープ音を出すとかスクリプトを書けるんだろうけど、僕には無理。

top画面が落ち着いたら、お疲れ様です。
レンダラーvolumioからncmpcppを使って音が出せるはず。

そういえば、まだあった。
もしも、volumioを何かの事情でシャットダウンした場合、起動したらデータベースの再構築をしないと音が出ないみたいだ。
一旦切れたサーバーとレンダラーの繋がりを戻す必要があるらしい。再構築以外の手段はないのかな、、、

前回のエントリー追記で、問題は音にノイズが多いことと、インデックスの更新に手間がかかることと書いた。
まるでチューニングが合ってないラジオのように、ノイズが再生音に乗っている。
インデックスの問題はしょうがないとして、ノイズはなんとかできないだろうかと考えた。Phile webの記事では使えると書いてるんだし。

まず、サーバー側のmpdを止めてみた。
upnpサーバーなんだからmpdは要らないはずだ。sshからmpd --killで止める。問題なくサーバーとして機能している。しかしこうしたらwebブラウザからはアクセスできなくなる。
しかしさほどノイズは減らない。

追記。そういうわけで、その後はmpdを動かしている。
そのほうがNASをマウント、アンマウントするのにwebブラウザを使えて便利だから。

次にレンダラーの方、mpdのAudio buffer sizeとBuffer before playを増やしてみる。多少の違いはあるようだけど、やはりノイズは多い。

やっぱりイヤホン出力が良くないのかな、と考えてi2sDACを試すことにした。
結局、これで再生音に乗っかるノイズは消えた。これなら使えるレベルかな。
しかし試聴に使用したのはポータブルのアクティブスピーカー。本格的なオーディオシステムでの実力は不明だ。

ノイズは何とかなったとして、インデックスの問題が残っている。これが解消しないと実用に耐えないと思う。
これはUPnP/DLNAサーバーソフトの完成度によって決まると思うので、本気でUPnP/DLNAで音楽再生しようと思ったら、あれこれ探したり試行錯誤していくしかないだろうなと思う。
MinimServerのセッティングがうまくいかなかったのは、ちょっと無念。
個人的には、メモリ再生の方がよほど簡単で楽だと思ってしまった、この1ヶ月だった。

追記だ。
三が日の三日目使ってメインシステムで試聴した。
RCAケーブルを抜き差しして、NASマウント音源のvolumioと比較。

意外なことに、悪くない。
というか、NASマウント音源のvolumioよりいいような気がする。
UPnP音源のvolumio、i2sDACの音は、涼しげで見通しがいい気がする。いい意味で軽く、きめ細かくて陰影が深い。比べたらNASマウントのほうが平板な音に聞こえる。

UPnPを使う意味は、あるのかな、、、
メモリ再生との比較は出来ていないけど、、、

なんというか、、、聴いてみたら、なんとかなるもんならしてみたい、と思える音が出てしまった気がする。
でも、日常使用レベルにするにはそれなりのスキルは必要になりそう、という感じかな。

Posted at 10:47 in audio_diary | WriteBacks (0) | Edit Tagged as: , ,

Dec 31, 2016

UPnP/DLNAは難しかった(volumioをupnpで繋いだので追記した)

最近はupnp/dlnaをvolumioで使おうと試みていた。
lightMPD/upnpgwがupnpを上手く使って音質向上に成功しているようで、NASをマウントするよりもシステムの負担が少ないのかもしれない。じゃあ手近で使っているvolumioで出来ないか、あわよくば音質改善が見込めないかとか考えた。
そもそも大したスキルがないので上手くいかなかったので、この際なので記録しておく。

追記。
DLNAで音出し : オーディオ日記 http://yseki118.exblog.jp/25998461/
こちらで書かれていることなど読むと、upnpで音質向上とはいかないということが今更分かる。
頭もハサミも使いようだ。身の丈にあったことを無理せずやったほうが効率いいんだろうな、と思うのだった。

1月4日、さらに追記。
次のエントリーにその後の経過を書いた。意外に音は良かったという結末だ。

volumio1.55ならupnpを使えるということらしい。

ラズパイ・オーディオをDLNAネットワークプレーヤーとして活用する - Phile-web
http://www.phileweb.com/review/article/201604/22/2053.html
Raspberry Pi+Volumio をネットワークオーディオプレイヤーとして使う : アジャイル株式会社
http://www.agilegroup.co.jp/technote/volumio-via-network.html
How to start the DLNA Server for Volumio 1.5 on the Pi
https://volumio.org/forum/how-start-the-dlna-server-for-volumio-the-t2401.html

まずvolumio1.55の設定。
webブラウザからアクセスしてDLNA関係の設定をONにする。
試験的に、volumioにはNAS上の適当なフォルダをマウント。

次に、sshでrootでログイン。パスはvolumio。
/etc/minidlna.confを編集。
#media_dir=/var/lib/mpd/music
上記の行のコメントアウトを外す。
dlnaサーバを再起動するのに以下のコマンドを打つ。
service minidlna restart

これでvolumio1.55がDLNA serverになる。
もしもvolumioにマウントしたNASのデータだけをupnpクライアントに認識させたかったら、/etc/minidlna.confを以下のよう編集したらいい。
media_dir=/var/lib/mpd/music/NAS

確認で、http://volumio:8200/ をwebブラウザで表示。
うちのノートPC(Fedora)はこれでは表示できなかったので、IPアドレスに書き換えて打ち込む。
スナップショット画面が以下。

miniDLNA画面

確かにdlna serverとして動いている。
windows PCのWindows Media Playerから、dlnaサーバーとしてvolumioを認識できた。しかしwindowsから音を出すのが目的じゃない。

まずvolumioを2台、upnpでつなぐことができないか考えた。
MPD-to- MPDでやれるはずなんだけど、レンダラー担当のvolumioが、volumio DLNA serverを認識してくれない。というか、認識させる方法がいくら調べても分からない。

MPD as client to an UPnP/DLNA Media Server
https://www.lesbonscomptes.com/pages/mpd-upnp.html

諦めて、QNAP NASの機能を使う。NAS-to-MPDということになるのかな。
まず、LINNが推奨してるというMinimServerを試みる。AppCenterを使って簡単にインストールできる。

ただ、インストールは簡単だったけど扱いがよくわからない。
設定次第で細かいことも出来そうなんだけど、設定の仕方がよくわからないのだ。設定するのに「MinimWatch」というソフトをインストールしないといけない、とまでは分かった。

サーバーソフトの紹介 『MinimServer』言の葉の穴 http://kotonohanoana.com/archives/1536
MinimServer 導入・設定・運用編 言の葉の穴 http://kotonohanoana.com/archives/8121

ただ細かい設定をしなくても、この時点でvolumioからupnpでNASを認識できている。
ncmpcppで表示できていて、操作して音も出せる。
しかし、cue sheetは表示されず、使えない。表示されている音楽ファイルの再生を指示して音が出るまでに若干時間がかかる。不便だな、設定したら便利になるだろうか、などと思っていたら、MinimServerが認識していないflacファイルが少なからずあることに気付いた。原因ははっきりしない。
MinimWatchは触ってもないけど、諦めることにする。

MinimServerを止めて、最初からQNAP NASに入ってるものを使うことにする。
DLNAメディアサーバー、Music Stationが組み込まれていて、追加でMedia Streaming Add-onをインストールしたらNASからデータをvolumioに送ることができる。操作は、NASのMusic Stationにwebブラウザでアクセスして行う。
つまり、webブラウザでNAS上のアプリを操作し、そのアプリがvolumioにデータを送り、volumioがそれを再生すると。

再生中のvolumioにsshでログインしてtopを打ってみたのが下の画像。
Upmpdcliが働いて、volumioがupnpレンダラーとして機能しているのが分る。

top画面

意外なことに、Music Stationはcue sheetの中を読み込んで曲別に楽曲管理してくれるようで、これはすごいと思った。しかし残念なのは、1曲再生するつもりで操作したら、その曲が終わったあと次の曲を再生していく。アルバムの2曲目を再生しようとしたら1曲目から再生される。つまり曲別に管理しているようでもデータの扱いはファイルということだ。再生されている曲と、Music Stationに表示されている曲に齟齬が生じる。
実際、ncmpcppでmpdにアクセスしたら、個別の曲じゃなくアルバムのflacファイルを再生してるのが一目瞭然だ。
upnp/dlnaというのはファイル別で楽曲管理するらしく、cue sheetを使うのは相当難しそう。

MinimServer Forum > MinimServer > General > CUE Sheets
http://forum.minimserver.com/archive/index.php?thread-138-3.html

> The UPnP server protocol requires each track to be sent as a complete file.

あれこれするうちに挙動がおかしくなった。これはまずい。負担はかけられないようだ。
他に触ってみて気づいたのは、やはり音が出るまでに若干時間がかかる。10秒前後かな。再生開始の時にノイズが乗ることがある。
あと、Music Stationでライブラリ管理を行うのは難しい。うちはファイルが多すぎるのだ。目的のファイルを探すのに時間がかかりすぎる。検索機能も使いやすいとは言えない。
アートワーク表示こそ出来ないけどスピーディにファイルにアクセスできるncmpcppに馴染んでいたら、かなり使いにくいと感じてしまう。

そんなわけで、ncmpcppでアクセスして、なんとか出来ることはないかとか考える。
ncmpcppでvolumio経由でupnpサーバーの状況を表示しようと思えばできるようなんだけど、うちにはメイン用とバックアップ用、2つのNASがあるんだけど、NASによってncmpcppで表示できたりできなかったりして理由がよくわからないし、表示できても全てのファイルを網羅できていなかったりして、いろいろわけが分からなかった。
しかし、片方のNASのupnpサーバーを停止してみたら、他のNASのupnpサーバーが機能し始めて?volumioとも繋がった。
ここで初めて気付いたのが、一つのネットワークにupnpサーバーは一つじゃないといけないのかな?ってことだ。よくわからないけど。

ここで興味本位で、ncmpcppのUPNPブラウザ画面からアップデートをかけてみたら(uキーを押すだけ)うちにあるNAS?があれもこれも表示されてきた。これって全部、upnpサーバー?
うちには音楽用のNAS以外に古くからあるファイルサーバーがいくつか動いている。それらが表示されているし他にもネットワーク上のデバイスがいくつか、、、

update画面1

このときNASでは何をしてるかというとmysqldというデーモンがCPUの70%を食って大忙しだ。webデータベースを作るMySQLのデーモンらしい。一方でvolumioはといえば、topコマンドを打ってみたら何もしてないようだ。データベースの完成待ちという所か。
これが、えらく時間がかかる。
mpdがデータベースを作るのにも時間がかかるが、多分、数10倍以上かかっている。

あまりに時間がかかるので、ncmpcpp上で唯一表示された[Beethoven]のフォルダの中を見てみたら下のスキャン画像のような状況! 同一ファイルのデータを重複して繰り返し取り込んでいるらしい。。。

update画面2

とりあえず、volumioをシャットダウン。
速やかにmysqldは仕事を止めて、NASのCPU使用率は通常レベルに戻った。やれやれだ、、、
MinimWatchをインストールしてMinimServerで粘ったほうが良かったかな、、、

volumioでupnpは、うちではハードルが高いかな。
cue sheetも使えないし、操作は手間がいるし、当面は素直にvolumioはNASをマウントして使うことにした。

しかし、あれこれやるうちに新たな発見があった。

うちでは複数のmpdをひとつのノートPCで扱うため、ポートの設定を各々のmpdで変えていた。
ノートPC上に複数のアカウントを作り、各々にmpdサーバーを割り振って、端末のウインドウを開いてアカウントを変えてncmpcppを立ち上げて使う。複数のウィンドウにアカウントを割り振ることで、同時に複数のmpdを操作できる。
mpdとncmpcppのポート設定を合わせて書き換えて使う。デフォルトは6600だが、これを6601、6602、などと変えている。つまり、IPアドレスとport番号をセットにして設定している。
下の図のような感じ。

IPとPort

書き換えていなかったら、以前は上記のような運用は出来なかった。混線するとでもいうのか、ncmpcppとmpdが繋がらなくなるのだ。
つまり、ポート設定を書き換えなければ、ひとつのPCで同時に使えるmpdは1つということで、そういうものなんだと理解をしていた。
ポートを変えるとvolumioはwebブラウザからのアクセスが出来なくなるが仕方ない。大して困らないし。

ところが、いつの間にか、ポートが6600のままで同時に複数のmpdを操作出来るようになっていた。
そもそもIPアドレスが異なるのに、ポートも変えないと繋がらないというのは、何かがおかしいのかもしれない。

気付いたきっかけは、volumioを2台、upnpでつないでみようとしたことだ。
volumioをupnpで継ぐにはUpmpdcliを動かしておく必要があり、mpdのポート6600を変更したら、これが動かなくなるので変えられない。ひとつのネットワークにポート6600のvolumioが2つ存在することになる。
ncmpcppからアクセスできなくなるだろうと思っていたら、問題なく出来てしまった。

以前とは何が変わったかというと、クライアントPCのOSが変わった。以前はVine Linuxだったが現在はFedoraとDebianを使っている。
ポートが6600のままでいいなら、設定などで余分な手間が要らなくなるし、volumioならwebブラウザからのアクセスも可能になる。

新しい知見があったので、やって良かったということかな。

追記。
イラストは下記のサイトのものを加工して使わせていただいています。
GATAG|フリー素材集 壱 http://01.gatag.net/0006178-free-illustraition/
Publicdomainvectors.org http://publicdomainvectors.org/ja/tag/%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2

明けましておめでとうございます。元旦に追記。

なんやかんやでvolumio2つをupnpで繋げてしまった。
音質はノイズが多くピュアオーディオには無理。スキルがないからかもしれないけど。
せっかくなので記録しておく。

1月4日、追記。
エントリの上のほうにも追記したけど、実は意外に音は良かった。イヤホンだと以前よりも悪くなったと思ったんだけどな、、、
次のエントリーにその後の経過を書いた。

まず、ras pi、volumioを2つ用意。両方、/etc/minidlna.confを編集、このエントリーの最初のほうに書いた通り。
1つをサーバーに、もう1つをレンダラーに割り当てる。
サーバーの設定は、UPNP\DLNA IndexingとDLNA Library ServerをONに。実は、UPNP\DLNA IndexingはOFFでもいいのかもしれないけど、十分な確認が出来ていない。
レンダラーの設定は、UPNP ControlとUPNP\DLNA IndexingをONに。

サーバー レンダラー

webブラウザにはUPNPは表示されないようなので、これ以上の操作はできない。
ncmpcppからレンダラーのvolumioにアクセスしたらUPNPが表示されるので、そこに入るとUPNPサーバーのvolumioで設定された音源が表示される。

UPNPにvolumioを表示

あとは階層をたどって表示される音源を選択し再生を指示したら、レンダラーのvolumioから音が出る。

問題は、前述したとおり音にノイズが多いことと、インデックスの更新に手間がかかること。
本来、ファイルが追加されたら自動的にインデックス(データベース)が更新して欲しいんだけど、そうはいかないらしい。自動じゃないのはいいとして、手順がひどく面倒なのだ。
まず、miniDLNAの更新で以下のコマンドをsshから打ち込み。
$ sudo minidlna -R
$ sudo service minidlna restart
更にncmpcppから、レンダラーのmpdのdatabase更新をかける必要がある。以下を参考にした。

Why is the minidlna database not being refreshed? http://stackoverflow.com/questions/5180409/why-is-the-minidlna-database-not-being-refreshed

日常的に使用するのは無理じゃないかなという感想だ。

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 › »