MPDをソースコードからコンパイルしてPi 2 Pi 3に最適化する方法
久しぶりにMPD(Music Player Daemon)をコンパイルしてみようと思います。
MPDのバージョンは 0.19.18で、Pi 3 でセルフコンパイルします。
OSは、2016-05-27-raspbian-jessie-liteを使用しました。 Pi 1の時よりコンパイルが速くなったので作業時間は30分程度ですみます。 興味のある方や、最新版のMPDを使いたいとい人は挑戦されても良いでしょう。
随分前にも同じ事をしていました。 しかし、コンパイル方法をちゃんと書いていなかったので、今回はちゃんと書こうと思います。
最適化と言ってもgccのオプションにNEON、VFPを使用するようにしているだけです。 ターゲットをPi 3に絞っても面白いかもしれませんね。 ただ、今回は Pi 2 と Pi 3で動作するオプションにしています。
ARMコアの浮動少数点ユニットneonなどはこちらも参考にどうぞ。
一応、Pi 3 最適化のオプションも紹介いたします。 効果がどの程度あるかは不明ですが。。。
まずは、Rasbianにsshで接続します。 私は TeraTermを使っています。
Host:raspberrypi.local
User:pi
Pass:raspberry
mpdのソースコードをダウンロードします。
mkdir mpd <= 作業ディレクトリを作成
cd mpd/
wget https://www.musicpd.org/download/mpd/0.19/mpd-0.19.18.tar.xz
xz -dv mpd-0.19.18.tar.xz
tar -xf mpd-0.19.18.tar
cd mpd-0.19.18/
ここまでで、ソースコードは準備できました。
raspbian-jessie-liteにはgcc 4.9.2が最初から入っていますが、もし gccやmakeなどビルドツールが入っていない場合は下記のコマンドでインストールします。
sudo apt-get install build-essential
次に、MPDに必要なライブラリを導入します。
sudo apt-get update
ちょっと待ちます。
次から逆スラッシュ \ がついたところは改行込みで一気にコピペします。( すぐ下の例だとsudo ~ libmpg123-dev までを一気にコピーする )
sudo 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
とりあえずは、こんなものでしょうか。 必要に応じてライブラリを追加すると良いと思います。 ( 当初入れていた libfaad-dev は入れない方が良いようです。 AACの音が良くありません。 もし入れてしまった場合はsudo apt-get remove libfaad-dev でアンインストールできます。 AACのデコードはFFMPEGの方が表現が繊細でキメが細かいです。)
続いて configureです。 ここで最適化オプションを指定しておきます。 昨年あたりからRasbianもsystemdが導入されたのでsystemdを指定します。
Pi 2 と Pi 3用
./configure 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
Pi 3専用
./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
(Pi 3専用では動作を確かめてませんのであしからず)
※その他のオプションについては、こちらをご覧下さい。
configureの最後に、MPDに組み込まれる機能一覧が表示されます。
########### MPD CONFIGURATION ############
Archive support:
(-bzip2) (-ISO9660) (-ZIP)
Client support:
(+IPv6) (+TCP) (+UNIX Domain Sockets)
Storage support:
(+NFS) (+SMB)
File format support:
(-AAC) (-AdPlug) (+DSD) (-C64 SID) (+FFMPEG) (+FLAC) (-FluidSynth) (-GME)
(+libsndfile) (-MikMod) (-MODPLUG) (-MAD) (+MPG123) (-Musepack)
(-Opus) (-OggTremor) (+OggVorbis) (-WAVE) (-WavPack) (-WildMidi)
Other features:
(-libsamplerate) (+libsoxr) (+libmpdclient) (+inotify) (+SQLite)
Metadata support:
(+ID3)
Playback support:
(+ALSA) (+FIFO) (+File Recorder) (+HTTP Daemon) (-JACK)
(-libao) (+OSS) (-OpenAL) (-OS X) (-Pipeline)
(-PulseAudio) (-ROAR) (-SHOUTcast) (-Solaris) (-WinMM)
Streaming encoder support:
(+FLAC) (-LAME) (-Shine) (+Ogg Vorbis) (-Opus) (-TwoLAME) (+WAVE)
Streaming support:
(-CDIO_PARANOIA) (-CURL) (+SMBCLIENT) (-Soundcloud)
(+MMS)
Event loop:
epoll
##########################################
最低限という感じですね。 あまりにごちゃごちゃと付け加えてもバイナリが大きくなるだけでメリットはないような気がしています。
いよいよコンパイルです。 Pi 2、Pi 3は4コアなので、 -j4 オプションで4つのコアに仕事をさせます。 コア数の1.5倍くらいを指定した方が速いという話もありますが、どうなのでしょう。
make -j4
10分くらい待つと完了します。 終わったらストリップして実行ファイルを小さくしてインストールです。
strip src/mpd
sudo make install
インストールが終わったら起動してみます。
sudo systemctl start mpd
起動しているのか分からないのでステータスを確認します。
sudo systemctl status mpd
Active: failed って出てますね。 MPDのコンフィグファイルが指定できていない様子。
sudo nano /lib/systemd/system/mpd.service
[Service]
ExecStart=/usr/local/bin/mpd --no-daemon /etc/mpd.conf
と 「 /etc/mpd.conf 」 を追記してコンフィグファイルを指定します。 一度もmpdを導入していなければ、mpd.confを用意します。 スケルトンは /usr/local/share/doc/mpd/mpdconf.example にあるのですが、動いているmpd.confがあれば、それを持ってきた方が早いかもしれません。(一から設定するのが面倒なため)
再度、startしてステータスを確認してみます。
sudo systemctl status mpd
● mpd.service - Music Player Daemon
Loaded: loaded (/lib/systemd/system/mpd.service; enabled)
Active: active (running) since Fri 2016-08-19 13:43:45 UTC; 4s ago
Main PID: 6083 (mpd)
CGroup: /system.slice/mpd.service
mq6083 /usr/local/bin/mpd --no-daemon /etc/mpd.conf
と active 表示になっていれば成功です。
次回以降、自動起動するには
sudo systemctl enable mpd
自動起動を解除するには
sudo systemctl disable mpd
です。
ちなみに、apt-get install mpd でインストールされるのは、現在 0.19.1です。
/usr/bin/ ディレクトリにインストールされます。
ソースからコンパイルして make install すると
/usr/local/bin/ に入ります。
どちらのmpdを起動しているのか判りにくいので注意が必要です。
既に mpd 0.19.1が入っている状態なら「make install 」せずに /usr/bin/mpd をコンパイルした実行ファイルで上書きしちゃうのが手っ取り早いかもしれませんね。
にほんブログ村
ブログランキングに参加中です。 めざせ1位!
もしよろしければ「ぽちっと」お願いします。
« (続) I2S-DACを348kHzで駆動すると、どういうメリットがあるの? | トップページ | Volumio2に秋月電子のI2CタイプOLEDを接続して曲名などを表示する方法 »
「Raspberry Pi」カテゴリの記事
- MotionEyeと余っているラズパイで監視カメラ(2024.11.21)
- 秋の夜長にはRaspberryPi5 RT-linux セルフビルド(2024.10.13)
- 秋の夜長にはRaspberryPi5 64bit版 Sabreberry32 ドライバコンパイル(2024.10.10)
- RaspberryPi 5 の公式OSは32bit版でも64bit?(2024.10.09)
- 秋の夜長にはRaspberry Pi5 64bit カーネル・セフル・ビルド (2024.10.07)
コメント
« (続) I2S-DACを348kHzで駆動すると、どういうメリットがあるの? | トップページ | Volumio2に秋月電子のI2CタイプOLEDを接続して曲名などを表示する方法 »





wgetでエラーになります。
DNSの逆引きでエラーになっているのでしょうか?
wget https://www.musicpd.org/download/mpd/0.19/mpd-0.19.18.tar.xz
--2016-08-21 19:49:20-- https://www.musicpd.org/download/mpd/0.19/mpd-0.19.18.tar.xz
Resolving www.musicpd.org (www.musicpd.org)... 138.201.185.127
Connecting to www.musicpd.org (www.musicpd.org)|138.201.185.127|:443... connected.
The certificate's owner does not match hostname `www.musicpd.org'
投稿: yosyos | 2016年8月21日 (日) 19時52分
yosyosさん
おとといは、wgetで直接ダウンロードできました。
サーバーの関係か、たまにapt-get updateも失敗するときがありますね。 PCでダウンロードしてUSBメモリに入れてコピーしても良いと思います。 WinSCPで転送するのも手です。
投稿: たかじん | 2016年8月21日 (日) 21時27分
SSLの証明書に書いてあるホスト名と、ネット上のホスト名が違うというエラーのようです。
PCでダウンロードして転送したのですが、configureのなかで boostが無いといわれて途中で終わっています。
ディストリビューションによるものだと思いますが、一筋縄ではいかないようです。
投稿: Yosyos | 2016年8月22日 (月) 07時38分
Yosyos さん
boostがないというのは libboost-dev がインストールできていない為と思われます。
configure 実行時のエラーメッセージを注意深く読むとヒントが出ているかもしれません。
Arch系だと提供されているパッケージが違うかもしれないので、セルフコンパイルの敷居が高くなるような気がします。
投稿: たかじん | 2016年8月22日 (月) 20時34分
たかじんさん
libboost-devをapt-get install しようとすると、他のモジュールと不整合だというエラーがでてしまい、インストール出来ないのです。
じっくり取り組まないとだめなようです。
投稿: Yosyos | 2016年8月23日 (火) 21時55分
Yosyos さん
それは厄介そうですね。。。
ちなみに2016-05-27-raspbian-jessie-liteでは /etc/apt/sources.list は
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
となっています。
投稿: たかじん | 2016年8月23日 (火) 22時21分
いつも拝見しております。
Pi2・Pi3用をMoode2.6(update 2016-07-28)に入れてみました。一応成功しました。
XMOS USB Audio 2.0 Ref Design XS1-L1(改)をUSBで繋ぎ、鳴らしていますが、
低域(バスドラ)の音圧が上がったような気が致します(私感)。
Moodeのツイッターで"Next Moode update will include a bump to MPD 0.19.17"
となっておりますが、あっさり0.19.18で動作です。
面白い記事、ありがとうございます。
投稿: 新潟のよし | 2016年8月24日 (水) 00時19分
新潟のよし さん
良かったです。 moodeでもこれでOKだったんですね。
本家の方ではすでに0.19.19が。。。
同じ方法で0.19.19にもできると思います。
投稿: たかじん | 2016年8月27日 (土) 08時59分
たかじん様、お世話になっております。
>本家の方ではすでに0.19.19が・・
私は音質向上にはmpdのアプデだけでなく、makeの際のNEON、VFPオプションの有効化がカギと感じています。
ソースを変えて聞き込んでみましたが、音圧だけでなく、音像と定位の明確化もあるようです。
一方、moode側でのビルドでこれらがなされているかは?です。
0.19.19にもしてみますね。(ちょくちょく1曲目で再生が止まる現象も出ていますので)
投稿: 新潟のよし | 2016年8月28日 (日) 15時13分
新潟のよしさん
おっしゃる通り、Neon、vfpを使用することによって重たい処理が速くなるなら、音質的にもメリットがあるかもしれないですね。
投稿: たかじん | 2016年8月30日 (火) 22時12分
たかじんさん
Boost not foundでネットを探していたら、「C++ が壊れているよ」
という記述を見つけました。なので
$ apt-get install g++
でc++コンパイラーを最新版にしてみたら configureが正常終了
しました。
投稿: yosyos | 2016年9月 2日 (金) 20時16分
yosyos さん
なんと。 粘りづよい検索で解決ですね。 さすがです。
Linuxは色んなソフトのバージョンが入り乱れた依存関係がともてややこしいです。
昔、聞いた話だと、debianのapt-getパッケージ管理は依存関係も含めて処理する賢いシステムとの話だったのですが、安易にapt-get update とかすると、思わぬ落とし穴があったりしますね。
投稿: たかじん | 2016年9月 4日 (日) 09時08分
たかじんさん
volumio 1.55をrpi_updateでアップデートしたやつなので、色々混じっているのだと思います。
投稿: yosyos | 2016年9月 5日 (月) 07時44分
ちなみに、volumio2の最新バージョンでは、最新のmod 0.19.19がバンドルされていました。
投稿: yosyos | 2016年9月 7日 (水) 21時41分
yosyos さん
なんと。 volumio2の進化が止まらないですね。 HifiberryDAC系のソフトウェアボリュームの不具合を先に解消してほしいような気もしますが。。
投稿: たかじん | 2016年9月10日 (土) 09時13分
たかじんさん
volumio2(2016/08/20版)でmpdをコンパイルしようとしているのですが
なぜか、「libsystemd-daemon-dev」を apt-get install すると
systemd関連の整合性が合わなくなります。
それ以外のライブラリーは全てインストールできるのですが...
投稿: yosyos | 2016年9月24日 (土) 16時35分
yosyos さん
volumio2は、何かがおかしいです。 私の方では、カーネルビルドを試みましたがエラーがでて、どうにも対処できませんでした。
http://d.hatena.ne.jp/JironBach/20120518/1337321321
このようにaptパッケージの依存関係を修復することもできるようですが、試していません。
投稿: たかじん | 2016年9月25日 (日) 09時14分
https://github.com/lintweaker/mpd-dsd-019
にあるパッチファイルでパッチをあててコンパイルすることは可能でしょうか?
できれば、ぜひ紹介を希望します。よろしくお願いします。
投稿: ytk | 2016年9月26日 (月) 11時34分
設定ファイルのエラーですがmake installしたmpdは/usr/local/etc/mpd.confを参照するのでここにリンク貼ればokです
投稿: | 2016年9月28日 (水) 14時01分
ytk さん
mpd-dsd-019は、ネイティブのDSD対応になるようですね。
ネイティブDSDのUSB-DACを持っている場合はDoPよりもデータの無駄がすくないのでメリットがありますね。
patchをあてるとできるような気がします。 が、ネイティブDSD対応のUSB-DACを持っていないため検証できません。
http://yseki118.exblog.jp/25819918/
こちらを参考に試してみてはいかがでようか?
デフォルトでは /usr/local/etc/mpd.conf なんですね。
慣習的に/etc/mpd.conf に置いている例が多いので、そちらの方が迷わないような気もしますが、リンクを貼るのもよいですね。
投稿: たかじん | 2016年9月30日 (金) 23時56分
たかじんさん
お忙しい中、丁寧なお返事、ありがとうございます。
じつは、たかじんさんがお示しくださった
http://yseki118.exblog.jp/25819918/
の方で、以前に私自身、パッチをあてたMPDのコンパイルの方法を教えていただき、BeagleBone Green + Botic で音出しできていました。
DSDでなくても、正式なパッチをあてた方が、あてないより確かに音が良いと感じました。
そして最近、たかじんさんが教えて下さった方法を試し、MPDをコンパイルし、RaspberryPi2 + sabreberry+ + Volumio2 で音出しができました。
そこで、これにパッチをあてたらもっと良い音になるのではないかと思い、BeagleBone Green + Botic の場合と同じようにやってみたのですが、
configまでは問題なく進んだように見えましたが、makeでエラーになってしまいました。
エラーのコメントを読んでも意味がわからず、ネット上で検索してみましたが、情報を得ることができませんでした。
RaspberryPi や BeagleBone Green 、Linux に触れるようになって、まだ2年ぐらいで、まだわからないことばかりなのですが、少しずついろいろ調べてみようと思います。
ありがとうございました。
先のコメント、たいへん横柄で失礼しました。
投稿: ytk | 2016年10月 1日 (土) 09時14分
ytkさん
私もちょっと試してみたのですが、「SND_PCM_FORMAT_DSD_U32_BE」の定義がないってエラーがでますね。
Alsa-libが古いと対応していないようなのですが、Raspbianには最新のものが入っているようでした。 対策方法がわかりません。
ただ、下記でpatchの内容を見る限り
https://github.com/lintweaker/mpd-dsd-019/blob/master/0001-This-patch-extends-native-DSD-support-for-MPD-0.19.19.patch
DSD_U8、DSD_U32というフォーマットに対応(拡張)するだけに見えます。
このフォーマットのデータを出力する以外の機能追加や効力はなさそうですよ。
もし、音に違いがでるとしたら、新潟のよしさんが上でおっしゃっているように、mpdをソースからコンパイルすることで、neonやvfp対応するバイナリが生成されてCPU負荷が減るというくらいでしょうか。
patchの内容を見てみると納得できるかもしれません。 行の先頭に「+」がついた所が追加された部分で、「-」の行は削除された部分です。 githubだと色分けもされるので見やすいです。
投稿: たかじん | 2016年10月 2日 (日) 08時28分
たかじんさん
実際に試してくださり、またエラーの意味やパッチの内容について教えて下さり、ありがとうございます。
>DSD_U8、DSD_U32というフォーマットに対応(拡張)するだけに見えます。
>このフォーマットのデータを出力する以外の機能追加や効力はなさそうですよ。
とのこと、
私の「正式なパッチをあてた方が、あてないより確かに音が良い」というのも、何とか効果による錯覚なのかも知れませんね。
あらためて良く聴いてみたいと思います。
プログラミングの経験も、ExcelやWordのVBAぐらいしかないので、
コンパイルの際のエラーのコメントをながめて
何行目に問題がある
みたいなことが書かれているようなので、パッチの中身で該当行を見たのですが、その意味がまったくわかりませんでした。
たかじんさんのご指摘で、今後の学習の課題が見えてきたように思います。
ありがとうございました。
今後もよろしくお願いします。
投稿: ytk | 2016年10月 2日 (日) 11時23分
ytk さん
Pi2、Pi3専用にneon、vfpをイネーブルしてコンパイルすることで、標準のものとは違う命令コードが生成されます。 その場合、音に変化がでても不思議はないです。
標準のmpdは、Pi 1でも動作するようにneonなどを使わないアプリケーションになっています。
実際に試して、ご自身が納得いくというのが理想ですね。 ネットで色々な情報をみても本当にあっているのか、、自分の好みと同じなのか、不明なことが多いですからね。
投稿: たかじん | 2016年10月 6日 (木) 20時10分
たかじん様
今さらですが、たかじんさんの方法でmpd 0.20.6のコンパイルを実施して無事にsabreberry+から音出しができました。ありがとうございました。
更に欲が出て、mpd.confにsoxアップサンプリングの設定を行いました。最初は単純に
audio_output_format "192000:24:2"
samplerate_converter "soxr very high"
としたところ、音は出るのですがボリュームがMAXでも10%位の音量しか出ませんでした。試行錯誤の末、
audio_output_format "192000:32:*"
にしたところ、正常の音量になりました。
調子に乗って、
①audio_output_format "384000:32:*"
②audio_output_format "768000:32:*"
としても、sabreberry+から音が出てきたのに驚きました。htopで確認したところ、CPUの稼働状況は、周波数に比例して40%、70%、90%となっていましたので確かにsoxがアップサンプリングしていると考えられましたが、sabreberry+の内部で逆にダウンサンプリングしているのでしょうか?
投稿: とんぼのめがね | 2017年4月 8日 (土) 12時32分
とんぼのめがねさん
mpdのバージョンも、すごい勢いですね。
soxリサンプラーとDAC出力のサンプリング周波数の件ですが、alsaドライバとmpdが連携していて、周波数が合わないとき自動で合わせ込みが働きます。
sabreberry+に使用しているHifiberryのドライバは192kHzどまりのはずですから、SOXで768kHzに上げた後、192kHzにダウンコンバートが働いていると思います。
ただ、MoodeのAdvanced Kernelは384kHzまで出力できるドライバが入っていますのでDACへ384kHzで出力することができます。
audio_output_format "*:24:*" とするのが、DACのフォーマットと楽曲のフォーマットが一致して、無駄なソフトウェア処理が入らない設定だと思います。
あとは、Soxリサンプラーの音とDAC内アップサンプラーの音の好みの違いになりますね。
「サ行」がきつい歌などはSoxではない方が聴きやすかったりしますが、それ以外ではSoxもわりと悪くないですね。
投稿: たかじん | 2017年4月 9日 (日) 14時16分
たかじん様
お忙しいところ、ご回答頂きありがとうございます。
ご説明頂き、soxリサンプラーとDAC出力のサンプリングの仕組みが理解できました。今回のsoxリサンプラーにより音量が変化する件に関して、ネットで調べてみましたが明確に記載されている記事はありませんでしたが、海外のネットで
I can verify that for both the PCM5102A and the onboard H3 audio hardware, I had to set " format "*:32:2" " for MPD to have equal volume across my 16 and 24 bit source material.
と言う書き込みを見つけ、まさかと思ってaudio_output_format "192000:32:*"としたところ音量が元通りになったので、疑問に思いました。
また、今日になって「digififan」さんの掲示板を見ていましたら、「WAVの再生が出来なかったが32bitにしたら再生出来る様になった。」との書き込みがあり、益々疑問になっておりました。
投稿: とんぼのめがね | 2017年4月 9日 (日) 23時08分
とんぼのめがねさん
format 指定で音量が変わってしまうことがあるのですね。 初耳です。
digififanさんのところも、マニアックですごいですね。
投稿: たかじん | 2017年4月12日 (水) 21時56分
たかじん様
本当にmpdは奥が深いと、今になって感じております。
RTカーネルでdigififanさんのmpdのrtパッチを当ててmpdをmakeしていますが、make出来てもmpdが立ち上がらずの状態です。うーん?
また、暫くsoxで聴いていましたが、たかじんさんの言われるとおりチョットハイ上がりで、音に深みが無くなる様な感じがしました。元に戻してハード的にアップサンプリングすることにしたいと思いました。
アドバイスありがとうございました。
投稿: とんぼのめがね | 2017年4月12日 (水) 22時20分
とんぼのめがねさん
mpdのコンパイルは、意外と敷居が高いですね。 何かのライブラリが足りていないとか、mpd.confの記載が間違っているなどで起動しないことがあります。
投稿: たかじん | 2017年4月13日 (木) 23時17分
digififanさんのRTパッチの件でアドバイスを頂きありがとうございました。
無事に起動することが出来ました。問題となったトラブルは、ArchWikiのMusic Player Daemon/トラブルシューティング にも出ている「bind to '0.0.0.0:6600' failed」と表示されるもので、mpd.socketサービスの2重起動が原因でした。
systemctl disable mpd.socketを実行したところ正常に起動しました。mpdの起動には、mpdとmpd.socketサービスが存在して、mpdサービス内でmpd.socketをキックしていることを初めて知りました。今回はmpdの起動の前にmpd.socketが先に立ち上がっていてmpdが起動する際に競合したようです。何故、既存のmpdでは問題なかったのに疑問が残るところです
。
最終的にubuntu16.04-RT + mpd20.6RT + upmpdcli + polipoを組み込んだシステムが出来上がりました。(うん?何処かのシステムと同じ様な)
また、アップサンプリングはCS8421ICで192kHzにジッター低減とともにアップサンプリングすることにしました。で、現在はRsp3 + JRMをmediaserver、上記の組み込みシステムに、たかじんさんのSabreBerry+を載せて、iPhone + JRemoteをコントロールポイントとして車の中で音楽を楽しんでいます。しかし、車の中で思わず良い音がしたので、室内でこれまたたかじんさんのVFA-01に繋げてじっくりと聞き込んでみました。普段はJPlay+AK4997をメインにJPlay以外は問答無用でDSD512にコンバートして聞いていますが、これらとは違う透明感と解像度がありES9023チップの性能を最大限に引き出しているように思います。
SabreBerry+は発売当初から愛用させて頂いており,、たかじんさんのホームページの歴史の様にVolumio、Rune、Arch、lightMPD等をSabreBerry+で聞いてきましたが、今までに聞いたことが無い音がしています。たかじんさんの技術の素晴らしさに改めて感動しております。
今度の連休は、SabreBerry+とALX-03を組み合わせたシステムを組んでみたいと思っています。
投稿: とんぼのめがね | 2017年4月22日 (土) 19時18分
とんぼのめがね さん
そのエラー、私も時折みました。 ただ、エラーがでても音が出ていたので気にしていませんでした。 socketの2重起動が理由だったのですね。 ありがとうございます。
ES9023は、ESS社としてはローエンドのチップですが、他のメーカーともES9018系とも違う音がでますね。
そういえば、mpdもupnpをEnableすることができるらしいですね。 mpdクライアントをラッパーとしてかぶせずにDLNAレンダラーとして使えるなら、それも面白いかもしれません。
DLNAは、ネットワークプレイヤー系としては最も複雑で、最も広まった規格と思いますが、まだまだ活路があるのですね。
投稿: たかじん | 2017年4月23日 (日) 22時18分
たかじん様
長い間お付き合いいただきありがとうございます。
こちらで触れるべき内容ではないと思い敢えて避けておりましたが、投稿いたしますことをお許し下さい。
たかじんさんも既に一度はデジファイのおとさんのlightMPD/upnpgwをインストールして聞かれていることと思いますが、一度もこちらで話題に上がることはありませんね。lightMPD/upnpgwが完全にRasPiに対応していれば、恐らくたかじんさんがSabreBerry+やSabreBerry32でのlightMPD/upnpgwの音色についてているコメントされていたことと思います。
私もlightMPD/upnpgwがRasPiに対応されるのを待っておりましたが、ethernetポートが一つしかないRasPiでは無理があるのでしょうか。やはり、高額なAPUを購入してRasPiのlightMPD-1.02をレンダラーにするしかないかと思っておりました。
しかし、ネットを見ていましたら、PiにMPD+upmpdcliを導入してMediaSeverのレンダラーにしている方が多くおられることがわかり、「もしかしたらMPD+upmpdcliにpolipoを入れたらlightMPD/upnpgwになるんじゃないの?」と思ったところから今回の私のおバカなプロジェクトが始まりました。
先に投稿した機器・ネットワーク構成を紹介すると、Pi3をMediaSeverにしてethernetポートに10.0.0.1を割り付け、もう1台のMPD+upmpdcli+polipoシステムのethernetポートは10.0.0.2に設定して、2台をethernetケーブルで接続しました。upmpdcli、polipoのconfファイルの設定はlightMPD/upnpgwの設定ファイルを参考にさせて頂きました。また、Pi3とiPhoneはテザリングで接続しました。以上が、私の機器・ネットワーク構成でして、本家のlightMPD/upnpgwの構成で言われるスタンドアローンタイプに相当します。(実は、Pi3:MediaSever、upmpdcli+polipo、MPDの3台構成の「UPNPレンダラー」も実施してみました。)
最初は、ノーマルカーネルとノーマルmpdにしておりましたが、それなりに高音質だと思っておりました。
そこで、恐れ多くもAPU2を1台購入してlightMPD/upnpgwを導入してPi2はlightMPD1.02としてUPNPレンダラー構成との音質比較を行いました。その結果、全くの偏見、個人的な感想ですが殆ど同じ音質と感じました。
この後は、こちらで投稿させて頂いた内容に繋がり、たかじんさんのRTカーネル、mpdの最新バージョンをインストールする方法を参考にさせて頂きました。RTカーネル、mpd-rtを導入することにより、明らかに音色の透明感が増して、私の好みの音になったように感じております。また、今はSabreBerry+との相性が非常に良いと思っておる次第であります。
投稿: とんぼのめがね | 2017年4月24日 (月) 15時47分
とんぼのめがねさん
なるほど。 かなり気合をいれたシステムになっていますね。
RTカーネルは、マスタークロック基準で動くDACでは差がでにくいと思いますが、Sabreberry+だと違いが出てくる可能性は高いです。
mpd本体でもupnpをEnableすることができたはずです。 そうするとupmpdcliというラッパーを一枚取ることができるかもしれないですね。
メディアサーバーとレンダラーを分けるシステムは、Squeeze Boxに通じるものがありますね。 Squeeze Boxの場合、QNAPなどNASにサーバーソフトを入れてしまうことで、システム全体としてはDLNAと比べてシンプルになるメリットと、そのサーバーソフトの出来のよさで、非常に使い勝手がいいという特徴があります。
投稿: たかじん | 2017年4月25日 (火) 23時36分
たかじん様
新製品の開発・販売準備のお忙しい中、いろいろとアドバイスを頂き恐縮です。
>mpd本体でもupnpをEnableすることができたはずです。 そうするとupmpdcliというラッパーを一枚取ることができるかもしれないですね。
目から鱗のお言葉ありがとうございます。私が行ったmpd + upmpdcli + polipoの導入は、所詮、従来からあったDLNAシステムのDLNAレンダラーを「複雑」にして構築しただけで、mpd自体はバージョン0.19からupnpに対応する機能が備えられているから 「upmpdcli」は不要だと言うことですね。前回のたかじんさんのコメントの意味がやっと理解できました。
MediaServer → ControlPoint → upmpdcli →mpd の様にupmpdcli がmpdのフロントエンドとなる場合を「フロントエンド統合」 MediaServer → ControlPoint →mpd の場合を「バックエンド統合」と言うらしいです。最終的にどちらの場合でも、mpdはHTTP経由で直接オーディオデータを取得しています。当然、たかじんさんの言われる通り余計なラッパーが存在しない「バックエンド統合」が理想的と思われます。しかし、lightMPD/upnpgwの様に何故upmpdcliを入れた「フロントエンド統合」が存在するかを考えた場合、upmpdcliがmpdのフロントエンドになることによって、多種類のMediaServerとControlPointに対応出来ることが理由と考えられます。私の場合は、MediaServerをJRiver Media Center(JMC)、ControlPointをJRemoteにすることが前提なので「フロントエンド統合」しかないと考えております。実際に「mpd + polipo」で検討してみましたがupmpdcliを外すことは出来ませんでした。
(前回の投稿で「UPNPアダプター」を「UPNPレンダラー」と誤って書き込みしておりましたことを訂正させて頂きます。)
>メディアサーバーとレンダラーを分けるシステムは、Squeeze Boxに通じるものがありますね。
車載システムは、今のシステムに載せ替える前まではLMS+SqueezeLiteを1台に詰め込んで使用しておりました。その当時はシステムをコンパクトにしたいと思っていたことから、LMSとSqueezeLiteを分離することは考えておりませんでした。
>Squeeze Boxの場合、QNAPなどNASにサーバーソフトを入れてしまうことで、システム全体としてはDLNAと比べてシンプルになるメリットと、そのサーバーソフトの出来のよさで、非常に使い勝手がいいという特徴があります。
NASに関しては、たかじんさんの言われる通りMediaServerが導入されているNASがネットワークオーディオでは最適ですね。私が使用しているJMCもQNAP等にも対応していて、対応フォーマットも広く高機能なことから使用されておられる方も多いようです。私のコンセプトの一つに「オーディオは全てiPhoneでコントロールにする」がありまして、JRemote、KAZOOを入れてControlPointにしています。また、iPhoneに入れたVNCから直接JMCのMediaServerをメンテナンスが出来る様にしています。
宅内にNASは持っているのですが、私の場合にはネットワークハブが鬼門でして、どうもハブでノイズが載って良くありません。Wi-Fiルータも、ハブも入れ替えてみましたが音がすっきりとしませんでした。今回の車載システムもそうですが、PiにUSB-HDDやUSB-SSDを接続してMediaServerを構築して、このMediaServerだけをネットワークに接続しています。JPlay、lightMPD等はUSB-ethernetアダプタを用いてMediaServerに直接ブリッジ接続をして、ハブノイズ問題を解消してる状況です。
(余談ですが、たかじんさんも人柱になってminUSBアダプタを購入して紹介されておられました。私も3種類のUSBアダプタを購入して、現在はこの内の1種類を選択して同じものを3台使用しております。オーディオ機能を分散させて高音質化を図るネットワークオーディオではUSBアダプタが必需品となってきた感が有ります。また、ボードのネットワーク設定を間違ってパソコンとSSH出来なくなっても、USBアダプタを刺すと勝手にDHCPクライアントになってネットワークに繋がるので重宝しています。)
>RTカーネルは、マスタークロック基準で動くDACでは差がでにくいと思いますが、Sabreberry+だと違いが出てくる可能性は高いです。
成る程、Sabreberry32だと変化は少ないと言うことですね。Sabreberry32のdriverを導入しようとしましたがwgetでリソースが落ちてこなかったので諦めたことがありました。Sabreberry+は低音も良く出て中音から高音までのバランスが良く、聴き易い本当に良いDACだと思っています。最近、高機能DACに押され、使用頻度が低くなっていましたが、今後は2号機、3号機と積極的に活用しようと思っています。(Sabreberry+を何台持っているかい?)
投稿: とんぼのめがね | 2017年4月27日 (木) 09時21分
とんぼのめがねさん
色々と試されていらっしゃるのですね。 素晴らしいと思います。
ネットワークHUBを介すとノイズが増えるというのは、あるらしいですね。 オーディオ用のNASというのは売っていますが、オーディオ用のEthernet HUBというのは見たことがありません。
ご存知だとは思いますが、RPiのCPUは、USBラインが1本のみです。 基板上に載ったLAN9514というUSB-HUB機能が付いたUSB-LAN変換チップにてEthernet機能を実装しています。
つまり、オンボードのLANを使っても、USB-LAN変換コネクタを使ってもCPUから見ると同様にUSB-LAN変換を使っていることになります。 USB-LAN変換アダプタの内部チップによって良し悪しがある可能性は否定できませんので、色んな種類を試す価値はありますね。
車載オーディオ的な使い方としては、MoodeのWifiアクセスポイント機能はとても使いやすいですね。
データを置く場所は、USBメモリ、もしくはSDカードの中どちらでも好きな方を選択できますが、私が試したなかでは、USBメモリに置くとギスギス感があるように感じました。 USBメモリの種類によるかもしれません。
そういった事を試して、自分の好みのシステムを作っていく楽しみがありますね。
投稿: たかじん | 2017年4月28日 (金) 08時16分
たかじん様
>車載オーディオ的な使い方としては、MoodeのWifiアクセスポイント機能はとても使いやすいですね。
Moodeは良さそうですね。Moode + SabreBerry32を愛用されている方が多いのでしょうか。Moodeについても昔にたかじんさいのサイトで知って聴いたことが有ったと思いますが、音質がどの様であったのか記憶にありません。だいぶ進化したようなので一度試してみたいと思います。
iPhoneをPiに接続するためのPiの独立したAP化は、Volumio、lightMPD、LMSと行ってきましたが、
①PiにAP化を仕込むのが大変
②Piの起動に時間が掛かる。
③iPhoneをAPに接続している間は、iPhoneでインターネット接続ができない。
と言う短所があると思います。
次に選択するのが、テザリングだと思いますが、WiFiですとiPhoneの消費電力が大きいため、結局私はBluetoothでテザリングしております。
但し、iPhoneとPi3のBluetoothテザリング設定は曲者で大変でした。ネットで情報は拾ってこれますが、なかなか上手くいきませんでした。果たして何人の方がiPhoneとPi3のBluetoothテザリングをまともに使われておられるか疑問に思ってしまいました。
最終的にPi3に宅内のWiFiルータ接続設定とiPhoneのBluetoothテザリング設定を行っております。車載システムを宅内に持ち込んで起動すれば宅内のネットワークに、屋外ではiPhoneとのテザリングになりますので、両刀使い意外と便利です。
投稿: とんぼのめがね | 2017年4月29日 (土) 17時17分
とんぼのめがねさん
なるほど、iPhoneで全てをやろうとすると苦労するのですね。 確かにBTテザリングするというのは、みたことがありません。
Pi3でBTを有効利用するという意味で、素晴らしいですね。
投稿: たかじん | 2017年4月30日 (日) 09時36分