今回のバージョンではv1.1.0に対してlibsoxr,mpdの改造を行いました。v1.1.0のbuildrootは2017.11版で、そのlibsoxrのバージョンは1.2.0です。
最新のbuildrootのlibsoxrのバージョンは1.3.0で、1.2.0で作成したパッチがあたりません。(libsoxrのv1.2.0とv1.3.0はモジュールの構造が大幅に変わってしまいました)
今回の改造がv1.3.0に反映できるまで評価版という扱いにしました。
[更新履歴]
[注意]
このバージョンではmpd.confのresampler->libsoxr,dsd2pcmに関連する項目が変更されてます。
libsoxrについてはlibsoxrの設定を、dsd2pcmについてはdsd2pcmを参照して下さい。
libsoxrはリサンプリングによって発生するノイズを除去する為にFIRフィルターによるローパスフィルターを内蔵しています。
ローパスフィルターの係数は外部から指定するパラメータによってlibsoxr内で生成されます。
dsd2pcmからlibsoxrを利用できるように下記の変更を行いました。
dsd2pcmではdsd信号を1/8にダウンサンプリングします。その際にローパスフィルターをかけることによりPCM信号に変換します。ローパスフィルターの係数はdsd2pcmに内蔵されています。
下記の改造を行いました。
以前より、audio_formatはのサンプリング周波数の指定は下記のように基本周波数(44.1KHz or 48KHz)の倍率で指定できるようになっています。
"Xn1Ln2"
Xに続く数字(n1)で倍率を、Lに続く数字(n2)で倍率の上限を指定します。
基本周波数は入力のサンプリング周波数より決定します。
X16L16を指定した場合、705.6KHz(44.1KHz),768.0KHz(48.0KHz)で再生されます。
しかし、私の所有するDACの中には705.6KHzでの再生は出来るが、768.0KHzではノイズまみれになるものがありました。
このようなDACでは705.6KHzも諦めて"X8L8"にするしかありません。
この問題を回避する為に上限の指定を44.1KHz,48KHz個別に指定できるようにしました。下記のように指定します。
"Xn1Ln2,n3"
n2 : 44.1KHz系列 の倍率の上限
n3 : 48.0KHz系列 の倍率の上限
n3を省略した場合はn2が48.0KHzの上限になります。
705.6KHzは再生できるが、768.0KHzで問題のあるDACでは
"X16L16,8"
のように指定します。この場合の上限周波数は705.6KHz(44.1KHz),384.0KHz(48.0KHz)になります。
将来的にはaudo_formatの仕様を変更し、入力信号のサンプリング周波数毎に出力サンプリング周波数を指定できるような方向で検討
しています。
掲示板にて指摘されたのですが、v1.1.0ではympdの起動に失敗していました。これはympd自体のバグでしたのでそれを修正しました。
イメージファイル
パッケージ
boot ディスクの作成
インストーるメモリデバイスにboot loaderを書き込みます。
パッケージの展開
パッケージをbootイメージを書き込んだメモリデバイスに解凍して下さい。 パッケージはzipで圧縮されています。
利用目的および環境に合わせてlightmpd.conf,mpd.confを編集します。
利用目的別に下記のディレクトリにlightmpd.conf,mpd.confの雛形を用意しました。目的に応じて各ディレクトリのlightmpd.conf,mpd.confをそれぞれ
/lightMPD/ligtmpd.conf,/lightMPD/mpd.conf にコピーし、環境に合わせて編集して下さい。
/boot/grub/menu.lstで起動するkernelおよびkernelに対するパラメータを指定します。
kernelの指定
#
# rt kernel
#
kernel /boot/bzImage-5.0.3rt1 root=/dev/ram0 ro console=ttyS0,115200n8 ramdisk_size=81920 rootfstype=romfs
rootdelay=5 clocksource=tsc idle=poll processor.max_cstate=1 isolcpus=1 nohz_full=1 rcu_nocbs=1 lightmpd.systype=apu2
lightmpd.bootdev=/dev/sda1
#
# xenomai kernel
#
#kernel /boot/bzImage-4.14.89-xenomai root=/dev/ram0 ro console=ttyS0,115200n8 ramdisk_size=81920
rootfstype=romfs rootdelay=5 clocksource=tsc idle=poll processor.max_cstate=1 isolcpus=1 nohz_full=1 rcu_nocbs=1
lightmpd.systype=apu2 lightmpd.bootdev=/dev/sda1
kernel行の先頭に#があるとその行は無効になります。上記の場合(デフォルト)はrt kernelが有効になります。
boot diskの変更
boot disk は kernelの lightmpd.bootdev で指定します。
apu2のboot diskは下記のようになっています。
usb /dev/sda1
lightmpd.bootdev=/dev/sda1
SDメモリ /dev/mmcblk0p1
lightmpd.bootdev=/dev/mmcblk0p1
usb から起動する場合は lightmpd.bootdev=/dev/sda1とします。
diskにラベルを指定している場合はデバイス名にラベルを指定することもできます。
diskのラベルがLIGHTMPDの場合は
lightmpd.bootdev=LABEL=LIGHTMPD
とします。
パッケージ
lightMPDraspi-armv8-64-v1.2.0b2.zip
パッケージの展開
パッケージをfat32でフォーマットしたmicroSDメモリに解凍して下さい。パッケージはzipで圧縮されています。
config.txtの設定
eth_max_speed
Raspberry Pi 3B+ のイーサーネットは1Gbpsで動作しますが、1Gbpsで動作すると再生が不安定になります。eth_max_speed でイーサネットの最大速度を制限できます。
dtparam=eth_max_speed=100
とするとイーサネットが100Mbpsで動作します。
Raspberry Pi 3B では上記設定は行わないで下さい。上記設定を行うと動作が不安定になります。
lightmpd.conf,mpd.confの設定
利用目的および環境に合わせてlightmpd.conf,mpd.confを編集します。
利用目的別に下記のディレクトリにlightmpd.conf,mpd.confの雛形を用意しました。
目的に応じて各ディレクトリのlightmpd.conf,mpd.confをそれぞれ/lightMPD/ligtmpd.conf,/lightMPD/mpd.conf にコピーし、
環境に合わせて編集して下さい。
dacの設定
dacの設定は
で行います。
例
dtoverlay=hifiberry-dac
[mpd
....
dac=hifiberry-dac
....
下表に対応しているDACとそのdtoverlay,[mpd]->dacの対応を示します。
SabreBerry32について
new_western_elec様より提供のSabreBerry32のドライバーが新しくなりました。
変更点
amixer_sset='IIR Filter' 'Bypass' & 'Over Sampling Filter' 'Bypass'
dsd2pcmの係数は控えめにしてますが、この設定でもCPU負荷増大の為にCPU温度が上がります。dsd2pcmを使う場合は放熱に配慮して下さい。
放熱が不十分な場合はCPUのクロックが低下し、再生音がとぎれとぎれになります。