May 04, 2021

mpdでCD再生に対応する(2022.03.29./.08.16./2025.04.08. 追記)

今回は備忘録。
うちのメインシステムにはCDプレーヤーがない。
でも、リッピングする前に聴きたいと思うこともある。そこを何とか出来ないかということ。

参考にした記事はこちら。
海上忍のラズパイ・オーディオ通信(10)ラズパイ・オーディオで音楽CDのダイレクト再生に挑戦!果たして使い物になるか?
https://www.phileweb.com/review/article/201602/12/1965.html

この記事にもあるけど、トラックの選曲が出来ないのでリッピングしたほうが便利に使えるしCDドライブがうるさいので、限局的な使用に留まるだろうとは思った。けどまあ、使えるようにしたよ、ということで。これはこれで楽しい。

今はテスト環境で運用中。
sshでサーバにログインし「mpc」でCDをmpdのプレイリストに登録して鳴らしている。CDからmpdが768kHzにアップサンプリングし、PPAPでメインシステムに送る。
リップしたファイルより音がいい?
これは、多分に気のせいだと思う。ブラインドでは区別不能だ。

手順をごく簡単に書いておく。Googleにアップしたアップサンプリングサーバーを加工する。
まず、tceでCD関係のtcz、以下をインストール。

libcdio.tcz
libcdio-dev.tcz
libcdio-paranoia.tcz
libcdio-paranoia-dev.tcz

続いて、mpdを再インストールする必要がある。
mpdがcdio-paranoiaに対応していないからだ

tc@box:~$ mpd -V
Music Player Daemon 0.20.20

Protocols:
 file:// http:// https:// alsa://

まず、インストールされているのをアンインストールする。
/mnt/sda1/tce/optional にあるmpd関係を削除。
続いて、/mnt/sda1/tce/onboot.lstのmpdの記載を#でコメントアウト(今回、行削除せずコメントアウトでも問題ないことを確認した)。
これで再インストール行程に入れる。

sudo ntpclient -s -c 1 -h ntp.nict.jp
wget https://www.musicpd.org/download/mpd/0.20/mpd-0.20.20.tar.xz
xz -dv mpd-0.20*
tar -xf mpd-0.20*
ls
cd mpd-0.20*
./configure --enable-pipe-output --enable-cdio_paranoia-input
make
mkdir ../mpd
sudo make DESTDIR=../mpd install

cd
mksquashfs mpd mpd-0.20.20.tcz
md5sum mpd-0.20.20.tcz > mpd-0.20.20.tcz.md5.txt
sudo mv *tcz* /mnt/*1/tce/optional
sudo vi /mnt/*1/tce/onboot.lst
sudo rm -rf mpd*

これで、mpdがCD-DAに対応。

tc@box:~$ mpd -V
Music Player Daemon 0.20.20

Protocols:
 file:// http:// https:// cdda:// alsa://

.mpdconfにcd入力対応の設定したのを書き忘れていたので追記。
下記記載している。

input {
    plugin "cdio_paranoia"
    speed "1"
}

2022.03.29. 追記。
上記の設定だと、ときにCDの読み込みが間に合わず音が途切れる。
speed "4" ぐらいにしておいた方がいいようだ。音質への影響はないように思う。

2022.08.16. 追記。
音が途切れるのはスピードの問題ではないようだ。
ドライブが正確に読み取れていないかもしれないと判断した時に、再読み込みを行うかどうかを設定できるようなんだけど、デフォルトはどうやら、しっかり読み込む設定になっているようで、繰り返し読み込むことで、音が途切れるらしい。
下記のように設定を書き換えたら、音が途切れなくなった。

input {
    plugin "cdio_paranoia"
    speed "4"
## mode "overlap"
mode "disable"
}

overlapという設定も出来るけど、これでも音が途切れる。読み込み速度を例えば32倍など設定し早くしても、再読み込みするほうが時間がかかるものらしい。

参考にmpdのマニュアルのアドレスと引用。

Music Player Daemon 0.24~git documentation » Plugin reference
cdio_paranoia
https://mpd.readthedocs.io/en/latest/plugins.html#cdio-paranoia

Setting

Description

default_byte_order little_endian|big_endian

If the CD drive does not specify a byte order, MPD assumes it is the CPU’s native byte order. This setting allows overriding this.

speed N

Request CDParanoia cap the extraction speed to Nx normal CD audio rotation speed, keeping the drive quiet.

mode disable|overlap|full

Set the paranoia mode; disable means no fixups, overlap performs overlapped reads, and full enables all options.

skip yes|no

If set to no, then never skip failed reads.

2025.04.08. 追記。

今更の追記になるが、音が途切れる原因は cdio_paranoia の設定ではなく、audio_buffer_size、buffer_before_play の問題と判明した。これらの現在の設定は下記の通り。環境によって調整が必要な可能性がある。

audio_output_format   "384000:32:2"
audio_buffer_size   "32768"
buffer_before_play   "75%"

input {
    plugin "cdio_paranoia"
    speed "4"
## mode "overlap"
mode "disable"
skip "yes"
}

操作は「mpc」から行う必要があるので、インストール。
当初は最新のバージョン0.33をインストールしようとしたが、例によってmesonを使うので慣れないので0.28にした。

wget https://www.musicpd.org/download/mpc/0/mpc-0.28.tar.xz
xz -dv mpc*
tar -xf mpc-0.28*
cd mpc-0.28
ls
./configure
make
mkdir ../mpc
sudo make DESTDIR=../mpc install

cd
mksquashfs mpc mpc-0.28.tcz
md5sum mpc-0.28.tcz > mpc-0.28.tcz.md5.txt
sudo mv *tcz* /mnt/*1/tce/optional
sudo vi /mnt/*1/tce/onboot.lst
sudo rm -rf mpc*

これでインストール完了。
使うには、CDドライブを表すデバイスファイルのパーミッション変更が必要とのこと。
/opt/bootlocal.sh にコマンド追記し、OS起動時に変更するように設定しておく。

sudo vi /opt/bootlocal.sh

chmod 666 /dev/sr0

filetool.sh -b
sudo reboot

設定保存し、再起動。これでCDから音を出すことができる。
CDドライブが2つ以上ある時はどうなるかは検証していない。

CDをドライブにセットしsshから「mpc add cdda://」と打つことで、CDをmpdのプレイリストに登録。
続いて「mpc play」で、音が出る。
CD1枚が1つのファイルとして認識されるので不便だけど、通しで聴くとか、それでもいいならという感じ。

音量調整や再生停止程度のことはmpcで出来る。「mpc volume 70」「mpc stop」こんな感じ。
下記、操作説明書のアドレス。

mpc 0.34 documentation
https://www.musicpd.org/doc/mpc/html/

Edit this entry...

wikieditish message: Ready to edit this entry.
















A quick preview will be rendered here when you click "Preview" button.