arch linux でUPnP(2)
Raspberry-PI を arch linux を動かし、UPnP対応のシステム作りする方法についは、「RaspberryPIをUPnP化させる」で大半は解説しました。従って、ここではもう一度、コマンドを並べながら、解説不十分だったところを補ってみたいと思います。
システムの作成
適当なLinux環境が必要です。僕はVmWarePlayerのubuntuを使っています。これにはWindows環境にVmWarePlayerをインストールする必要があります。詳細はこちら。linuxと長く付き合うにはこのような仮想環境が必須だと思います。しかし、arch linux をインストールため、ちょっとだけ利用するという目的には、重すぎるかもしれませんね。
その場合、お勧めなのは、r-pi2/3で動き、sshが使えるイメージを利用することです。お勧めは archphile。ここからダウンロード出来ます。「Download 0.99.4c Beta for Raspberry Pi 2」という一番上のボタンをクリック。r-pi2用とありますが、r-pi3でも動きます。
要注意なのは、同じページの下に注意がありますが、zip形式ですが、7zipを使って解凍しろとある点です。その通りにした方が問題はなさそうです。
イメージのSDカードへの書き込みの定番はDDWINですが、僕は Win32DiskImagerを使っています。ここまでが Windows環境での操作となります。
ここからはr-pi側の操作となります。この時、絶対のお勧めはsshを使うこと。r-piの場合、hdmi接続のディスプレイを使って、キーボードを本体に繋ぎ、操作することもできますが、操作性を考慮するとsshが使い易いです。Windows環境sshであれば、Windows間でのCopy&Pasteが使えますので、効率が倍位違います。
Windowsで動くsshクライアントプログラムはいくつかありますので、お好みのものを使えばいいでしょう。僕が以前に書いたレビューはこちらです。このレビューではTeraTerm、Poderosa、Puttyを紹介しています。TeraTermについてはたかじんさんが丁寧な紹介をされています。「Raspberry Pi ユーザのための SSH超入門 TeraTerm編」。
あとRloginというソフトが便利そうですね。Rloginについてはここに情報があります。
SSHに関しては、こだわる人の多い内容なので、ググれば情報はいくらでもあります。調べてみて自分にあったソフトを選べばよいと思います。
それではシステムの作成です。
pacman -Syy pacman -S dosfstools fdisk -l fdisk /dev/sdb n -> (default)(+100M) -> t-> (c) -> a -> n -> (default) -> p -> w mkdir /mnt/boot mkdir /mnt/root mkfs.ext4 /dev/sda2 mkfs.vfat /dev/sda1 mount /dev/sda1 /mnt/boot mount /dev/sda2 /mnt/root wget http://archlinuxarm.org/os/ArchLinuxARM-rpi-2-latest.tar.gz http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-3-latest.tar.gz bsdtar -xpf ArchLinuxARM-rpi-2-latest.tar.gz -C /mnt/root sync mv /mnt/root/boot/* /mnt/boot sync nano /mnt/root/etc/ssh/sshd_config PermitRootLogin yes umount /mnt/boot /mnt/root reboot
arch linuxをintelアーキテクチュアのマシンにインストールするのは簡単ではありません。以前、apu用にarch linuxをインストールする方法を紹介したことがありますが、記事3回分となっていますね。このarm用のやり方はコマンド数約20。比較するとarmアーキテチュアは随分簡単です。arch linuxを使うならarmアキテクチュアのSOCを使う一手かもしれません。
r-pi用のarch linuxとしては、rpi2用の32ビット版(ArchLinuxARM-rpi-2-latest.tar.gz)と、rpi3用の64ビット版(ArchLinuxARM-rpi-3-latest.tar.gz)があります。32ビット版はrpi3でも動きますので、とりあえず、こちらを使っておく方が無難です。
MPDのインストール
nasクライアント機能、alsa機能、本体御三家となります。
pacman -Syy pacman -S cifs-utils nfs-utils ntfs-3g pacman -S alsa-utils alsa-firmware alsa-lib alsa-plugins alsaplayer pacman -S mpd mpc ncmpc
mpdは最新版に近いバージョンがインストールされます。また機能もUPnP化に必要なものはそろっていますので、rt化機能が必要なければ、mpdのビルドは不要かもしれません。最新版は0.2.10ですから、ほぼコンカレントです。なにがなんでも、コンパクトなmpdをビルドして使いたいということであれば別ですが。
MPDの設定
fstabとmpd.confの設定が必要です。
nano /etc/fstab //192.168.0.35/public /music cifs username=yo,password=,sec=ntlm,uid=mpd,file_mode=0666,dir_mode=0766,iocharset=utf8,rsize=130048,wsize=4096,noauto,x-systemd.automount 0 0 mkdir /music nano /etc/mpd.conf #realtime_option { # memlock "yes" # stack_reserve "1024" # heap_reserve "0" # main_priority "OTHER:0" # player_priority "FIFO:53" # decoder_priority "FIFO:52" # update_priority "OTHER:0" #} audio_output { type "alsa" name "USB Dac" device "hw:0,0" # priority "FIFO:99" mixer_type "disabled" # dsd_usb "no" # dsd_usb "yes" # dsd_native "yes" # dsd_native_type "3" dsd_usb "yes" DoP "yes" # dsd_native "no" buffer_time "300000" period_time "18750" } input { plugin "curl" proxy "127.0.0.1:8123" } decoder { plugin "flac" enabled "yes" } decoder { plugin "audiofile" enabled "yes" } decoder { plugin "dsdiff" enabled "yes" } decoder { plugin "dsf" enabled "yes" } database { plugin "simple" path "/var/lib/mpd/tag_cache" compress "no" } playlist_plugin { name "cue" enabled "no" } # music_directory "/music" playlist_directory "/var/lib/mpd/playlists" #db_file "/var/lib/mpd/tag_cache" #sticker_file "/var/lib/mpd/sticker.sql" log_file "/var/lib/mpd/mpd.log" pid_file "/var/run/mpd.pid" state_file "/var/lib/mpd/state" user "root" group "root" bind_to_address "any" port "6600" # #metadata_to_use "artist,album,title,track,name,genre,date,composer,pe$ metadata_to_use "artist,album,title,track,genre,date,disc" # follow_outside_symlinks "yes" follow_inside_symlinks "yes" default_permissions "read,add,control,admin" # mixer_type "disabled" # audio_buffer_size "1792" buffer_before_play "30%" # filesystem_charset "UTF-8" id3v1_encoding "UTF-8"
MPDの起動設定
どいういう訳か、僕の環境ではrc.localを使う方法しか動かないので、そちらを紹介します。
mkdir /var/lib/mpd/playlists touch /var/lib/mpd/{database,log,pid,state,sticker.sql} nano /usr/lib/systemd/system/mpd.service #ExecStart=/usr/bin/mpd --no-daemon /etc/mpd.conf systemctl disable mpd.service nano /etc/rc.local #!/bin/bash /usr/bin/mpd --no-daemon /etc/mpd.conf chmod +x /etc/rc.local nano /usr/lib/systemd/system/rc-local.service [Unit] Description=/etc/rc.local Compatibility Wants=network.get [Service] Type=oneshot ExecStart=/etc/rc.local TimeoutSec=0 #StandardInput=tty RemainAfterExit=yes [Install] WantedBy=multi-user.target ln -s /usr/lib/systemd/system/rc-local.service /etc/systemd/system/multi-user.target.wants/ reboot
MPDのビルド(rtパッチをかける)
最初にビルドに必要なライブラリのインストール。
この二行はmpdのビルドをやらないとしても、実行しておいた方がいいです。以降のカーネルのビルドやパッケージのビルドによるインストールに必要ですので。
pacman -S git make autoconf automake libtool pkg-config patch pacman -S gcc boost wget
mpdのソースはyanさん/dififanさんのパッチをかけるのあれば、0.20.9以前にせざる得ません。0.20.10以降ではエラーになります。
wget https://www.musicpd.org/download/mpd/0.20/mpd-0.20.9.tar.xz tar -Jxvf mpd-0.20.9.tar.xz cp /music/CD/mpd-0.20-rtopt20170112.patch ./ cd mpd-0.20.9 patch -p1 < ../mpd-0.20-rtopt20170112.patch ./autogen.sh nano ../myconfig #!/bin/sh ./configure \ --disable-bzip2 \ --disable-iso9660 \ --disable-zzip \ --enable-id3 \ --disable-sqlite \ --enable-ffmpeg \ --enable-alsa \ --disable-wave-encoder \ --enable-pipe-output \ --enable-httpd-output \ --disable-recorder-output \ --disable-sndfile \ --disable-oss \ --disable-shout \ --disable-pulse \ --disable-ao \ --disable-mad \ --disable-jack \ --disable-cdio-paranoia \ --disable-soundcloud \ --disable-inotify \ --disable-ipv6 \ --enable-libmpdclient \ --enable-curl \ --disable-mms \ --disable-wavpack \ --disable-lame-encoder \ --disable-twolame-encoder \ --disable-vorbis \ --disable-lsr \ --enable-rtopt \ --with-zeroconf=auto \ CXXFLAGS="-O3 -march=native" sh ../myconfig make && make install nano /etc/rc.local #!/bin/bash /usr/local/bin/mpd --no-daemon /etc/mpd.conf
mpdのビルドは前回紹介したように
CXXFLAGS="-O2 -march=armv7-a -mtune=cortex-a7 \ -mfpu=neon-vfpv4 -mfloat-abi=hard" \ --with-systemdsystemunitdir=/lib/systemd/system
とするとエラーになるので、やむおえず。上記の通りとしています。 だいぶ長くなったので、以降は次回に。
(PC_Audio) 2017/09/23
arch linux でUPnP(1)
タイトルを変えました。ここから先は arch linuxに絞って、システム作りしていくことにします。理由は raspbian liteと聞き比べましたが、「やはり arch の方がいいな」と思ったからです。raspbianはちょっと鋭さに欠けるという気がします。安定感があり、adapterとして使うには良さそうですが、二つのOSに対応するのは面倒です。また、rasbian は8月からdebian strech版に移行したばかりで、当面バタバタしそうなので、arch一本に絞ることにしました。
しかし、arch linux もローリングリリース、楽じゃないです(^^;;;。過去の書き込みを利用して、その通りやっても、うまくいかないのは日常茶版です。
コンピュータの世界はドックイヤーですので、今日書いたことが明日有効であるという保証はありません。特に arch linux のようなローリンングリリース型のディストリビューションの世界では、これは日常茶飯の出来事です。身を守る方法は
- 古いバージョンのシステムをしっかり確保すること
- 操作方法そのものではなく、何故そのような操作するのかの背景となる知識を理解すること
です。「古いバージョンのシステムをしっかり確保」というのは必須です。その位、不安定というこたとです。ただ、重要なのは二つ目の「応用力と物真似しない態度」です。
今回のrt化でも、カーネルのバージョンを4.9.33に戻したのですが、これがまさに昨日出来たことが今日は出来なくなるの典型でした。このあたりのバタバタした経緯もそのまま書き残しておくことにします。
カーネルのRT化には適当なOSのバージョンレベルを選ぶ必要があります。定石はrpi-4.9.yの全部の版を取り込んで、どのバージョンがあるか検索をかける。
git clone https://github.com/raspberrypi/linux.git -b rpi-4.9.y git log --oneline | grep "Linux\ 4\.9"
次に kernel.org の rt-projects で 4.9 のパッチのバージョンを確認する。
これで捜すと4.20、4.27、4.30、4.33が使えそうです。最新は4.33なので、それでいくことにしました。
050639ef5810 Linux 4.9.33 [root@alarmpi linux]# git log --oneline | grep "Linux\ 4\.9" efcfbfb1d8bf Linux 4.9.40 f0cd77ded512 Linux 4.9.38 c48f76d680ad Linux 4.9.37 9f86f302ec0e Linux 4.9.36 92905e331aea Linux 4.9.35 493ecd5cd73e Linux 4.9.34 050639ef5810 Linux 4.9.33 05afd4c0af6a Linux 4.9.32 f1aa865ae5d4 Linux 4.9.31 db3fd4527ed3 Linux 4.9.30 f5eea276d8de Linux 4.9.29 58cd97ff374b Linux 4.9.28 89f3b8d5f264 Linux 4.9.27 d071951e08ee Linux 4.9.26 525571c4df40 Linux 4.9.25 a8c90ef62281 Linux 4.9.25 2f5e58ec793f Linux 4.9.24 c3582cc56eac Linux 4.9.23 cf2586e60ede Linux 4.9.22
とあるので、
git checkout 050639ef5810 d9ea51a9bea4 Linux 4.4.43
これでソースのヴァージョンが 4.9.33 になります。
wget https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/patch-4.9.33-rt23.patch.gz cd linux gzip -dc ../patch-4.9.33-rt25.patch.gz | patch -p1 cp ../firmware/extra/Module7.symvers Module.symvers make bcm2709_defconfig
これがconfigがないというエラーになります。どうもこの版は問題有りの版であったようです。無理矢理先に進めましたが、今度はカーネルをインストールするところで
make menuconfig make -j4 zImage modules dtbs make modules_install cp arch/arm/boot/dts/*.dtb /boot/ cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/ cp arch/arm/boot/dts/overlays/README /boot/overlays/ scripts/mkknlimg arch/arm/boot/zImage /boot/kernel7.img
mkknlimgも無いというエラーになります。これも最新版からコピーして先に進めましたが、結局、リブート後ダンマリとなります。
これは使えないということで、作戦を変えて出直し。今度は4.9.35に4.9.33-rt23のrtパッチをかけてみます。
git clone --depth 1 https://github.com/raspberrypi/linux.git -b rpi-4.9.y cd linux gzip -dc ../patch-4.9.33-rt25.patch.gz | patch -p1
エラーが無いか確認します。
[root@alarmpi linux]# find ./ -name *.rej ./kernel/signal.c.rej
一つだけあります。手修正することにします。
[root@alarmpi linux]# nano ./kernel/signal.c.rej --- kernel/signal.c +++ kernel/signal.c @@ -583,7 +641,7 @@ static void collect_signal(int sig, struct sigpending *list$ still_pending: list_del_init(&first->list); copy_siginfo(info, &first->info); - __sigqueue_free(first); + sigqueue_free_current(first); } else { /* * Ok, it wasn't in the queue. This must be
オリジナルはどうなっているか確認します。
[root@alarmpi linux]# nano ./kernel/signal.c still_pending: list_del_init(&first->list); copy_siginfo(info, &first->info); *resched_timer = (first->flags & SIGQUEUE_PREALLOC) && (info->si_code == SI_TIMER) && (info->si_sys_private); // __sigqueue_free(first); sigqueue_free_current(first); } else { /* * Ok, it wasn't in the queue. This must be
ご覧の通り修正しました。間に新しいコードが入ったの古いバッチが通らなかったのですね。この程度であればプログラムの内容が完全に分からなくても修正可能です。
menuconfigは以下を追加して、設定しました。
Kernel Features ---> Preemption Model (Fully Preemptible Kernel (RT)) Timer frequency (500 Hz) File systems ---> [*] Network File Systems ---> [*] SMB3.1.1 network file system support (Experimental)
詳しい説明はたかじんさんのサイトにあります(僕のサイトにもあると思いますが、4年以上前なので、捜すのが面倒なので、こちらをご紹介します ^^;;;)。
苦労しましたが、めでたくrtカーネルとなりました。
次のトラブルはmpdのビルド。rt化対応のためビルドしましたが、エラーになります。いろいろ調べて、どうもオプションの指定でエラーになると分かりました。内容は
CFLAGS="-O2 -march=armv7-a -mtune=cortex-a7 \ -mfpu=neon-vfpv4 -mfloat-abi=hard" \ CXXFLAGS="-O2 -march=armv7-a -mtune=cortex-a7 \ -mfpu=neon-vfpv4 -mfloat-abi=hard" \ --with-systemdsystemunitdir=/lib/systemd/system
となります。これを以下の通り修正。
CXXFLAGS="-O3 -march=native"
あっさりビルドは通りました。なんでなのでかねぇ(^^;;;。
この後、一番、悪戦苦闘したのはシステムを再起動すると何故か突然立ち上がらなくなるというトラブル。
順番に切り分けて、カーネルのビルド時に関連するソフトをインストールしますが、この中で
pacman -S --needed base-devel
これが問題でした。AURのためにインストールしたのですが、止めたら問題なく再起動出来るようになりましたから、これが諸悪の元凶であったようです。
トラブル報告ばかりで、肝心の本論がゼロですが、次回に。
(PC_Audio) 2017/09/17
MiniDLNAをDSD対応させる
MiniDLNAは現在はReadyMediaという名前に変わっていますので、そちらで呼ぶ方が正しいのですが、とりあえず旧姓のMiniDLNAの方が通りがよいので、古い名前で表記します。
MiniDLNAはC言語で作成され、linuxで動くコンパクトなdlnaサーバソフトです。市販のnasなどでも利用されていますので、結構メイジャーなオープンソースソフトだと思います。インストールは簡単でapt-gte、pacmanで行えますので、様々な環境で簡単に利用できます。ご本家のサイトはこちら。ソースのダウンロードもこちらから出来ます。githubはこちら。
このソフトの特徴はオープンソースの強みを利用して、いろいろな機能追加がパッチで行われていることです。例えば、Cover-Artの対応はReadyMediaのこのページに情報がありますが、パッチで対応されます。また、transcodeへの対応についてはこのページやarch linuxでのMiniDLNAの動作に関するこのページに情報があります。
さて、本題のDSD対応ですが、これもパッチで対応されます。ただ、情報があっちこっちに散在していて、正しく処理するには、それらの情報を整理して対応する必要があります。
というわけで、どう整理すればよいのか、そのあたりをご紹介します。
パッチの作者ですが、日本の方で、ここにウェブサイトがあります(トップページでなくパッチの記事の書き込みがあるページにリンクしてあります)。このサイト、『「法悦の詩」で一番過激で、一番イッちゃってる演奏を探してみよう』なんて過激な記事があって、なかなか面白いです。書き込みのペースは落ちていますが、まだ更新は続いていますので、作者と連絡をとることはできそうです。
この初出のパッチは2014年6月に公開されています。この公開内容に対する作者の修正のメッセージがこちらです。2015年9月の書き込みですね。修正パッチのあるサイトはこちら。
修正パッチのあるサイトの画面です。
このページで不思議なのは git clone のコマンドの表記が画面右中央にありますが、その通り操作してソースをとりにいってもパッチのかかっていないオリジナル(?)の 1.1.5のソースになることです。しかし、その上にあるdownload snapshotというボタンをクリックして、長いサフィックスが付いたzipファイルをダウンロードすると、パッチ修正のかかったソースコードがgetできます。このあたり、どうなっているのだろうか。不思議です。
2017.09.17 追記
作者のTakeshichさんより「git cloneした後にgit checkout AddSupport4DSDとするとおそらく目的のソースコードを得ることができると思います。」との回答を頂きました。詳しくは掲示板のこの書き込みを参照して下さい。
wget https://sourceforge.net/code-snapshots/git/u/u/u/takeshich/minidlna.git/u-takeshich-minidlna-df08fc74b66fb288d85fbe84b9d03409b6a1f331.zip unzip u-takeshich-minidlna-df08fc74b66fb288d85fbe84b9d03409b6a1f331.zip cd u-takeshich-minidlna-df08fc74b66fb288d85fbe84b9d03409b6a1f331
試しにコンパイルしてみます。環境は「RaspberryPIをUPnP化させる」のarch linux環境。カーネルとmpdのビルドに必要なライブラリはインストール済という意味です。MiniDLNAも「pacman -S minidlna」でインストール済です。
./autogen.sh ./configure make
これで正常に終了しました。他の環境だとライブラリのインストールが必要かもしれませんね。
実行してみます。
systemctl stop minidlna make install nano /usr/lib/systemd/system/minidlna.service #ExecStart=/usr/bin/minidlnad -S ExecStart=/usr/local/sbin/minidlnad -S systemctl --system daemon-reload systemctl start minidlna minidlnad -R reboot
プログラムの置き場所は「/usr/local/sbin/minidlnad」となりますので、minidlna.serviceの修正が必要です。データベースを更新して、リブートします(リロード、起動でもOKのはず)。
これでOKと思いましたが、世の中そんなに甘くはない。dffやdsfを認識はするようになりましたが、演奏できません。めげずにググって、情報の検索を続けます。
この掲示板(RockDiskNext)にパッチ作者が登場して書き込みをしていますね。残念ながら解決する情報はなさそうです。要するにDACによって状況は変わるので、このあたりはいろいろやってみて、結果を教えて頂戴ということらしいです。ここにも同じような情報があります。
ここに「run the minidlna DLNA server with DSD support」という情報があるのですが、基本的に同じパッチを使ったバリエーションなので、参考にはなりますが、解決策にはなりません。
最後にたどりついたのは、ご本家のこの掲示板の書き込みです。去年のクリスマスに作成(質問)され、大晦日に更新(回答)されたスレッドです。
「なるほどね。mimeの記述を変えれば、対応出来るのね。」と分かりました。これをパッチ済のソースに適用すれば、良さそうです。やってみました。
まず、metadata.c。281行目(ctrl+c)にGetAudioMetadataというファンクションがあります。その中のmimeを定義している部分を修正。
cd u-takeshich-minidlna-df08fc74b66fb288d85fbe84b9d03409b6a1f331 nano metadata.c /* 340行目から349行目までコメントアウト else if( ends_with(path, ".dsf") ) { strcpy(type, "dsf"); m.mime = strdup("audio/x-dsd"); } else if( ends_with(path, ".dff") ) { strcpy(type, "dff"); m.mime = strdup("audio/x-dsd"); } */ //以下の内容と差し替え else if( ends_with(path, ".dsf") ) { strcpy(type, "dsf"); m.mime = strdup("audio/x-dsf"); } else if( ends_with(path, ".dff") ) { strcpy(type, "dff"); m.mime = strdup("audio/x-dff"); }
次に upnpglobalvars.h。これは上記掲示板の書き込み内容は間違っていますので、ご注意。
正しい内容(*があるかと改行だけですが)で書き換えます。
nano upnpglobalvars.h //172行目から // "http-get:*:audio/x-dsd:*," \ "http-get::audio/x-dsf:*," \ "http-get::audio/x-dff:*," \
最後にutils.c。310行目にmime_to_extというファンクションがありますから、その中の334行目から以下の通り修正します。
nano utils.c // else if( strcmp(mime+6, "x-dsd") == 0 ) // return "dsd"; else if( strcmp(mime+6, "x-dsf") == 0 ) return "dsf"; else if( strcmp(mime+6, "x-dff") == 0 ) return "dff";
もう一度コンパイルからやり直しします。
./autogen.sh ./configure make systemctl stop minidlna make install minidlnad -R reboot
めでたく、dsdファイルが再生できるようになりました。確認したDACは
- aitlabo DAC(旧タイプのES9018チップ使用の製品)
- KORG DS-DAC-10R
- SoulNote D-1
です。 まあ、問題になるのは多分DACではなく、DACを動かすためのレンダラーだと思いますが、こちらはlinux mpd+upmpdcli となります。
ちなみに、このパッチはロジックに関連する部分は無いので、MiniDLNAの最新版(1.2.1)でも問題なく適用できるはずです。上記以外の修正は tagutils/tagutils-dff.c、tagutils/tagutils-dff.h、tagutils/tagutils-dsf.c、tagutils/tagutils-dsf.h の4本のプログラムの追加と tagutils/tagutils-dsf.c の修正だけです。tagutils-dff.c/h、tagutils/tagutils-dsf.c/hはそのまま使えそうですし、tagutils-dsf.cも同じ部分を追加修正するだけで済みそうです。
ところで、上記掲示板の回答者の yellow monkey さんってDSDバッチ作者じゃないかと思っていましたが、donuts.shop73 さんだったのですね。ビックリしましたが、「なるほどなぁ」と納得しました。このあたり、掲示板でやりとりしています。場所はこちらとこちら。
結局、掲示板でおねだりして、以下の機能拡張の最新のパッチとソースをdonuts.shop73 さんから公開して頂きました。
リンク先はいずれもこのサイトの掲示板へのリンクです。パッチは何れも1.2.1対応とのことですが、2番目のdsd対応パッチマージ版は古い版でもパッチ可能です(1.1.6で確認)。
おまけに MiniDLNA 1.1.4でcover-artのパッチをかける方法です。
wget https://sourceforge.net/p/minidlna/patches/_discuss/thread/9825a1a0/3c74/attachment/minidlna-1.1.3-no-cover-resize.patch patch -p1 < minidlna-1.1.3-no-cover-resize.patch
あとは同じやり方でビルド出来ます。
p.s. RaspberryPIをUPnP化させる(3)でpolipoのビルド方法を解説していますが、digififanさんのパッチをかけるのを忘れていますね。これがかかっているかいないかで音に影響します。かけた方がいいです。最新版はlightmpdの掲示板にありますので、ここから buildroot-polipo-v2.4.tgz をget。カレントディレクトリ(/root)にもってきておきます。
cp /music/sdd/CD/buildroot-polipo-v2.4.tgz ./ tar zxvf buildroot-polipo-v2.4.tgz cd polipo patch -p1 < 0001-lightmpd-v2.4.patch make && make install
でビルドできます。
(PC_Audio) 2017/09/09
NanoPI NEO2 nasキット
やっと写真を入れることの出来るネタです(^^;;;。
NanoPI NEOは中国製のr-pi対抗のSOCです。AllWinnerという中国製SOCの新型らしいです。特徴は小さいことと安いこと。
昔、この会社の Smart TV Box という機種に対応した音楽再生用システムのイメージを公開していたことがあります。同じようにイメージを公開していた Cubox と比較して音はいまいちでしたが、価格が安かったことと入手が容易だったので、イメージは結構の数ダウンロードされましたね。
というわけで、「NanoPI NEO用のlightMPD はどうなのかしら」と思っていましたが、NanoPI NEO2 nasキットというのがあるらしいと知り、「これなら、音が悪くても、nasにするという保険をかけることができるな」と考え、getしました。
NanoPi NEO の日本語情報についてはがとらぼさんのこのページ(NanoPi NEO/NEO2購入まとめ)の情報がいたれりつくせりです。NanoPI NEO2 nasキットについてもリンク先の情報で使えそうだなと分かり、getしました。
このSOCの購入で要注意なのは、価格を下げるためギリキリまでコストダウンしてあるので、裸(SOC単体という意味です)では使い物にならないこと。例えばヒートシンクなしでは安定した稼働は出来ないようですが、付いていませんので、別途購入する必要が出てきます。ディスプレイも繋げないので、SSH接続で使うということになります。詳しい情報はリンク先をご覧ください。
購入はご本家のFriendlyArmのサイトで購入するのが無難です。alibaba などでも買えるようですが、必要なものを組み合わせるのが大変だし、値段も差はないようなので。ただし、ご本家からの購入の場合、決済はPayPalだけなので、カードを登録しておく必要があります。
また、当然、中国から郵送することになりますので、結構時間がかかります。僕の場合、送料の安い中国郵便を使ったので、2週間以上かかりました。まあ、送料込みの価格が45ドルなので、激安(日本製だったらケースだけでその位しそうです)。あまり贅沢は言えないですが。
さて、ディスプレイ関連のチップ抜きの構成なので、音に期待しましたが、残念ながら、ちょっと荒い音ですね。USB接続で音源と繋ぐという構成では使えないという感じです。NanoPI NEOの音楽サーバとしての使い方については、このページ(NanoPi-NEOとMPDとOLEDで音楽再生サーバ)に情報があります。こちらでも音の評価に関しては厳しめですね。lightMPDのNEO2版やdonuts.shop73 さんのUPnP版で試しましたがr-piなどと比較すると差はありますね。タンデム構成のアダプターとしては何とか使えるかもしれませんが。
というわけで、nasとして使うことにしました。
写真は僕のSOC空箱コレクションです。BBB×2、BBG×2、r-pi_1、r-pi_2、r-pi_3、NanoPI_NEO2となります。手持ちのSOCは、これ以外に、apu1×2、apu2×1、cubox、玄箱、白箱、Smart TV Box となるから、総計15台。病膏肓ですね(^^;;;(^^;;;。
下の写真は僕のnasステーション、二組のnasが稼働しています。一つ目は奥にあるatom機を使ったnasで、こちらが現用、二つ目が手前のNanoPI NEO2 nasキットで、こちらはバックアップ用に使っています。
NanoPI NEO2 nasキットですが、ケースと取り付けネジなど関連する部品を除くと、nas用基板とNanoPI NEO用のヒートシンクが付いてきます。僕はこのページから NanoPi NEO2 with Pin Headers Soldered (+$15.99) を組み合わせ購入しました。NanoPi NEO を自力で調達する場合は、この「with Pin Headers Soldered」という部分も自力で行う必要がありますので、結構大変かなと思います(中級者クラスのハンダの腕が必要です)。
あと、この基板を動かすにはCR2032ボタン電池が必要ですので、別途容易しておく必要があります。パソコン用によく使う電池なので、僕は手持ちがありました。
NanoPI NEO2 についてはこのページに詳しい解説があります。これで見るとこの機種はnas用にネットワークを1G_LAN、CPUを64Bit対応させたものという感じですね。
1-bay NAS Dock についてはこのページに詳しい解説があります。ハード、ソフトの設定については参考になると思います。ただし、古い版(v1.0、現在はv1.2)の紹介のようでボタン電池に関する記載はないですね。
基板の右半分は2.5インチディスクを接続するためのドック部分となります。
NanoPI NEO2のOSについてはこのページ(official-ROMs shared by “John Smith”)にイメージがあります。nanopi-neo2_debian-nas-jessie_4.11.2_20170630.img.zip というのがありますので、nas用にはこれを使えばいいようです。
同じページに nanopi-neo2_ubuntu-core-xenial_4.11.2_20170630.img.zip というのもあるのですが、これはどういう目的に使うのですかね。多分、ロボット用でしょう。音楽用に使ったらどんなものなのか、ちょっと気になります。
ちなみに2の付かない NanoPI NEO のOSについてはこのページにofficial-ROMsにイメージがありますが、nas用のものはありません。よくわかりませんが、NanoPI NEO を NAS Dock と使うことを想定していないということですかね。
この公式のnas用イメージはsambaとnfsが最初から組み込まれていますので、公開したいディレクトリを指定するだけで、ファイルサーバとして使うことが出来ます。「タヌキでも使えるlinux版nasサーバ」という感じですね。お勧めです。
実はセッティングで一番苦労したのはルートのパスワードを捜すこと。login=root,password=fa なのですね。fa というのは friendly arm からとったということでしょうか。
初期設定で困ったのはnanoが入っていなかったこと。まあ、イントールすればいいのですが。
apt-get update apt-get install nano nano /etc/fstab /dev/sda1 /sda ext4 defaults 0 0 /dev/sdb1 /sdb ext4 defaults 0 0 mkdir /sda mkdir /sdb
nasとしてマウントしているディスクは、sdaがcd用、sdbがsacd用です。
nfsの設定は /etc/exports の設定だけです。僕の設定例は
nano /etc/exports /sda voyage.local(rw,sync,no_subtree_check) /sdb voyage.local(rw,sync,no_subtree_check)
です。voyage.localというのは現用のnasでこちらからバックアップが見えると便利なので、このように設定しています。
次にsamba設定。
nano /etc/samba/smb.conf hosts allow = 192.168.0. server string = %h server guest account = root client lanman auth = yes client ntlmv2 auth = no client use spnego = no [CD] path = /sda/CD writable = yes guest ok = yes [sacd] path = /sdb/sacd writable = yes guest ok = yes
最初の2行と次の4行はディレクトリの公開とは関係ありませんが、僕の環境ではこの方が便利なので設定しています。
最初の2行は[global]セクション開始直後に、次の4行は Authentication、map to guest = bad user の直後に入れてあります。
ついでにhost名を変更。
root@FriendlyELEC:~# nano /etc/hosts 127.0.0.1 localhost.localdomain localhost 127.0.1.1 fa root@FriendlyELEC:~# nano /etc/hostname fa
としました。これでパスワードを忘れるということはなくなるでしょう(^^;;;。
2019.10.11追記
最新のイメージはnanopi-neo2_debian-nas-jessie_4.14.0_20171208.imgに変わっていますが古いので、apt updateがエラーになるようです。ここに対応方法が書かれています(ソースリストの変更と最後のチェックレスにするコマンドを行っておく必要があります)。
Minimserverを動かす方法は上記update後、JAVAを入れ、MinimServerを展開すればいいです。詳しくはこちら。
(PC_Audio) 2017/09/02
RaspberryPIをUPnP化させる(6)
MinimSerdverのRaspberryPIへのインストールについてはMinimSerdverご本家のサイトに情報があります。この情報は raspbian 対応のものです。丁寧に書かれていますので、os が raspbian ならその通りやれば、問題なくインストールできます。
このインストール方法の特徴はヘッドレスであること。WindowsのようにGUIではなく、コンソールモードで全てを行う必要があります。この方法をご紹介します。
raspbian lite に MinimSerdver をインストール
Javaバージョンの確認
root@raspberrypi:~# java -version java version "1.7.0_111" OpenJDK Runtime Environment (IcedTea 2.6.7) (7u111-2.6.7-1~deb8u1) OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)
javaがインストール済なら、このようなメッセージが出ますので、javaのバージョンを確認します。build 1.7.0_40であれば、javaは問題なく使えます。
もし、javaがインストールされていないようであれば、
root@raspberrypi:~# apt-get install oracle-java8-jdk
でインストールする必要があります。
MinimSerdverのインストール
ご本家のこのページから Linux ARM hard floatと表示されている MinimServer-0.8.4-linux-armhf.tar.gz と MinimWatch-0.8.4-linux-armhf.tar.gz をダウンロード。共用ディレクトリにコピーしておきます。
root@raspberrypi:~# cp /music/MinimServer-0.8.4-linux-armhf.tar.gz ./ root@raspberrypi:~# cp /music/MinimWatch-0.8.4-linux-armhf.tar.gz ./ root@raspberrypi:~# tar xf MinimServer-0.8.4-linux-armhf.tar.gz root@raspberrypi:~# ls minimserver MinimWatch-0.8.4-linux-armhf.tar.gz MinimServer-0.8.4-linux-armhf.tar.gz
これでインストールは完了です。簡単ですね。
MinimSerdverの設定と使い方
次に、MinimServerのセットアップ。これも簡単です。
root@raspberrypi:~# minimserver/bin/setup Migrating autostart configuration MinimServer desktop integration is not available MinimServer automatic startup is enabled Do you want to change these settings (y/n)? n
起動時の自動立ち上げは指定し、デスクトップは使わないので、ディフォルトの内容を変更する必要はありません。
最後に MinimServerの実行です。
root@raspberrypi:~# minimserver/bin/startc MinimServer 0.8.4, Copyright (c) 2012-2016 Simon Nash. All rights reserved. autoUpdate: installed package 'minimserver-0.8-update-103' Enter command (? for help): autoUpdate: relaunching runtime >MinimServer 0.8.4 update 103, Copyright (c) 2012-2017 Simon Nash. All rights reserved. starting MinimServer[raspberrypi] Enter command (? for help): >Enter content directory, or null to continue: #/mnt/sdc/CD >
音楽用ディレクトリを複数指定する場合は
prop contentDir={/mnt/sdb/sacd}{/mnt/sdc/CD}
と指定できます。 またストリーム内容の指定は
prop stream.transcode=flac:wav, dff:dopwav, dsf:dopwav
という具合に指定できます。MinimStreamerの情報についてはここを参照。
操作方法は「?」で知ることができます。
Enter command (? for help): >? Commands: rescan restarts the media server and rescans the media library props shows current properties for the media server prop n=v sets media server property name n to value v about shows version and status information for the media server stop stops the media server without exiting the application restart restarts the stopped or running media server exit exits the media server application packages shows installed packages (with status) and available packages install p installs package p remove p removes installed package p undo p undoes a pending change to installed package p relaunch relaunches the runtime and applies pending package changes modules shows installed modules (with status) updates shows available updates for installed packages sleep t delays execution for t seconds (can be useful for scripting) help (or ?) displays this information >
デーモンとして起動するには
minimserver/bin/startd
となります。
この時、MinimWatchを別のコンピュータにインストールして状態をモニターすることができます。詳細はこのページ(linux)やこのページ(r-pi)にあります。
エラーが発生した場合
nano minimserver/data/minimserver.log
でエラーログを見ることができます。
raspbian liteですが、最新版のダウンロードページではSTRETCH版しかダウンロード出来ません。jessie版をダウンロードしたいよという場合はアーカイブサイトを使う必要があります。サイトのアドレスはこちら。8月からstretch版に変わったようですね。多少内容も変わっているようだから、また当面「混乱の源」だなぁ(^^;;;。
p.s. 2021/03/20
Marc Wilsonさんから以下のリンクに有用な情報があるよという親切なメールを頂戴しました。感謝して、引用しておきます。
Also, if you’re open to it, perhaps you could add a link to our guide as well please? It has some useful information about Raspberry Pi OS as well as some interesting history.? Here’s the link - https://www.pcwdld.com/raspbian-raspberry-pi-os-guide Thanks,
ここからリンク先をリンクしてあります。
arch linux でMinimserver
raspbian lite と大きくことなるのは javaのインストールに関してです。
arch linux へ java をインストールする方法については、このページに詳しく記述されています。ところがその通りやってもうまくいきません。まあ、arch の場合よくあることですが(^^;;;。
何故か上記リンク先のパッケージ名ではインストールできないのですよね。この程度めげていては、arch linux を使うことなんて出来ません。自力でなんとかすることを考えます。助かったのはMinimServerご本家のサイトのインストール情報が充実していたこと。
MinimServerh は JAVAで作成されているので、マルチプラットフォームな対応がされています。具体的には Windows、Mac、Linux、各種NASなどで同じように動くことができます。但し、その時、javaが動く環境であればという条件が付きます。これが難所なのですよね。
マルチプラットフォームのインストールに関してご本家のこのページで解説されています。Linuxでのイントール方法についてはこのページに丁寧な解説があります。リンク先を読むと、要するにJavaが動けば、なんとかなるということと、Java環境を動かす奥義秘伝が詳しく書かれています。
After downloading the Java SE Embedded .tar.gz file, use tar xf to unpack its contents to a local directory. After doing this, create a link to the java executable from a location on the path. The usual location for this link is the /usr/local/bin directory. For example, if you have unpacked the .tar.gz download for Java 7 update 45 into the directory /usr/local/ejre, you can create this link by using the following command: ln -s /usr/local/ejre/ejre1.7.0_45/bin/java /usr/local/bin
「なるほど。r-pi archでjavaを無理矢理動かせば、なんとかなるのね」と分かる。
いろいろ検索して、このJava(表「Java SE Development Kit 8u144」の Linux ARM 32 Hard Float ABI)を使えば、何とかなりそうだなと分かりました。
やってみました。
[root@alarmpi ~]# cp /music/sdd/CD/jdk-8u144-linux-arm32-vfp-hflt.tar.gz ./ [root@alarmpi ~]# tar xf jdk-8u144-linux-arm32-vfp-hflt.tar.gz [root@alarmpi ~]# ln -s /root/jdk1.8.0_144/jre/bin/java /usr/local/bin
大成功でした。
後は、raspbianと同じです。コマンドだけ紹介。
[root@alarmpi ~]# tar xf MinimServer-0.8.4-linux-armhf.tar.gz [root@alarmpi ~]# minimserver/bin/setup MinimServer desktop integration is not available MinimServer automatic startup is disabled Do you want to change these settings (y/n)? y Enable automatic startup for MinimServer (y/n)? y Created symlink /etc/systemd/system/multi-user.target.wants/minimserver.service -> /usr/lib/systemd/system/minimserver.service. MinimServer automatic startup has been enabled [root@alarmpi ~]# minimserver/bin/setup MinimServer desktop integration is not available MinimServer automatic startup is enabled Do you want to change these settings (y/n)? n [root@alarmpi ~]# minimserver/bin/startc MinimServer 0.8.4, Copyright (c) 2012-2016 Simon Nash. All rights reserved. autoUpdate: installed package 'minimserver-0.8-update-103' Enter command (? for help): autoUpdate: relaunching runtime >MinimServer 0.8.4 update 103, Copyright (c) 2012-2017 Simon Nash. All rights re served. starting MinimServer[alarmpi] Enter command (? for help): >Enter content directory, or null to continue: #/mymusic MinimServer[alarmpi] is running restarting MinimServer[alarmpi] starting MinimServer[alarmpi] MinimServer[alarmpi] is running >
となります。
p.s. 二回続けて、ただただlinuxコマンドの羅列。あきれはた方も多いかと思いますが、ここまでお付き合い頂いき、恐縮です。
まあ、言い訳をすると、このあたりの情報を知っているかどうかが UPnP再生の世界と付き合うポイントなのですよね。このページ、完全に自分の備忘録替わりですが、皆様のお役にたつことをお祈りします。
(PC_Audio) 2017/08/26
RaspberryPIをUPnP化させる(5)
「DIY Music Server with Arch Linux」のやり方に倣って、minidlnaサーバと vsftpdサーバを入れてみました。
polipo、upmpdcli と異なり、こちらは pacmanで普通にインストールできます。
pacman -S minidlna
設定ファイルを作成します。
nano /etc/minidlna.conf
楽をするために、apu版の lightMPD upnpgw をそのまま使います。
port=8200 #network_interface=eth0 #user=jmaggard # + "A" for audio (eg. media_dir=A,/home/jmaggard/Music) media_dir=A,/var/music #merge_media_dirs=no friendly_name=My DLNA Server db_dir=/var/cache/minidlna log_dir=/var/log log_level=off album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg inotify=yes enable_tivo=no strict_dlna=no #presentation_url=http://www.mylan/index.php notify_interval=900 serial=12345678 model_number=1 #minissdpdsocket=/var/run/minissdpd.sock root_container=M #force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title #max_connections=50
音楽用ディレクトリを作成します。 また、問題を避けるため、ユーザタイプをrootにしておきます。
mkdir /var/mymusic useradd -G root minidlnad
systemdの設定ファイルはインストールされていますので起動だけですみます。
systemctl enable minidlna.service systemctl start minidlna.service
次に、試しにと考え、ftpをインストールしてみました。
pacman -S vsftpd
設定ファイルは「DIY Music Server with Arch Linux」の内容をパクります。
nano /etc/vsftpd.conf anonymous_enable=YES local_enable=NO write_enable=YES anonymous_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_root=/music anon_max_rate=2048000 xferlog_enable=YES listen=YES chown_uploads=YES chown_username=ftp chown_upload_mode=0777 allow_writeable_chroot=YES
systemdの設定ファイルがインストールされるのはminidlnaといっしょです。/music ディレクトリのchmodが必要になります。
systemctl enable vsftpd.service systemctl start vsftpd.service chmod 777 /music
Windows 環境からのアクセスは適当なFTPクライアントプログラムを使うことになります。FFFTPを使ってアクセスしてみました。
当たり前ですが、普通にアクセスできます。使い勝手はクライアントの機能次第ですが、FFFTPの場合はミラリーング同期が簡単にとれるのは便利です。
だだ、Windows環境下で使うのであれば、やっばりSambaのファイル共用機能を使うのが便利ですね。というわけで、インストールしてみます。
pacman -S samba
次に設定ファイルの作成。
nano /etc/samba/smb.conf [global] workgroup = WORKGROUP hosts allow = 192.168.0. server string = %h server # wins support = no dns proxy = no log file = /var/log/samba/log.%m max log size = 1000 syslog = 0 panic action = /usr/share/samba/panic-action %d server role = standalone server passdb backend = tdbsam obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdat$ pam password change = yes map to guest = bad user guest account = root client lanman auth = yes client ntlmv2 auth = no client use spnego = no usershare allow guests = yes [homes] comment = Home Directories browseable = no read only = yes create mask = 0700 directory mask = 0700 valid users = %S #[public] # comment = Public Space for Everyone # path = /mnt # guest ok = yes # browseable = yes # public = yes # writable = yes # hosts allow = 192.168.0. # #create mask = 0600 # #directory mask = 0700 [music] path = /music guest ok = yes writable = yes guest ok = yes
こちらはユーザ登録する必要があります。
pdbedit -a root
smbd、nmbdサービスを開始します。
systemctl enable smbd.service systemctl enable nmbd.service systemctl start smbd.service systemctl start nmbd.service
結局、dlnaサーバとsambaサーバをBBB/BBG + arch linux 環境に同居させたということになります。
こっちの方が僕の環境では便利ですね。
ここまでやったら、「毒食わば皿まで」(^^;;;。MinimServerも同居させてみますかね。長くなったので、次回にご紹介します。
(PC_Audio) 2017/08/19
DC-ARROW 七転八倒(2)
写真は完成したDC-ARROEを横(裏)から写していますが、放熱器の下から三分の一位のところに変な線がはってあるのが分かりますか。これが最初の躓きの石でした。という話はすぐ後で。
部品の取り付け順序は、背の低いものから、高いものの順に取り付けていくのが定石です。従って、
抵抗 -> ショットキーダイオード ->ツェナーダイオード -> 可変抵抗 -> LED -> USBコネクター -> ターミナルブロックin/out -> 470μFコンデンサー -> tr1(2SC2240)トランジスタ -> 4700μFコンデンサー -> tr2(2SC5100)トランジスタ/ヒートシンク
これが最初の躓きの石でした。
「どこが」といういうと、最後のトランジスタ/ヒートシンクとその前の4700μFコンデンサーを逆にすべきでした。写真でご覧になれるように、放熱器とtr2を密着させるためのネジは放熱器側からトランジスタ側にねじ込んでいます。これはネジ穴の前に4700μFコンデンサーがあるため、放熱器側からネジを差し込むしかなかったためです。ところが、これが逆方向からの接続になるため、しっかり固定できませんでした。放熱器の下から三分の一位にある線はこの対策でした。
仕方がないので、最初の写真に写っているように、無理矢理、手元にあったエナメル線でトランジスタと放熱器を固定しました。
従って、部品の正しい取り付け順序は
抵抗 -> ショットキーダイオード -> ツェナーダイオード -> 可変抵抗 -> LED -> USBコネクター -> ターミナルブロックin/out -> 470μFコンデンサー -> tr1(2SC2240)トランジスタ -> tr2(2SC5100)トランジスタ/ヒートシンク -> 4700μFコンデンサー
となります。
しかし、その後、二号機を作った時に分かったのですが、tr2 -> c1/c2コンデンサー という順番でも差し込み辛いのは同じですね。結局、tr2の足の部分を折り戻して差し込んだのですが、こちらが正解のようです。となると順番はどちらでも良さそうです。
足の長い部品のハンダ付けはそのまま差し込み、足を適当な長さに調整し、折り曲げ、その状態でハンダしたあと、足の余分な部分を切るというやり方をしました。
抵抗をハンダ付けした時のこれが表側。
これが裏側。
この状態で、基板のランドというリード線を通す部分に、半田鏝を寝かせかげんにランドにあて、加熱しながら、ハンダをこて先に付け、リード線とランドを接続します。
同じ要領でショットキーダイオードを接続します。
この時、ハンダを流し込むのに苦労したので、半田鏝を変えることに気が付くべきでした。ハンダを追加することで(後で知ったのですが「追いハンダ」というらしいです)なんとか乗り切ったのが、後の破局につながります。こういう穴の大きい場所は電子機器工作用の鏝を使っていましたが、オーディオ用の容量の大きいものを使うべきでした。その後、大型のコンデンサー、大型のトランジスタなどを付ける時も同じような違和感を感じました。しかし、前述のコンデンサと大型のトランジスタの取り付け順序を間違えて、トラブったので、そちらの対応に追われ、こちらの問題は深く考えないで、ハンダ付けを完了させてしまいました。
ここからが破局です。「バンザイ、ハンダ付けが終わった」とよろこんだのも束の間、トランスの黄色(+)と灰色(-)の線を入力側端子ブロックに接続。電源をいれてもLEDが点灯しません。テスターを出力側端子ブロックに接続したがDCが出ている様子はない。「あらら、第二のトラブルだなぁ」。
こういう時はあせっても仕方がないので、のんびりかまえる。とりあえず、回路図を眺める(読むなどという高級なことはできないので^^;;;)。上段の線がプラス、下段の線がグラウンドだからダイオードで整流したあとの各ボイントのDCをあたれば、どこで断線しているか分かるなと考える。
ダイオードで整流直後の信号が確認できるホールがあるので、これで確認。8.4vでした。ここまでは OK。次に大型コンデンサーの直後を確認する。0vでした(^^;;;。「なるほど、このコンデンサ、ちょっとグラグラしているから、多分接触不良ね。」と判断。追いハンダする。
今度はコンデンサに触ってもグラグラしないレベルになったので、OKだろうと考え、電源を入れてみる。
以前、LEDが点きませんねぇ。テスターでコンデンサーの先をあたってみる。8.9v出てますね。しょうがないなぁ。夜も遅くなったので、この日はここでお終い。
翌日。部品を付けた基板をひっくり返していたら、突然、LEDが点灯しました。「あれれれ」。テスターで出力端子ブロックをあたってみる。ちゃんと5v出ていますね。ここで、もう一度基板をひっくり返したら点灯しなくなる。この状態で部品を触ってみて、大型のトランジスタが怪しい(接触不良)と分かる。
調べたら、こんな記事(話題の「DC-ARROW」をつくってみました)がありました。「なるほどねぇ。半田鏝をオーディオ用のものに交換。 大型トランジスタのBCEホールを徹底的に追いハンダしました。ついでに、USB端子の取り付け部分ももグラグラしているので、ハンダしておきます。どちらもがっちりしました。
再度、電源を入れる。今度は綺麗にLEDが点灯。5v出力されるようになりました。
トロイダルトランスと基板の接続ですが、一つのトランスから二系統出力されていて、黄色(+)と灰色(-)か橙(+)と白(-)となっているようです。このあたりはたかじんさんのサイトの図と違いますので、ご注意ください。
制作に必要な道具ですが、写真は制作中のテーブル上です。ここに使った道具のほとんどが置いてありますね。
必須なもの
- 半田鏝(オーディオ用と電子回路用の二本あると便利)
- 半田鏝置きと鏝先の掃除用のスポンジ
- ハンダ(精密プリント基板用というものを使っています。オーディオ用はハンダの難度が高いです)
- フラックス
- ネジ回し(十字型のものとストレートのもの、何種類か必要です)
- ニッバー(部品の足(鉄線)を切れるもの)
- テスター(デジタルが便利です)
あると便利なもの
- 虫眼鏡(僕の場合、抵抗のカラーコードを読むのに必須です)
- 拡大鏡(写真に写っているものです。細かい部分のハンダには便利ですよ)
- 100円ライター(たばこは吸いませんが、ケーブルの切断用に使っています)
この基板、最初にご紹介したように手持ちのDACをワンランクアップする位の威力があります。ハンダ付けの難度はちょっと高めですが、ここまで書いてきたような方法で対応は可能ですので、お勧めします。よろしければ、挑戦してみませんか。
紹介し忘れましたが、このサイトの作者はこの基板を使って4台制作されいます。この制作記はとても参考になるので、リンクしておきました。
p.s. とても気に入ったので、早速二号機を制作してみました。前回の記事に書いたヨドバシのサイトのキットを注文。結局コンデンサーが違うだけで、それ以外は全く同じですね。一号機がNichiconのKAシリーズなのに対して、二号機の方は東信工業のUSTJとなっています。比較試聴してみましたが、違いは分かりませんでした。
同じものは共立のサイトでも販売しています。差はヨドバシだとポイントが付くことと送料が無料なので、電源が不要ならちょっと安くなることですね。
コンデンサーの違いによる音の差は僅かで、どちらでも良さそうです。
三号機は部品を買い集める方式に挑戦する予定です。
(PC_Audio) 2017/08/11
DC-ARROW 七転八倒(1)
この記事、最初に予定していたタイトルは「サルでも作れる DC-ARROW」でした(たかじんさん、ゴメンナサイ)。しかし、基板ベースのハードの世界、そんなに甘くはない。というわけで「DC-ARROW 七転八倒」に変えることとなりました。何に七転八倒したかは後で詳しくご紹介することにして、まず、「DC-ARROWって何 ? 」という話から。
DC-ARROWとは new_western_elec のたかじんさんが設計された Raspberry-PI用の電源基板です。
DC-ARROWはトランスから出力されるAC(6.3v)をそのまま基板へ入れ、整流して、RaspberryPiやBBB/BBGのDC5Vへ電源を供給するための電源基板です。安定化回路をディスクリートで組んであり、NFBを使わない、いわゆるnon-NFB回路とすることにより、負荷変動によるレスポンスの遅れを回避し、安定した動作を確保している。このため、2SC5100という強力なパワートランジスタを使い回路を構成し、出力インピーダンスを大幅に低減させることにより、安定したnon-NFB動作を実現したということのようです。
このあたりの詳しい解説は new_western_elec このページにあります。
まあ、理屈はよく分からないのですが(^^;;;、結果は素晴らしい。r-piが真空管アンプを使ったような温かい、きめの細かいそして落ち着いた音に変わります。
オーディオ関連のデジタル機器で電源が重要ということは良く承知していました。また過去電源を変えて音を改良するということはさんざんやってきたつもりです。しかし、電源を変えてこれだけ効果的だったのは初めてです。アンプをワンランク上のものにした位の効果があります。ビックリしましたね。
デジタル機器の電源はスイッチング方式のものが一般的ですが、安物のオーディオ用でないものはノイズが多く、音がきつくなり、あれた感じになりとてもお勧め出来ません。オーディオ用に対策したものもありますが、完全にはノイズをとりきることが出来ないので、音がきつくなる感じをゼロにすることはなかなか難しいようです。スイッチング電源に対する対策として、僕が一番効果的と思っているのはifi社のiPurifierというフィルターです。ちょっと高価(本格的な電源と比較すれば、たいしたことはありません)ですが、スイッチングノイズを減らし、落ち着いた音にするという意味ではとても良く出来た製品だと思います。
トランス方式のものを使うという対策もあります。 これも効果的ですが、限界があります。限界とはおとなしくなりすぎて、音楽が持っていた精気みたなものが失われしまうことがあるからです。何種類かのトランス型電源を持っていますが、Linuxボード(apuやBBB/BBG)に使った時に効果的という製品経験がありません。唯一の例外はYAMAHAの12vのトランス型電源(PA-6)です。これはライブミュージシャンに愛用されるだけあって、音楽の迫力や雰囲気はそのまま残しながら、ノイズだけ低減させるという感じです。
というわけで、僕はBBやr-piはiPurifierを、apuはYAMAHAを使うという方法で対応していました。
ここに DC-ARROW が登場。r-pi、bbなどの5v電源入力のものはこれで決まりですね。圧倒的な差があると思いました。
この電源はトランス方式の弱点であるおとなしくなりすぎてしまうという点が解消され、生き生きと音楽を鳴らしてくれます。ピアノの強打、打楽器など従来のトランス方式ではどうしても満足出来なかった音が見事に再生されます。SoulNote D1(r-pi)、aitlabo DAC(BBB+BBG)、KORG DS-DAC-10R(r-pi)、linuxcom B3D-A4495(BBB+BBG) の四つの環境で試してみましたが、どの環境でもオーディオ機器をワンランクアップさせたような効果がありました。一台だけでは不足しそうなので、早速二台目を注文してしまいました。
さて、この基板の作り方です。new_western_elec このページに作者たかじんさんの解説があります。
このページは分かりやすく書かれていると思いますが、初心者に基板を電源に完成させるためのものではありません。明記されていませんが、「作り方は、部品数も少なく、簡単な回路なので、部品表、回路図、外形図をみれば分かるでしょ」というスタンスで書かれています。確かに、このようなキットを制作した経験があれば、部品表、回路図、外形図をみれば、作り方は分かります。僕の場合もそうで、ハンダ付けの腕前はサル以下と自負して(?)いますが、電源基板を使った工作の経験はあったので、部品表、回路図、外形図で作り方は分かりました。
ということで、まったくこのような基板を使って電子機器を作ったことがないという初心者の方のために、ここから少し、部品の集め方、見分け方、付け方、ハンダ付けの仕方、回路図の解説などを行いたいと思います。ハード初心者の身、無謀の極みではありますが(^^;;;。
まず、部品の集め方です。これは簡単でこのサイト(共立)このページで基板、部品、電源をまとめて入手することをお勧めします(僕もそうしました)。部品表をみながら、部品ショップで必要なものを選ぶということも可能です。そちらの方が安上がりですが、初心者には大変です。部品を間違えて動かないというような悲劇を避けるには、リンク先を選ぶことが賢明です。あと、ここ(ヨドバシ)でも基板と部品をセットで販売しているようです。内容は共立と同じような感じですが、電源は選べないので、別に準備する必要があります。僕は共立に注文した一台目が気に入ったので、二台目をこちらから注文しました。部品が多少違うようです。それで音がどう変わるか興味があったので。
写真は共立ショップの電源を除く部品の全てです。上段左から抵抗(5本)、ダイオード(5本)、可変抵抗、LED、USB端子、入出力端子ブロック、コンデンサー(2種、4個)。下段左から、トランジスター、ヒートシンク、絶縁シート、ヒートシンク用ネジ、電圧計、スペンサー/とめネジ。ダイオードは四本のショットキーバリアダイオード と一本のツェナーダイオードからなります。トランジスターは2SC2240と2SC5100の二種です。
この構成で特徴的なのは普通の安定化電源回路だと入っている三端子レギュレータがないこと。代わりにトランジスターは2SC2240と2SC5100を使うということらしいです。これが non-NFB回路を構成しているということですかね。
回路図は極めてシンプルです。6.3v ACをダイオードとコンデンサーを使って、DCに変換し、そのDCの負荷変動を2SC2240と2SC5100で吸収するという仕掛けのようです。
さて、写真の部品の見分け方ですが、初心者からみると基板上で部品をどう配置するかに戸惑うことになります。この時、問題になるのは部品の方向性(極性)です。これを間違えると動かなくなるので。
方向性(極性)がある部品はダイオード、コンデンサー、トランジスター、LEDです。ダイオードは印字(マーク)のある方がカソードで(ない方はアノードでアノード側からカソード側に信号が流れます)、コンデンサー、LEDは足の長い方がプラス短い方がマイナスとなります。それぞれの情報についてはネット上にあふれています。参考までに僕が使った情報をご紹介します。
以上の情報を組み合わせて読めば部品をどのように取り付ければよいか分かると思います。ネットにない情報をふたつ。
ダイオードは写真にあるようにダイオードは白と赤の紙ではさまれています。この赤側がカソード、白側がアノードとなります。印字情報が曖昧な場合、方向性はこの情報で知ることもできます(ツェナーダイオードについてはこちらで配置を決めました)。
また回路図は上側がプラス、下側がマイナスとなります。 なお、コンデンサ、LEDは足の長い方がプラスですが、切ってしまうと分からなくなりますので、ご注意ください。
抵抗は方向性(極性)はありませんが、値が3種類(150Ω×3、2.2KΩ×1、1KΩ×1)あります。共立ショップの部品では1KΩ×1抵抗はカラーコード表示の一般の抵抗を使っていますが、150Ω×3、2.2KΩ×1はDALEのオーディオ用金被抵抗を使っています。この抵抗はカラーコード表示されていませんので、容量を知るには印字文字を読む必要があります。かなり細かい文字なので虫眼鏡が必須です。
500Ωの可変抵抗(VR1)については方向性がありますが、これをどう取り付けるかは形状より明らかでしょう。
トランジスタも当然方向性があります。こちらはエミッタ(E)、ベース(B)、コレクタ(C)ということになります。通常、トランジスタの方向性についてはデータシートに記載がありますので、これを調べるのが基本です。
tr2(2SC5100)については外形図にBCEの表示がありますので、これで方向性は分かります。tr1(2SC2240)は外形図に形の表示があり、トランジスタの平らな面が右向きと分かります。回路図からもtr1のエミッタがtr2のベースに入っていますので、これでも方法性は分かります。
以上解説した以外の部品については、どういう方向に置くかは形より明らかでしょうから、説明は省略しますが、一つだけ。入出力端子ブロックですが、線を差す部分が外側となります。ついうっかりして逆に付けちゃうということがよくあるのですよね。経験者は語るです(~~;;;)。
さて、次は部品の取り付けです。ここから、七転八倒の物語に入るのですが、長くなったので、次回。って典型的tease作戦ですね。何に七転八倒したか、ヒントとなる写真を次に。
(PC_Audio) 2017/08/05
RaspberryPIをUPnP化させる(4)
前回に続き、起動方法と設定ファイルを作成について解説します。これでスタンドアロン型のupnpシステムが出来上がります。
起動方法をどうするかですが、rc.localを使い、mpd、polipo、upmpdcli をまとめて処理するが分かりやすくて、簡単です。
rc-localを使うには、systemd に rc-local.service を登録する必要があります。
nano /usr/lib/systemd/system/rc-local.service
rc-local.service に以下の内容を設定します。
[Unit] Description=/etc/rc.local Compatibility Wants=network.target [Service] Type=oneshot ExecStart=/etc/rc.local TimeoutSec=0 #StandardInput=tty RemainAfterExit=yes [Install] WantedBy=multi-user.target
これで起動時に rc-local が実行されるようになります。
次に rc.local本体の内容です。
useradd -G root polipo useradd -G root upmpdcli nano /etc/rc.local
polipo と upmpdcli の起動方法は以下の通りです。それぞれ設定(conf)ファイルを指定します。
#!/bin/bash /usr/local/bin/polipo -c /etc/polipo.conf & sleep 1 upmpdcli -D -c /etc/upmpdcli.conf exit 0
rc.localを実行可能にして、起動を確認します。
chmod 777 /etc/rc.local 起動の確認 systemctl --system daemon-reload systemctl enable rc-local.service systemctl start rc-local.service systemctl status rc-local.service
polipo.conf と upmpdcli.conf の内容は boticized lightMPD のスタンドアロンモードといっしょです。
mkdir /var/cache/polipo/ nano /etc/polipo.conf
以下の内容を、新規ファイルに書き込みます。
### for standalone from here allowedClients=127.0.0.1 chunkHighMark=671088640 chunkLowMark=100663296 chunkCriticalMark=536870912 objectHighMark=256 # dnsQueryIPv6 = no cacheIsShared = false dnsUseGethostbyname = yes disableConfiguration = true disableIndexing = true disableLocalInterface = true # dnsNameServer = "192.168.0.1" diskCacheRoot = "/var/cache/polipo/" forbiddenFile = "forbidden"
こちらはインストールで作成されたファイルに書き込みます。
nano /etc/upmpdcli.conf
以下の内容をラジオ曲の設定の前に放り込みます。
upnpiface=eth0 mpdhost=localhost #mpdhost=10.0.0.2 mpdport=6600 friendlyname=botic ohproductroom=botic openhome=1 ohmetapersist=1 logfilename=/var/log/upmpdcli.log loglevel=3 iconpath = /var/lightMPD/bin/miero.png
以下は補足です。
Arch linux の場合、ユーザとユーザグループの登録やsudoの使い方(ルートユーザのなり方)に関して、他のディストリビューションとちょっと違うようなので、戸惑いました。参考にしたリンクを挙げておきます。
rc-localを使わない方法もとれそうです。その場合の upmpdcli.service と
nano /usr/lib/systemd/system/upmpdcli.service [Unit] Description=UPnP Renderer front-end to MPD After=network.target [Service] Type=simple # Note: if start fails check with "systemctl status upmpdcli" ExecStart=/usr/bin/upmpdcli -c /etc/upmpdcli.conf # For some reason, the first start of libupnp fails. Probably this should # be started later in the start sequence, but I don't know how. Retry a bit # later. Restart=always RestartSec=1min [Install] WantedBy=multi-user.target
polipo.serviceです。
nano /usr/lib/systemd/system/polipo.service [Unit] Description=Polipo Proxy Server After=network.target [Service] ExecStart=/usr/local/bin/polipo -c /etc/polipo.conf User=polipo PrivateDevices=yes [Install] WantedBy=multi-user.target 起動 systemctl --system daemon-reload systemctl enable polipo.service systemctl enable upmpdcli.service useradd -G root polipo useradd -G root upmpdcli reboot
プレイバック中のtopです。他のディストリビューションと比較すると、とてもショッキングレッドですが、mpd、upmpdcli、polipo など正しく動いているようですね。
音はスタンドアロンシステムとしては十分なレベルだと思います。donuts.shop73 さんのr-pi upnp対応システムと比較しても遜色のないレベルで鳴りますので、これなら十分オーディオ用ケースに入ったr-piに使えそうです。
p.s. 前回の記事で libupnppとupmpdcli のgit ファイルの在り処を github.com と紹介しましたが、変わったようですね。
git clone https://@opensourceprojects.eu/git/p/libupnpp/code libupnpp-code git clone https://@opensourceprojects.eu/git/p/upmpdcli/code upmpdcli-code
が最新のようです。まあ github側に「移動したよ」という案内はあるので、分かりますが。
(PC_Audio) 2017/07/29
RaspberryPIをUPnP化させる(3)
ここからが本題です。
mpdが動いているシステムをupnp化させるソフトとしてはupmpdcliがあります。従って、これをインストールすればmpdシステムはupnp化されます。このソフトはメイジャーではないので、グローバルなRaspberryPIといえども簡単にインストールすることが出来ません。arch linux,raspbianともにビルドからインストールする必要があります。
また、lightMPDの場合、upnp化はpolipoというプロキシサーバーと組み合わせて使い、音楽データをキャッシュすることで、より高音質の再生を狙っています。これも顰みならうことにします。ただし、polipoもプロキシサーバとしてはマイナーなので、インストールはビルドからのみとなります。 折角、RaspberryPIというメイジャーなハードを使っているのに、例によってマイナー路線、茨の道が待ち受けていますが、案外簡単です。是非チャレンジしてみましょう。
実はハードはr-piでなく、BBB/BBGでもやり方は同じです。未確認ですが、moctさんの公開されている Boticized arch linux を使って、upnp化させることが出来るかもしれません。
osが arch linuxか、raspbianかでインストールしておく必要のあるパッケージなど多少の差があります。以下、arch linuxをベースに記述し、違うところだけraspbianではどうなるか補足します。
本論に入る前に周辺のリンク先をいろいろご紹介します。
まず、「DIY Music Server with Arch Linux」というそのものズバリのサイト。サブタイトルが Create your own Lightweight Music Server with Arch Linux( in raspberry pi, or anywhere)。
「in raspberry pi, or anywhere」というところが、グローバルな波を感じさせますが、BBB/BBG は anywhere に入れてもらえるようなので、参考になります。内容はmpdをベースにminidlaとupmpdcliを加えて、UPnP化させようというもの。面白いなと思ったのはこの時、Vsftpdサーバを追加してminidlaサーバの運用を行うというところ。ftpサーバを使うのはいい手だなと思いました。
この記事はよく書かれていると思いますが、残念ながら upmpdcli に関する部分は参考になりません。
理由はインストールの方法の紹介が AURベースだからです。
AURって何というご質問はあるかと思います。とりあえず、こちらをご参照下さい。英文のトップはこちら。管理しているライブラリの検索ページを兼ねています。
AURというのは arch linux 環境でパッケージをソースからビルドする標準化された仕組みです。arch linux は ubuntu や debian などと比較して少数派ですから、pacmanで管理されるパッケージの数も少なくなります。これを補う仕組みがAURで、パッケージの提供側がこの仕組みを使って、簡単にインストール環境を用意できるようにすることにより、数の不足を補おうというものです。
具体的にはパッケージ提供者側はインストールに関するPKGBUILDという標準書式のテキストファイルを用意する。pacmanに含まれるmakepkgが
pacman -S --needed base-devel
をインストールしておくと、PKGBUILDファイルを読み出して、 指定されたパッケージをビルド&インストールする。ビルドに必要なパッケージ(gccなど)も自動的にインストールされますので、便利ですね。
という仕掛けになっています。
upmpdcli(libupnp)、polipo の PKGBUILDファイルは以下のところにあります。
しかし、せっかく探し出したのですが、この標準の PKGBUILDファイルは使えないのですよね。理由はよく分からないが、「パーミッションがない」というエラーをクリアできません。
しかたがないので、画面右上のリンク先から呼び出せるPKGBUILDファイルを眺めて、どうすればビルドできるのかチェック。
gitでソースファイルを取得して、普通にビルドすれば、OKらしいと分かり、試してみることにしました。
最初に git をインストールします。
pacman -S git
次に、ソースのget。
git clone git://github.com/jech/polipo git clone https://github.com/medoc92/libupnpp git clone https://github.com/medoc92/upmpdcli.git
polipo は make と make install だけで OK なようですね。
cd polipo/ make && make install cd ..
試しに起動してみます。
/usr/local/bin/polipo 別の端末で確認 ps aux
問題なく動いているようです。
raspbianの場合はビルド前に以下のパッケージをインストールする必要があります。
apt-get install apt-file apt-file update apt-get install texinfo
何故こういう差が発生するのか不明です。
次に upmpdcliですが、先にlibupnppをインストールしておく必要があるようです。
また、libupnpをインストールしておく必要もあります。mpdがインストールされていると、libupnpはインストールされますので、不要です。
こちらは autogen と configure を事前に行ったあと、make && make install する方式です。
pacman -S libupnp これはmpdがインストール済なら不要 cd libupnpp/ ./autogen.sh ./configure --prefix=/usr --sysconfdir=/etc make && make install ls /lib
最後の ls はインストールの確認です。configure は –help で特に設定は不要なことを確認しました。
pacman -S libmicrohttpd jsoncpp cd ../upmpdcli sh autogen.sh ./configure --prefix=/usr --sysconfdir=/etc make && make install
実行の確認です。
root資格では実行できないというエラーになったので、無理矢理 upmpdcli を rootグループに入れてしまいましたが、乱暴だったですかね(^^;;;。
useradd -G root upmpdcli upmpdcli -D -c /etc/upmpdcli.conf ps aux
raspbianの場合はビルド前に以下のパッケージをインストールする必要があります。
apt-get install libtool libupnp-dev libcurl-ocaml-dev libexpat-ocaml-dev apt-get install libmicrohttpd-dev libjsoncpp-dev libmpdclient-dev
紹介する順番が逆になりましたが、インストール途中で参照したページです。
- An UPnP Audio Media Renderer based on MPD
- Building and installing Upplay
- sc2mpd: upmpdcli Songcast support
- Upmpdcli downloads
- Polipo is no longer maintained
- Polipo installation instructions
- Polipo github
- arch polipo
urlでお分かりのように upmpdcli と upplay は同じ開発元なのですね。
次に設定ファイルの内容と起動方法です。キリがいいので、次回にまわします。
(PC_Audio) 2017/07/22
http://karaage.hatenadiary.jp/entry/2015/10/07/073000
RaspberryPIをUPnP化させる(2)
前回、「新しいDACをget」と書きましたが、その新しいDACの写真です。新DACはオーディオルームで使っています。この部屋ではアナログレコードを中心に聞いています。オーディオ機器のレイアウトの特徴は手元にプリアンプだけおいて、それ以外のアナログプレーヤ、メインアンプ、スピーカーなどは音響効果を考慮し、部屋のあっちこっちに分散させていることです。写真にはDAC、プリアンプ、メインアンプ、スピーカー、NASシステムなどが写っていますが、ご覧のようにあっちこっちバラバラ。DACは他に置く場所がないので、プリアンプの横に置いています。写真に写っていませんが、DAC、プリアンプ後方のnasを置いたラックの横にアナログプレーヤを置いてあります。いろいろ試してみましたが、この場所に置くのが一番ワウフラッターが少なくなるので。
メインアンプをスピーカーの下に置き、プリアンプと距離を離し、スピーカーとの距離を最短にしています。最初は、普通(?)に、プリとメインを近くに置いていたのですが、試しにメインアンプをスピーカーのそばにもっていってみたら結果が良かったので、こちらに配置を替えています。同軸ケーブルは10メートル位のばしても音に影響はないはずですから、この方法はお勧めです。スピーカーケーブルがいかに音に有害かよく分かります。モノラルタイプのメインアンプをお持ちの方はお試しあれ。 スピーカーはHarbethのMonitor40という大型のBBCモニターを使っています。20年近く、使い続けていますが、いまでも現役です。BBCモニターらしい安定感のある音がします。専用の木製の台に乗せて使っていますが、そこにメインアンプを置けるのが便利ですね。
DAC、プリアンプ後ろのnas(dlna)サーバはcdのリッピングステーションも兼ねています。ここで入手したCDは直ちにnasに格納、それを聴くという運用をしていますので、CDプレーヤは使っていません。リッピングシステム用のディスプレイはなくても良いのですが、余っているので、繋いであります。upnpネットワークのコントロールポイントとしてはプリアンプの前に置いてあるiPadを使っていますから、オーディオ部屋はPCレスなのですよね。
さて、肝心のDACですが、SOULNOTE D1という製品です。最近の新しいDACチップを使った新製品に興味がありウオッチしていました。たかじんさんのサイトのこの記事を見て、これが linux で使えるなら、良さそうだなと考え、近所のオーディオ屋さんに試聴をお願いしました。このオーディオ屋さんは郊外ショッピングモールの隅っこで細々と(?)営業しているのですが、こういうお店が近所にあると便利ですね。ノートpc、無線lanハブ、apu二台、itonaなどを持ち込んで試してみました。
音は素晴らしいですね。現用のaitlaboと比較すると楽器の実在感がワンランクアップするという感じです。ピアノの響板の響き、弦楽器のアッタク音、声のブレスなど本当にリアルに再現します。aitlaboのDACを初めて聞いたとき同じような感想をもったのですが、4年たつと新しい世界が誕生するのですね。感心しました。
「面白いなぁ」と思うのはDACをレベルアップする度に音がどんどんアナログレコードに近づいていくこと。HD7A192 => クロックの追加 => aitlabo DAC => aitlabo DAC のi2s化(BBB+BBG) => SOULNOTE D1 という具合にレベルアップさせてきましたが、確実にアナログの音に似てきています。今回のSOULNOTEでほぼ追いついたという感じになっていますね。これならデジタル録音でも安心して聴くことができそうです。
欠点はデザインがいまいちですね。前面がヒートシンクのようなアルミ削りだしパネルになっているのですが、これがなんともダサイです。また、バカでかいです。オーディオ用ケースに入ったr-piと比較してその大きさは際立っていますね。あと、熱いです。ケースの放熱用のスリットから真っ赤に焼ける部品が見えるのですが、半熟でよければ、目玉焼き位は作れそう位熱くなります。冬場なら確実に暖房機の替わりになりそうです。
まあ、音の良さの前なら、酷いデザインも、バカでかさも、熱さも我慢するという音楽愛好家向けですね(^^;;;。
しかし、なんで基板が電熱器みたいにこんなに真っ赤になるのですかね ?
さて、本題に戻します。r-pi で arch linuxを使ってmpdとカーネルをビルドする方法です。mpdとカーネルのビルドにこだわるのはこの二つが出来ないとupnpシステムを構築出来ないからです。
arch linuxシステムのインストールについてはこの記事を、mpdのビルドについてはこの記事を参照して下さい。再確認しましたが、今でもそのまま使えます。ただし、–enable-libmpdclient は明に指定しておく必要があります。
r-pi の arch linux のカーネルのビルドにつてはインタネット上の情報は英文ばかりです。「raspberry pi arch linux kernel build」で検索すると英語のサイトばかり出てきます。古い情報が多いですが、多少参考になるのはこちら(elinuxのページです)。
まず、ビルドに必要なソフトウェアのインストールですが、mpdのビルドを行っていれば、特に必要はないはずです。念のため以下を実行。
pacman -S git wget bc
次に、カーネルのソースをどこからダウンロードするか。以下、直前のelinuxのリンク先からの引用。
The kernel source should be downloaded from the Raspberry Pi Linux section on GitHub. Although you could just compile the vanilla kernel from Kernel.org, it will not have the necessary drivers and modules for the Broadcom SoC on the Raspberry Pi. You can however apply patches from the vanilla kernel to the Raspberry Pi one - be prepared for potential compiler grumbles though!
ということです。
ダウンロードの方法ですが、現在のバージョンは
[root@alarmpi ~]# uname -a Linux alarmpi 4.9.30-1-ARCH #1 SMP Sat May 27 01:19:41 UTC 2017 armv7l GNU/Linux
ですので、
git clone --depth 1 https://github.com/raspberrypi/linux.git -b rpi-4.9.y git clone --depth 1 https://github.com/raspberrypi/firmware.git
となります。
次に、configをどうするか。これは手こずりました。常識的には
cd linux modprobe configs zcat /proc/config.gz > .config
でOKなはずなのですが、何故か上手くいかない。makeが途中でエラーになります。
ネットで調べると bcm2709_defconfig というコンフィグを使えばいいらしいのですが、何故かダンロードしたディレクトリには存在しないのですよね。
[root@alarmpi linux]# ls -l arch/arm/configs/ ・・・ -rw-r--r-- 1 root root 5719 Jun 30 06:23 axm55xx_defconfig -rw-r--r-- 1 root root 2573 Jun 30 06:23 badge4_defconfig -rw-r--r-- 1 root root 3342 Jun 30 06:23 bcm2835_defconfig -rw-r--r-- 1 root root 32146 Jun 30 06:23 bcmrpi_defconfig ・・・
仕方がないので、ネットで bcm2709_defconfigをキーワードに検索してみます。
見つかりました。
ここです。WindowsとVmPlayer間でCopy&Paste で無理矢理 bcm2709_defconfigを作成します。
nano arch/arm/configs/bcm2709_defconfig
と書きましたが、その後、再度ご本家からダウンロードしたカーネルにはbcm2709_defconfigが含まれていました。gitだから日々進化しているということなのですかね。
あとは簡単。開始前にファームウェアの更新を行っておきます。
cp ../firmware/extra/Module7.symvers Module.symvers make bcm2709_defconfig make menuconfig make -j4 zImage modules dtbs
menuconfigは
Device Drivers ---> [*] Network device support ---> <*> USB Network Adapters ---> <*> USB RTL8150 based ethernet device support <*> Realtek RTL8152/RTL8153 Based USB Ethernet Adapters <*> Microchip LAN78XX Based USB Ethernet Adapters <*> Sound card support ---> [*] USB support ---> [*] Rely on OTG and EH Targeted Peripherals List <*> Inventra Highspeed Dual Role Controller (TI, ADI, AW, ...) MUSB Mode Selection (Dual Role mode) ---> <*> USB Gadget Support --->
otg-usbとusb-lanを設定。
最後にビルドしたソフトをインストールします。
make modules_install cp arch/arm/boot/dts/*.dtb /boot/ cp arch/arm/boot/dts/overlays/*.dtb /boot/overlays/ scripts/mkknlimg arch/arm/boot/zImage /boot/kernel7.img
再起動。入れ換えを確認します。
reboot [root@alarmpi ~]# uname -a Linux alarmpi 4.9.35-v7+ #1 SMP Tue Jul 4 12:59:49 UTC 2017 armv7l GNU/Linux
これで、前段の処理はお終い。次回から、polipoとupmpdcliのインストールに入ります。
(PC_Audio) 2017/07/15
RaspberryPIをUPnP化させる
タイトルをみて、僕の節操のなさにあきれはてた人もいらっしゃると思いますが、RaspberryPIを使い出すことに決めた一番の理由はこのケースです。
このケース、ステレオサウンド社のサイトで委託販売されていますが、情報はこちらとこちら。「ワンボードオーディオ・コンソーシアム」で策定作業を進めている規格に準拠。金属製ですがしっかりした作りです。
ケースが重要と知ってはいましたが、これほどとは思いませんでした。 Volumioでは信用できないので(^^;;;、Arch LinuxとRaspbian liteを使い試してみました。ケースに入れるか、入れないかで、まるで音が違います。ケースに入れた方が解像度、透明度、空間の感じなど全ての面でランクアップします。archとraspbianで微妙な差があるのですが、そんなのケースの有無の差の前にはどうでもいいという感じ。ビックリしました。
文字通り、オーディオ仕様のケースだと思いました。
実は、最近、新しいDACをgetしました。
いろいろ思案したのですが、i2s接続だと選択出来る機種は少ないので、USB接続タイプのものにしました。このため、USB出力で音の良いSOCを捜さないといけない。BBB/BBGは素晴らしいハードだと思いますが、USB出力はちょっと弱いので、使えません。ハードをどうするか物色している中で、このケースに目をつけたというわけです。まあ、もちろん、apuという選択肢はあるのだけど、只今、apu2が out of stock なのですよね(情報はここにあります)。
さて、このケース、雑誌の記事やウェブサイトの情報を見るとVolumioを使う方法が紹介されていますが、こんな良いケースを台無しにして、もったいないですね。これだけのケースを使うならapuと繋いで、自作、upnpタンデム接続の世界の一手でしょう。
という訳で「RaspberryPIをUPnP化させる」です。
本題に入る前にもう一つだけ脱線。自作は面倒という方々のために、donuts.shop73 さんのr-pi upnp対応システムをご紹介しておきます。
前回、BBB/BBG対応のusb-otgたすき掛け版をご紹介しましたが、こちらのr-pi版も素晴らしい内容です。lightMPDの掲示板「なんちゃってネットワーク分離」というスレッドで公開されています。直接、donuts.shop73 さんの書き込みにリンクする方法が分からないので、スレッドへのリンクをこちらに。1月15日のdonuts.shop73 さんの書き込みに情報があります。
このシステムはlightMPD r-pi版 1.02 がベースです。従って、インストール方法などはlightMPD r-pi版に準ずる形で行えますが、zipファイルを普通に解凍するとディレクトリ付きが指定されていますので、要注意です。また、起動するとランプを一切点灯させずに起動されますので、知らないと「あれハングしたの」と感違いするということになります(僕はこれで半分諦めかけました^^;;;)。この二つの難所をクリアできれば、networkのアドレスを設定するだけでスタンドアロンで動かすことができますので、インストールは簡単です。音もとても良いですので、お勧めします。
それでは本題に入ります。まずr-piを動かすOSの選択。
GUIはいらないので、debian、raspbian-lite、arch linux、ubuntu mini といったところが候補になります。
debianはこのサイトに情報がありますが、r-piにはちょっと辛口なので、パス。ubuntuはユーザ登録しないと使えないのですが、どうやって登録してもsshログインできないので、諦める。残された raspbian-lite、archの二正面作戦でいくことにしました。二つを試してみて良い方or動く方を取ろうということ。
まず、raspbian-liteです。情報は検索すればいたるところにあるので、省略。僕が苦労したことだけ書き残しておきます。
インストールはWindows環境でsdカードにイメージファイルを書き込むというやり方なので、サルでも出来ます。僕が参考にした情報はここ。
問題は初回の起動時。hdmiでディスプレイを繋ぐのは面倒なので、sshで入ろうとしたが、どうやってもログイン出来ない。「なんで ? 」と調べたら、「raspberry pi 3でSSH接続できない?」ということです。
mount /dev/sdb1 /mnt touch /mnt/ssh
という呪文を唱える必要があるようです。よく読んだら、インストールに参考にしたリンク先のサイトにも書いてありました(^^;;;。
あと、hdmiでディスプレイを繋ぐと、当然(?)最大解像度で繋がるので、僕の環境では文字が小さくて見にくいという問題があるのですが、この対応が結構大変でした。
解像度(1280x768 60 Hz)を変えるには
nano /boot/config.txt hdmi_group=2 hdmi_mode=23
という具合に変更すれば、いいらしいのですが(ここの情報です)、さっぱり変化しない。config.txtのコメントをよく読んだら、頭にある
hdmi_safe=1
という行も変更しないといけないようです。手こずりましたね。
最初はこれでログインしてrootバスワードの設定とsshd_configの変更をやっておかないとスムーズをrootでsshログイン出来ません。
rootのパスワードを設定する sudo passwd root sshログイン可能にする mount /dev/sdb1 /mnt touch /mnt/ssh nano /etc/ssh/sshd_config PermitRootLogin yes
次にmpdのビルド。その前にmpdをインストールします。
apt-get update apt-get install nfs-common cifs-utils winbind avahi-daemon avahi-autoipd apt-get install alsa-base alsa-utils apt-get install mpd mpc ncmpc
ここから先はたかじんさんのサイトの「MPDをソースコードからコンパイルしてPi 2 Pi 3に最適化する方法」のままです。コマンドだけ羅列しておきます。
準備 apt-get install autoconf unzip wget automake autopoint gcc apt-get install eclipse-cdt-autotools apt-get install libid3tag0-dev libflac-dev libvorbis-dev libsndfile1-dev libboost-dev libicu-dev libsqlite3-dev libsystemd-daemon-dev libglib2.0-dev libmms-dev libmpdclient-dev libpostproc-dev libavutil-dev libavcodec-dev libavformat-dev libnfs-dev libsmbclient-dev libsoxr-dev libasound2-dev libmpg123-dev ソースの入手とconfigure wget https://www.musicpd.org/download/mpd/0.20/mpd-0.20.9.tar.xz xz -dv mpd-0.20.9.tar.xz tar -xf mpd-0.20.9.tar ./configure CFLAGS="-O2 -march=armv8-a -mtune=cortex-a53 \ -mfpu=neon-fp-armv8 -mfloat-abi=hard" \ CXXFLAGS="-O2 -march=armv8-a -mtune=cortex-a53 \ -mfpu=neon-fp-armv8 -mfloat-abi=hard" \ --with-systemdsystemunitdir=/lib/systemd/system コンパイルとインストール make && make install 設定 nano /etc/fstab //192.168.0.35/public /var/lib/mpd/music cifs username=yo,password=,sec=ntlm,uid=mpd,noauto,x-systemd.automount,file_mode=0666,dir_mode=0766,iocharset=utf8,rsize=130048,wsize=4096 0 0 nano /lib/systemd/system/mpd.service
簡単でした。
次にカーネルのビルド。これもたかじんさんの「秋の夜長の Raspberry Pi 3 カーネル・セルフ・ビルド」を参考にしました。タイトルが魅力的ですね。たかじんさんの記事の最後の方のリンク先も参考になります。
apt-get install bc ncurses-dev git clone --depth 1 https://github.com/raspberrypi/linux.git -b rpi-4.9.y git clone --depth 1 https://github.com/raspberrypi/firmware.git cd linux modprobe configs zcat /proc/config.gz > .config cp ../firmware/extra/Module7.symvers Module.symvers make menuconfig make -j6 zImage dtbs modules make modules_install cp arch/arm/boot/dts/*.dtb /boot/ scripts/mkknlimg arch/arm/boot/zImage /boot/kernel7.img
これも簡単。やっばりグローバル標準は楽ですね。
というところで、いつになったらupnp化の話に入れるやらですが、長くなったので、今回はここまでです。次回はarch linuxで再開。menuconfigで設定する内容は arch linux と共通ですので、次回説明します。
(PC_Audio) 2017/07/08
BB用 Boticized lightMPD UPnP版とlightMPD UPnP-Adapter版の設定方法(2)
写真は僕のBoticシステム用実験システムを撮ったものです。ご覧のようにBBB、BBG、DACの三段重ね。ケースにも入れずに、むき出しですが、実験用なので、手抜きです。後ろにBBG用の電源として使っている外部電源供給型のUSBハブとBBB用の電源が並びます。USBハブの電源は製品のもの(12V2A)をそのまま使っていますが、iPurifier(左上)を装置と電源の間に入れ、対策しています。BBBはBBGを親としてusb-otg接続されていますが、電源ラインはIOデータ社のUSB-ACADP5(右手前)を使って外部から供給させるように変更しました。この方が動作が安定し、音も良くなるようです。
MPDの設定
MPDの種類
さて、BB用 Boticized lightMPD UPnP版とlightMPD UPnP-Adapter版の設定方法に関して前回説明しきれなかった部分を補足します。まずmpd設定に関連する内容。
Boticized lightMPD UPnP版では2つの別の方法でビルドしたmpdを動かすことができます。一つはbuildrootを使ってビルドしたmpd。もう一つは botilised arch linux 配下でビルドしたmpdです。いってみれば、前者はlightmpd用のmpd、後者はarch linux用のmpdということになります。前者は標準のlightmpdと同じ手法でビルドされているわけですから、特に解説は不要と思います。後者のarch linux用のmpdですが、これはarch linuxをBoticizedしたシステムのmpdがとても音が良いので、lightmpdにもってきたらどうなるだろうと試してみたものです。ビルド方法はここにあります。リンク先の情報は最初にトライした時の内容なので、現在の版のmpd-\,*archがcpでコピーしているモジュールは以下の通りとなります。
mkdir /save cd /save cp \ /usr/lib/libavformat.so.57 \ /usr/lib/libavcodec.so.57 \ /usr/lib/libavutil.so.55 \ /usr/lib/libmodplug.so.1 \ /usr/lib/libicui18n.so.58 \ /usr/lib/libicuuc.so.58 \ /usr/lib/libicudata.so.58 \ /usr/lib/libstdc++.so.6 \ /usr/lib/libm.so.6 \ /usr/lib/libgcc_s.so.1 \ /usr/lib/libpthread.so.0 \ /usr/lib/libc.so.6 \ /usr/lib/libdl.so.2 \ /usr/lib/libssh.so.4 \ /usr/lib/libbluray.so.1 \ /usr/lib/libgnutls.so.30 \ /usr/lib/libswresample.so.2 \ /usr/lib/libx265.so.102 \ /usr/lib/libx264.so.148 \ /usr/lib/libwebpmux.so.2 \ /usr/lib/libwebp.so.6 \ /usr/lib/libvpx.so.4 \ /usr/lib/libopenjp2.so.7 \ /usr/lib/libopencore-amrwb.so.0 \ /usr/lib/libopencore-amrnb.so.0 \ /usr/lib/liblzma.so.5 \ /usr/lib/libvdpau.so.1 \ /usr/lib/libva-drm.so.1 \ /usr/lib/libva-x11.so.1 \ /usr/lib/libX11.so.6 \ /usr/lib/libpsl.so.5 \ /usr/lib/librt.so.1 \ /usr/lib/libgomp.so.1 \ /usr/lib/libpcre.so.1 \ /usr/lib/libxml2.so.2 \ /usr/lib/libfontconfig.so.1 \ /usr/lib/libfreetype.so.6 \ /usr/lib/libp11-kit.so.0 \ /usr/lib/libnettle.so.6 \ /usr/lib/libhogweed.so.4 \ /usr/lib/libXext.so.6 \ /usr/lib/libdrm.so.2 \ /usr/lib/libXfixes.so.3 \ /usr/lib/libxcb.so.1 \ /usr/lib/libkeyutils.so.1 \ /usr/lib/libresolv.so.2 \ /usr/lib/libpng16.so.16 \ /usr/lib/libharfbuzz.so.0 \ /usr/lib/libXau.so.6 \ /usr/lib/libXdmcp.so.6 \ /usr/lib/libgraphite2.so.3 \ ./
また検索では駄目でコピーしたものは以下の通りです。
libupnp.so.6 => /usr/lib/libupnp.so.6 (0xb6e7d000) libmpdclient.so.2 => /usr/lib/libmpdclient.so.2 (0xb6e2c000)
Boticized lightMPD UPnP v3.1の/mnt/lightmpdにmpdは
-rwxr-xr-x 1 root root 597004 Feb 4 2017 mpd-0.19.21rt-arch-dsd -rwxr-xr-x 1 root root 905980 Feb 8 2017 mpd-0.20.2rt-arch -rwxr-xr-x 1 root root 544928 May 18 2017 mpd-0.20.7rt-arch -rwxr-xr-x 1 root root 317180 Feb 20 2017 mpd-br-01921 -rwxr-xr-x 1 root root 417956 Feb 19 2017 mpd-br-02004
いう具合に保存されています。
サフィックスにarchが付いているものがarch版です。
arch版のmpdは使用するlibrary構成がbuildroot版とはことなります。従ってinitrdをarch専用のものを使う必要があります。/mnt/bootの
-rwxr-xr-x 1 root root 28117099 Jun 2 2017 uInitrd-br-upnp-player -rwxr-xr-x 1 root root 53400826 Jun 2 2017 uInitrd-br-upnp-player-arch -rwxr-xr-x 1 root root 28115949 Jun 2 2017 uInitrd-br-upnp-stand -rwxr-xr-x 1 root root 53400829 Jun 2 2017 uInitrd-br-upnp-stand-arch
サフィックにarchが付くものがmpd arch版用です。
MPDの設定方法
/mnt/uEnv.txt と /mnt/lightmpd/lightmpd.conf の設定が必要です。
lightmpd.conf では再生に使用するmpdプログラムを指定します(二つ前の引用部分を参照)。uEnv.txt は指定したmpdプログラムに対応するuInitrdを指定します(一つ前の引用部分を参照)。
lightmpd.conf側は解説不要でしょう。uEnv.txtで指定するuInitrdは動作中のモードがスタンドアロンかプレーヤかと指定したmpdがarchかどうかで決まります。プレーヤモードの場合、設定はmpdが動いているplayer側のシステムに行う必要があります。
二つのconfファイルを適切に処理するのは面倒なので設定用のシェルスクリプトを用意してあります。
使い方は
# /mnt/scripts/mpdset.sh Welcome to Boticized lightMPD Usage: /mnt/scripts/mpdset.sh {arch19|arch20|light19|light20}
となります。
このスクリプトですが、standaloneモードで archタイプのmpdからlightタイプのmpdに切り換えようとするとエラーになります。修正方法ですが、以下の通り、/mnt/scripts/uEnv.scrを入れ換えて下さい。
/^#initrd_file=\/boot\/uInitrd-br-upnp-stand$/N s/#\(initrd.*stand\n\)\(initrd.*stand-arch\)/\1#\2/ /^#initrd_file=\/boot\/uInitrd-br-upnp-player$/N s/#\(initrd.*player\n\)\(initrd.*player-arch\)/\1#\2/
何をやっているかの説明は省略します。
それからmpdを切り換える方法ですが /mnt/scripts/mpdset.sh の次の行を修正すれば可能です。
arch19) ・・・ sed "s/^#\(\tload_module=mpd-0\.19\.21rt-arch-dsd\)/\1/" > /var/lightmpd.conf arch20) ・・・ sed "s/^#\(\tload_module=mpd-0\.20\.2rt-arch\)/\1/" > /var/lightmpd.conf light19) ・・・ sed "s/^#\(\tload_module=mpd-br-01921\)/\1/" > /var/lightmpd.conf light20) ・・・ sed "s/^#\(\tload_module=mpd-br-02004\)/\1/" > /var/lightmpd.conf
case文の名札とモジュール名を修正すればmpd0.20.9などに対応させることが出来ます。
usb-otg回線のタスキ掛け接続
前回、BBB/BBGを使ったタンデム構成の四つの接続方法について解説しましたが、もう一つありました。「usb-otg回線のタスキ掛け接続」です。donuts.shop73 さんに教えて頂きました。内容については掲示板にdonuts.shop73 さんの紹介と質疑応答があります。詳しくはそちらを参照して下さい。
写真はdonuts.shop73 さんのシステムを使ってusb-otg回線のタスキ掛け接続で再生中のものです。最初の写真と比較してすっきりしているでしょ。特長はシンプル/高性能/高音質です。
この方式はお勧めです。内容について簡単に紹介します。
Tandem Connection player(BBG) adapter(BBB) +---------------+ +-----------------+ |mpd USB A+--line1--+miniUSB upmpdcli| eth0 192.168.n.n DAC <===| usb1 10.0.0.2| | usb0 10.0.0.1 |--line0--+ Internet |polipo microUSB+--line2--+USB A polipo| dlna control point | usb0 10.0.1.2| | usb1 10.0.1.1 | dlna server +---------------+ +-----------------+
ご覧のように二台のBBB/BBGのmini/microB端子と相手側のUSB B端子をタスキ掛けに接続します。インタネットにはadapter側のETHを使って接続します。従ってタスキ掛けしない接続では必要となるUSB-LAN変換アダプターは不要となります。
高性能について説明すると、インタネット側はETH接続となるので、最高速となります。usb-otgによる対向接続はUSB-LAN接続の1.5倍の性能がでますので、この方式がトータルでみると一番性能を出せることになります。
音質は環境次第だと思いますが、僕の環境では、前回ご紹介した四つの方式の中で良好だったETH対向接続に匹敵する音がします。
donuts.shop73 さんのシステムはnetworkのipアドレスを設定するだけで使うことができます。BB二台お持ちの方にお勧めします。リンク先の掲示板への書き込みにダウンロードアドレスがあります。