2016年11月26日土曜日

LightMPD_Upnpアダプター完成

デジファイの音さんのUPNPアダプター(図5 イーサーネットの分離(UPnPモード))で音出しに成功した。
https://sites.google.com/site/digififan/home/digifi-labo/lightmpd-upnpgw


Lightmpdをこのように2台のAPUでカスケード接続すると、JPLAYに肉薄するほど高音質に激変する。

Lightmpdの凄いところは、音質以外に、ファイルの編集をするために、telnetやSSHなどでLightmpdにアクセスし Linux と格闘する必要がないという点だ。これはかつてなかった快挙だ。

要するに、WindowsでLightmpdをインストールしたSDカードをそのままWindowsで開き、中の設定ファイルを直接編集できるということだ。

Linuxのコマンドは不要だし、Linuxの階層を意識したり行ったり来たりする必要もないし、Vi を使う必要もない。 しかも、各環境に合わせてすべての設定ファイルが、ほぼデフォルトで使えるように準備されている。これは本当に便利だし凄いことだ。

これならLinux素人でも十分に挑戦できる!

もしかしたら、JPLAYのAudioPCのWindowsServerCoreモードの構築より簡単かもしれない。

1.接続

下図のとおりにLANケーブルを繋ぐ。

2.UPnPアダプター側の設定

BOOTイメージ
apuboot4g.img.xz
パッケージ
lightmpd-upnpgw-apu1-v1.0.0.zip
     
① lightmpd.conf       
------------------------------------------      
[network]      
        interface=eth0      
        address=192.168.3.1      
        gateway=192.168.3.2      
        netmask=255.255.255.0      
        nameserver=192.168.3.2      
        domain=mydomain.jp      
       
[ntp]      
        server=192.168.0.0      
        ntpd=no      
        timezone=Asia/Tokyo      
       
[network:player]      
        interface=eth1      
        address=10.0.0.1      
        netmask=255.255.255.252      
       
[network:nasgate]      
        interface=eth2      
        address=10.0.1.1      
        netmask=255.255.255.252      
       
[upmpdcli]      
        enable=yes      
        upnpiface = eth0      
        mpdhost=10.0.0.2      
        mpdport=6600      
        friendlyname=UpLightMpd      
        ohproductroom=UpLightMpd              
        logfilename=/tmp/upmpdcli.log      
        openhome = 1      
        ohmetapersist = 1              
        loglevel = 3      
       
[polipo]      
        enable=yes      
#      
        proxyAddress = 0.0.0.0      
        allowedClients = 10.0.1.2      
#      
        chunkHighMark = 1024      
        chunkLowMark = 256      
        chunkCriticalMark = 768      
        objectHighMark = 2048      
#      
        dnsQueryIPv6 = no      
        cacheIsShared = false      
        dnsUseGethostbyname = yes      
        disableConfiguration = true      
        disableIndexing = true      
        disableLocalInterface = true      
       
[telnetd]      
#  yes | no      
        enable=yes      
        port=23      
       
[cpuaffinity]      
        type=0      
       
[irqpriority]      
        setdefault=no      
       
[nat]      
        masquerade=network:player,network:nasgate      
        dnsforwarding=yes      
        ntpforwarding=yes      
        8023=10.0.0.2:23      
-----------------------------------------------

3.player側の設定

BOOTイメージ
apuboot4g.img.xz
パッケージ
lightmpd-upnpgw-apu1-v1.0.0.zip

① lightmpd.conf    
---------------------------------
[network]
interface=eth0
address=10.0.0.2
gateway=10.0.0.1
netmask=255.255.255.252
nameserver=10.0.0.1
domain=mydomain.jp

[ntp]
server=10.0.0.1
ntpd=no
timezone=Asia/Tokyo

[network:nasgate]
interface=eth1
address=10.0.1.2
netmask=255.255.255.252

#[route]
#nas-ip/32 = gateway
#192.168.0.0/32=10.0.1.1

[route]
nas-ip/32 = gateway
192.168.3.10/32=10.0.1.1

[mpd]
load_module=mpd-0.19.18rt-native-dsd-upnp

[polipo]
enable = yes
proxyAddress = 127.0.0.1
allowedClients = 127.0.0.1
#parentProxy = 10.0.1.1:8123
dnsQueryIPv6 = no
chunkHighMark = 1024
chunkLowMark = 256
chunkCriticalMark = 512
objectHighMark = 2048
cacheIsShared = false
dnsUseGethostbyname = yes
#
# disableVia = false
disableConfiguration = true
disableIndexing = true
disableLocalInterface = true
#
replyUnpipelineTime = 40
smallRequestTime = 20
maxSideBuffering = 15000

[rpcbind]
enable=no

[telnetd]
# yes | no
enable=yes
port=23

[webconsole]
# yes | no
# start page: http://thishost:${port}/index.html
enable=no
port=9000

[cpuaffinity]
# 0 normal
# 1 cpu1: usb irq handler
# 2 cpu1: usb irq handler
type=2

[irqpriority]
setdefault=no
xhci_hcd#0=FIFO:99

[debug]
interfaces=yes
resolvconf=yes
ntpd=yes
ntpconf=yes
ifconfig=yes
cards=yes
mounts=yes
ps=yes
mpdversion=yes
date=yes
ntpq=yes
music=yes
messages=yes
save=no
-----------------------------------------

② mpd.conf
-------------------------------------
realtime_option {
    memlock               "yes"
    stack_reserve         "2048"
    heap_reserve         "10240"
    main_priority         "OTHER:0"
    player_priority       "FIFO:53"
    decoder_priority     "OTHER:0"
    update_priority       "OTHER:0"
}

audio_output {
        type             "alsa"
        name             "uda"
        device           "hw:0,0"
        priority         "FIFO:54"
mixer_type       "disabled"
# dsd_usb         "yes"
dsd_native              "yes"
dsd_native_type         "2"
buffer_time     "150000"
period_time     "37500"
}

#decoder {
#      plugin                    "sndfile"
#      enabled                   "no"
#}

#decoder {
#      plugin                    "audiofile"
#     enabled                   "no"
#}

input {
      plugin "curl"
      proxy                     "127.0.0.1:8123"
}      

###### decoder selector
#decoder {
#   plugin                       "dsdiff"
#   enabled                      "yes"
#}

#decoder_selector {
#   suffix                       "mp3"
#   plugin                       "mad"
#}
#
#decoder_selector {
#   suffix                       "m4a"
#   plugin                       "ffmpeg"
#}
#
#decoder_selector {
#   suffix                       "wav"
#   plugin                       "audiofile"
#   scan_plugin                  "ffmpeg"
#}
#
#decoder_selector {
#   suffix                       "flac"
#   plugin                       "flac"
#}

database {
   plugin "simple"
   path "/var/lib/mpd/tag_cache"
   compress "no"
}

#
music_directory "/var/lib/mpd/Music"
playlist_directory "/var/lib/mpd/playlists"
#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,performer,disc"
metadata_to_use "artist,album,title,track,genre,date,disc"

#audio_output_format "96000:24:2"
#
# extended audio format
#audio_output_format "X4L4:24:2"

#LIBSAMPLERATE
#samplerate_converter            "Best Sinc Interpolator"
#samplearte_converter            "Medium Sinc Interpolator"
#samplearte_converter            "Fastest Sinc Interpolator"
#samplearte_converter            "ZOHc Interpolator"
#samplearte_converter            "Linear Sinc Interpolator"
#samplearte_converter            "internal"

# SOXR
samplerate_converter            "soxr very high"
#samplerate_converter            "soxr high"
#samplerate_converter            "soxr medium"
#samplerate_converter            "soxr low"
#samplerate_converter            "soxr quick"
#
#samplerate_converter            "soxr very high openmp"
#samplerate_converter            "soxr high openmp"
#samplerate_converter            "soxr medium openmp"
#samplerate_converter            "soxr low openmp"
#samplerate_converter            "soxr quick openmp"


follow_outside_symlinks "yes"
follow_inside_symlinks "yes"
default_permissions     "read,add,control,admin"
#
mixer_type "disabled"
#
audio_buffer_size "4096"
buffer_before_play "50%"
#
filesystem_charset "UTF-8"
id3v1_encoding "UTF-8"
------------------------------------------------------

③ WAVがノイズになる場合の対処方法

これは、キャッシュサーバーpolipoをカスケード接続すると現れる現象で、デジファイの音さんが現在調査中。問題が解決されるまでは以下の方法で対処する。

(1) ffmpegを使う

wavは sndfileかaudiofile,ffmpegのいずれかでデコードされるが、
今回、sndfile や audiofile を使うとノイズの嵐になるので、これらを使えなくしffmpegを使う

player側の mpd.conf の audio_output {   } の下当たりに以下を書き込む。

decoder {
      plugin                    "sndfile"
      enabled                   "no"
}

decoder {
      plugin                    "audiofile"
      enabled                   "no"
}

これでWAVはノイズなく再生される。しかし352KHzWavは依然ノイズの嵐となる。
352KHzを聴かないならこれで十分だが、聴きたいなら(2)の方法で対処する。

(2) player側のpolipoのみ使う設定にする

これは、UnPNアダプター側のpolipoを経由せずに直接NASからデータを取り受ける方式。

上記(1)の設定をキャンセル(全てコメントアウト)する。

#decoder {
#      plugin                    "sndfile"
#      enabled                   "no"
#}

#decoder {
#      plugin                    "audiofile"
#      enabled                   "no"
#}

player側の lightmpd.conf の[route]にNASのIPアドレスを指定する。
parentProxyはコメントアウトする。

 [route]
nas-ip/32 = gateway
192.168.3.10/32=10.0.1.1

[polipo]
#parentProxy = 10.0.1.1:8123

これで、playerのpolipoだけを使う設定となり、WAVが全くノイズなしで再生される。

192KHzも352KHzもOKだ。


④ DSD再生について

DDCが対応していれば、Dopではなく、NativeDSDを使うことができる。
player側の mpd.conf で、

Dopの場合
dsd_usb                   "yes"
#dsd_native              "yes"
#dsd_native_type       "2"

NativeDSDの場合
#dsd_usb                "yes"
dsd_native              "yes"
dsd_native_type        "2"

なお、忘れてはいけないのは Minimserverのstream,transcodeの設定だ。
Dopの場合、 dff:dopwav、dsf:dopwav と記述されている。
これを削除すと、NativeDSDで再生されるようになる。
 



4.NASのIPアドレス

NASのIPアドレスをLightMPDのネットワークに合わせて変更しておく。


5.ControlPoint

Upplay Kinsky Kazooで再生確認。
ControlPointの中では、Upplayが明らかに一歩抜きんでいる。Kinsky、Kazooは落ち着いた感じ。




6.音質

LightMPDのネットワークをホームネットワークと分け、更に、UNPNアダプターとUNPNプレイヤーをカスケード接続し2本のネットワークに分け、楽曲もNASにすることで、音質はここまで変わるかというくらい変わる。

これまでLightMPDは、綺麗な音だがやや細く伸びがなく、心に響いてくるJPLAYには一歩足りない感じであったが、解像度が高く、深みと厚みが出て艶のある心に響いてくる音に変わった。聴き始めるといつまでも聴いていたい気持ちになる。

これまで、あまりいい録音でないと思っていた楽曲が見違えるほど良くなる。これはほんとうに凄い。

LighrMPD恐るべし!JPLAYStreamerと遜色なし?!。


4 件のコメント:

  1. 音出しに成功しました。
    全く別物ですね。
    LightMPDらしさがなくなったともいえるかもしれませんが、完全なる進化ですね。

    上のmpd.confの

    NativeDSDの場合
    #dsd_usb "yes"
    dsd_native "yes"
    dsd_native_type "2"

    は、

    NativeDSDの場合
    dsd_usb "yes"
    dsd_native "yes"
    dsd_native_type "2"

    だと思うのですが。

    返信削除
  2. Imada さん

    dsd_usb は Dopの場合なので、コメントアウトしました。"no"でもいいのかもしれません。

    返信削除
  3. はじめまして。記事の内容にいつも啓発されております。今回の試みの本質的な原理は何だとお考えでしょうか?実際、LANケーブルを替えても、スイッチングハブを替えても音は激変しますので、デジタルデータに含まれているノイズをイーサネットを分離することによって低減したのでしょうか?もし、そうだとすると、デジタルノイズを低減する手段はこれ以外にもいっぱいありそうな気がします。
     たとえばパルストランス内蔵モジュラージャック LANコネクタというのが秋月にありますが、コモンモードチョークも組み込まれており、LANケーブルに一個介在させるだけで音は激変します。今回の試みと組み合わせたらどうなるのか、非常に興味があります。APU一枚2万何某か必要なので、同方向の効果があるのであれば、そちらで済ませたいのが本音です。

    返信削除
    返信
    1. simonさん

      こちらこそ始めまして。いつも読んでいただきありがとうございます。

      デジタルは何を変えても音が変わりますが、私の経験では、激変というのは滅多にあることではありません。どのレベルを激変というかは人それぞれですね。ただし、何を変えても激変するようならデジタルは成り立たないと思います。

      今回は、AUPをカスケート接続し2台間のイーサネットを分離することで音質は、まさに激変しました。元々ノイズはほとんどなく静かさも抜きんでいたので、ノイズが低減したということではないです。音の響きや迫力や生々しさが出てきて、思わず引き込まれる音になりました。コントロールの指令と楽曲データが分離されることで、大きな効果があったということになります。JPLAYに肉薄しています。

      もちろん、これを補完する意味で、電源やケーブルやその他も吟味すれば更によくなることでしょう。

      削除