lightMPD v1.2.0(評価版)について
概要
今回のバージョンでは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に反映できるまで評価版という扱いにしました。
[更新履歴]
- lightMPDapu2-v1.2.0b1 の公開
- lightMPDapu2-v1.2.0b2 の公開
- dsd2pcmでphase_response=50 以外のときに正しく動作しなかったバグの修正
- 2019.08.24
- RaspberryPi 3B,3B+ 用のlightMPDdaspi-armv8-64-v1.2.0b1を公開
- 2019.10.04
- dsd2pcmの係数計算に一部誤りがあったため、それを修正しました
- mpdの更新に伴ってdsd2pcmのパラメータの見直しも行いました
- apu2版はkernelの更新を行いました
- apu2用のパッケージ
- raspi 3b用のパッケージ
- raspi 4b用のパッケージ
[注意]
このバージョンではmpd.confのresampler->libsoxr,dsd2pcmに関連する項目が変更されてます。
libsoxrについてはlibsoxrの設定を、dsd2pcmについてはdsd2pcmを参照して下さい。
libsoxrの改造点
libsoxrはリサンプリングによって発生するノイズを除去する為にFIRフィルターによるローパスフィルターを内蔵しています。
ローパスフィルターの係数は外部から指定するパラメータによってlibsoxr内で生成されます。
dsd2pcmからlibsoxrを利用できるように下記の変更を行いました。
- libsoxrで作成された係数を外部のプログラムから使用できるようにしました
- dsd2pcmでその係数を使用します。
- 整数倍のリサンプリングにおいては1段のローパスフィルターで処理できるようにしました
- libsoxrではサンプリング条件によっては複数のローパスフィルターで処理される場合があります。
- 係数がずれるバクの修正
- 1.3.0では修正されています。
mpd の改造点
libsoxrプラグインの強化
- ローパスフィルターの係数を詳細に設定できるようにしました
- mpdではquality というパラメータで係数を設定できましたが、libsoxrで設定できるパラメータを全てを使って設定できるようにしました。
- サンプル条件毎にローパスフィルターの係数を設定できるようにしました
- libsoxrが生成したフィルターの諸元と係数をファイルに出力できるようにしました。
- 係数ファイルの出力形式は数字ですが、このファイルをPC上のoctaveなどのソフトを用いて視覚的に確認することができます。
dsd2pcmの強化
dsd2pcmではdsd信号を1/8にダウンサンプリングします。その際にローパスフィルターをかけることによりPCM信号に変換します。ローパスフィルターの係数はdsd2pcmに内蔵されています。
下記の改造を行いました。
- 出力のサンプリング周波数を指定出来るようにしました
- ローパスフィルターの特性をリサンプリングの条件毎に指定出来るようにしました
- ローパスフィルターの係数をlibsoxrで作成出来るようにしました
- ローパスフィルターをlibsoxrと連携できるようにしました
- これにより、dsd2pcm単体では不可能だった dsd64(2822400Hz)->pcm16(705600Hz) の変換も可能になります。
audio_formatの変更
以前より、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の仕様を変更し、入力信号のサンプリング周波数毎に出力サンプリング周波数を指定できるような方向で検討
しています。
ympdのバグ修正
掲示板にて指摘されたのですが、v1.1.0ではympdの起動に失敗していました。これはympd自体のバグでしたのでそれを修正しました。
apu2版(64bit)
- rootイメージ buildroot 2017.11版
- kernel 5.2.17rt7
- 4.119.69-xenomai
- mpd mpd-0.20.23rt
- mpdupnp-0.20.23rt
ダウンロード
イメージファイル
パッケージ
インストール方法
boot ディスクの作成
インストーるメモリデバイスにboot loaderを書き込みます。
- イメージファイル(apuboot2556m.img.zip)をダウンロードする
- イメージファイルを解凍する
- イメージファイルはzipで圧縮されてます。それを解凍してください。
- イメージファイルの書き込み
- DDWin等のツールをつかってイメージファイルをusbメモリまたはSDメモリに書き込んで下さい。
パッケージの展開
パッケージをbootイメージを書き込んだメモリデバイスに解凍して下さい。 パッケージはzipで圧縮されています。
lightmpd.conf,mpd.confの設定
利用目的および環境に合わせてlightmpd.conf,mpd.confを編集します。
利用目的別に下記のディレクトリにlightmpd.conf,mpd.confの雛形を用意しました。目的に応じて各ディレクトリのlightmpd.conf,mpd.confをそれぞれ
/lightMPD/ligtmpd.conf,/lightMPD/mpd.conf にコピーし、環境に合わせて編集して下さい。
- /lightMPD/conf/standalone
- standalone
- /lightMPD/conf/upnpgw-nas
- upnpgw経由のNAS接続
- /lightMPD/conf/upnpmode
- upnpのレンダラーとして動作する
- /lightMPD/conf/upnpplayer
- upnpgw経由のupnpレンダラーとして動作する
/boot/grub/menu.lstの設定
/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
とします。
Raspberry Pi 3B,3B+(64bit)
- rootイメージ buildroot 2017.11版
- kernel 5.0.2
- mpd mpd-0.20.23rt, mpdupnp-0.20.23rt
- 対応DAC
- HiFiBerry DAC+
- HiFiBerry DAC+ PRO
- HiFiBerry DIGI+
- HiFiBerry DIGI+ PRO
- new_western_elec SabreBerry32
- allo BOSS I2S DAC V1.2
- USB
ダウンロード
パッケージ
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 にコピーし、
環境に合わせて編集して下さい。
- /lightMPD/conf/standalone
- standalone。NASをマウントしてNAS上の音源を再生する
- /lightMPD/conf/upnpgw-nas
- upnpgw経由のNAS接続
- /lightMPD/conf/upnpmode
- upnpのレンダラーとして動作します
- /lightMPD/conf/upnpplayer
- upnpgw経由のupnpレンダラーとして動作する
dacの設定
dacの設定は
- config.txtのdtoverlay
- lightmpd.confの[mpd]->dac
で行います。
例
- config.txtのdtoverlay 設定例
dtoverlay=hifiberry-dac
- lightmpd.confの[mpd]->dac 設定例
[mpd
....
dac=hifiberry-dac
....
下表に対応しているDACとそのdtoverlay,[mpd]->dacの対応を示します。
SabreBerry32について
new_western_elec様より提供のSabreBerry32のドライバーが新しくなりました。
変更点
- slave動作時に8fs(352.8KHz,384KHz)での再生が可能になりました
- mixerで指定できる項目が増えました。詳しくはnew_western_elecのサイトを参照して下さい
- amixer_ssetで
amixer_sset='IIR Filter' 'Bypass' & 'Over Sampling Filter' 'Bypass'
- のように設定すると、DAC内部のデジタルフィルターは使わなれなくなります。
注意事項
dsd2pcmの係数は控えめにしてますが、この設定でもCPU負荷増大の為にCPU温度が上がります。dsd2pcmを使う場合は放熱に配慮して下さい。
放熱が不十分な場合はCPUのクロックが低下し、再生音がとぎれとぎれになります。