2014年8月29日金曜日

lightMPD 高音質化への道

lightMPD は、設定作業が非常に簡単ですが、その見返り?にBlackBox化されているため、弄る場所が少ないと言われています。

これは事実なのですが、音質に関わる設定項目が結構あったりするのも事実です。

ここでは、備忘録として音質に関わる設定項目をまとめます。

1. mpd 3種の切り替え
(lightmpd.conf)
    [mpd]
    load_module=mpd-******dsdr
                mpd-0.17.6dsdrt
                mpd-0.18.11dsdrt
                mpd-0.19.gitdsdrt

2.cpuaffinityとisolcpusの組み合わせ
(lightmpd.conf)
    [cpuaffinity]
        #  0   notmal
        #  1   cpu1:  usb irq handler
        #  2   cpu1:  usb irq handler,mpd's output thread
        type=*

(menu.lst)
kernel        /boot/bzImage-64 root=/dev/ram0 ro console=ttyS0,115200n8 ramdisk_size=65536 rootfstype=romfs clocksource=hpet rootdelay=5 isolcpus=*

typeisolcpus動作
01すべてのプログラムはCPU0で動作する、CPU1は2,3の移動不可のスレッド(kthreadd等)が動作する
11USBの割り込みハンドラーはCPU1で、それ以外の動作はtype=0,isolcpus=1と同じ
21USBの割り込みハンドラー、MPDのoutputスレッドはCPU1で動作する、それ以外の動作はtype=0,isolcpus=1と同じ
0無しカーネルのスケジューラがCPU0,CPU1にスケジューリングする(通常動作)
1無しUSBの割り込みハンドラーはCPU1で動作する、それ以外はtype=0,isolcpus無しと同じ
2無しUSBの割り込みハンドラー、MPDのoutputスレッドはCPU1で動作する、それ以外はtype=0,isolcpus無しと同じ

3.realtime_option部分のスレッドの優先順位
(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"

}


4.audio_output部分のサンプルレート指定と優先順位指定
(mpd.conf)
audio_output {
        type                "alsa"
        name                "uda"
        device              "hw:0,0"        # optional
        format              "96000:24:2"    # optional (追加)
        priority            "FIFO:54"       # optional
        mixer_type          "disabled"
        dsd_usb             "yes"
#        use_mmap            "yes"
        buffer_time         "150000"
        period_time         "37500"
}

5.samplerate_converterの変換アルゴリズム指定
(mpd.conf)
samplerate_converter            "Linear Interpolator"

1) Best Sinc Interpolator
2) Medium Sinc Interpolator
3) Fastest Sinc Interpolator
4) ZOH Interpolator
5) Linear Interpolator
6) internal

番号が小さい程高精度になるが、CPUパワーが必要。

mpd-0.19gitでは sox ライブラリも使える。

1) "soxr very high"
2) "soxr"
3) "soxr medium"
4) "soxr low"

6.sysctlによるカーネルのチューニング
(sysctl.conf)
vm.swappiness = 0
#kernel.sched_latency_ns = 1000000
kernel.sched_rt_runtime_us = -1
kernel.sched_rt_period_us = 10000


他にも音質に関わる設定項目が有るかも知れませんが、今解るのは上記の6項目です。
(3)については、 digififan さんは高音質化との関連に言及していません。
(6)については、どの程度の値にすべきか、言及がなかったと思います。

正直、設定項目大杉って感じです。(^^;
どの組み合わせが自分のシステムにとって最適解なのやら。 ┐(´-`)┌

0 件のコメント:

コメントを投稿