Raspberry Pi を CD リッパーにする
最近、音楽を聴くのはサブスク (Spotify) がメインで、CDなんて、もう、何年も購入していませんが、約400枚くらいのCDを所蔵しています。もはや、CDプレイヤーすら所有しておらず、PCにすらCD-ROM/DVDドライブはついていません。そこで、 NASに音源を配置して、スマフォやタブレットから音楽を聴けるようにしたいと思います。
とは言え、さすがに400枚を1枚づつリッピングしていくのは苦行なので、Raspberry Piを使って、ドライブにCDを入れたらリッピングを開始する、完了したらドライブからCDが出てくるシステムを作りたいと思います。もちろん、Raspberry Piではなく、普通のPCにLinuxをインストールしても実現できます。
用意するもの
- Raspberry Pi (microSD、電源等を含む)
- 外付けCD-ROM/DVDドライブ
- USBメモリ ※ 必要に応じて
Raspberry Piのモデルはどれでも大丈夫だと思いますが、私はRaspberry Pi 4 Model Bを使用しました。おそらく、エンコードにかかる時間が変わってくると思いますが、ドライブの読み込み速度の方が影響が大きいかもしれません。Raspberry Pi 4Bの場合、1枚当たり10 ~ 20分くらいでした。
DVDドライブに関しては、接続がUSB Type Aのものであればどれでも大丈夫だと思いますが、必ず ACアダプタ で給電してください。Raspberry Piは電源供給が弱いので、USBバスパワー駆動では、モーターなど駆動部が動作しません。
リッピングしたデータは、そのままmicroSDに保存してもよいですが、容量やその後の運用のことを考えてUSBメモリに保存することにしました。ファイルサイズはコーデックやビットレートによって変わってきますが、FLACでエンコードした場合には、アルバム一枚当たり300MB前後でした。
構築
Raspberry Pi OS のインストール
Raspberry Pi Imager を用いて、 Raspberry Pi OS (32-bit)
(Disktop版)をインストールします。 Raspberry Pi OS Lite (32-bit)
(CLI版)でも大丈夫ですが、この後の設定が、一部、変わってきます。
sshでRaspberry Piにリモート接続するために、sshを有効化します。OSイメージを書き込んだmicroSDのルートフォルダに、Windows のエクスプローラーから ssh
という空ファイルを作成します。(当然、Raspberry Pi にキーボードとディスプレイをつなぐのであれば不要です)
ツールのインストール
Raspberry Pi にログインして、CDのリッピングに必要なツールをインストールしていきます。
最初に、OSを最新の状態にしておきます。
sudo apt update
sudo apt full-upgrade
エンコーダーとして abcde をインストールします。コーデックは FLAC を使います。AAC や mp3 を使いたい人は、インストールするコーデックを適宜変更してください。
sudo apt install abcde flac id3v2 eyed3 eject
abcde の設定
abcde の設定ファイルを編集します。
cd /etc
sudo cp abcede.conf abcede.conf.org
sudo nano abcde.conf
Key | Value |
---|---|
CDDBMETHOD |
freedb.freedb.org がもう有効ではないので、 cddb を設定します。See: https://abcde.einval.com/bugzilla/show_bug.cgi?id=155/ |
CDDBURL | 同上 |
CDDBPROTO | 日本のアーティストを扱いたいので 6 (utf-8) を設定します。 |
INTERACTIVE | 自動でリッピングするため n を設定します。 |
EYED3 | メタデータを編集するために eyeD3 を使用します。 |
ACTIONS | エンコードしたときに実行するアクションを記述します。エンコード時に、プレイリストの作成と、カバーアートの埋め込みも行うようにしています。 |
OUTPUTDIR | 出力先を設定します。/media/pi/<LABEL> というパスにマウントされます。環境に合わせて適宜変更します。 |
WAVOUTPUTDIR | 一時作業領域を設定ます。 |
OUTPUTTYPE | コーデックとして flac を指定します。使用したいコーデックに合わせて適宜変更します。 |
OUTPUTFORMAT |
アーティスト名 / アルバム名 / トラック番号 .曲名 という形式でファイルを出力します。 |
VAOUTPUTFORMAT | 複数のアーティストが参加するアルバムは Compilation / アルバム名 / トラック番号 .アーティスト名 -曲名 という形式でファイルを出力します。 |
PLAYLISTFORMAT | アルバムのプレイリストです。 |
VAPLAYLISTFORMAT | 複数のアーティストが参加するアルバムのプレイリストです。 |
ALBUMARTFILE | カバーアートは cover.jpg という名前で保存します。 |
ALBUMARTTYPE | カバーアートは JPEG 形式で保存します。 |
EJECTCD | リッピング完了後にディスクを排出するように y を設定します。 |
2021-07-13 CDDB について追記
freedb.freedb.org
がもう有効ではないらしいので、 CDDBMETHOD
に cddb
を追加しました。
詳しくは https://abcde.einval.com/bugzilla/show_bug.cgi?id=155/ を参照してください。
自動リッピングの設定
DVD ドライブに CD が挿入されたら、自動的にリッピングが開始されるような設定を行います。仕組みとしては、 udev でディスクの挿入を検出し、sysytemd のサービスを起動します。
udev rule の作成
udev rule を作成します。
sudo nano /etc/udev/rules.d/99-audio-cd-ripping.rules
systemd の設定
systemd に udev から起動されるサービスを追加します。
sudo nano /etc/systemd/system/rip-audio-cd@sr0.service
実行ファイルの作成
実際にリッピングを行う実行ファイルを作成します。
sudo nano /usr/local/sbin/audio-cd-ripper.sh
ファイルに実行権限を付けます。
sudo chmod a+x /usr/local/sbin/audio-cd-ripper.sh
以上で設定は完了です。
動作確認
FAT32にフォーマットされたUSBメモリを挿し、マウントされていることを確認します。
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 7332696 3226080 3755352 47% /
... (snip) ...
/dev/sda1 30833664 512 30833152 1% /media/pi/MEDIA
ドライブに CD を挿入します。 /var/log/cdrip.log
にログが出力されます。候補が複数見つかった場合には、1番最初のものが使用されます、
Started at Sun 11 Jul 2021 08:54:05 PM JST
Grabbing entire CD - tracks: 01 02 03 04 05 06 07 08 09 10 11 12 13
Retrieved 3 matches...
#1 (Musicbrainz): ---- Alanis Morissette / Jagged Little Pill ----
1: All I Really Want
2: You Oughta Know
3: Perfect
4: Hand in My Pocket
5: Right Through You
6: Forgiven
7: You Learn
8: Head Over Feet
9: Mary Jane
10: Ironic
11: Not the Doctor
12: Wake Up
13: You Oughta Know (Jimmy the Saint Blend) / Your House
#2 (Musicbrainz): ---- Alanis Morissette / Jagged Little Pill ----
1: All I Really Want
... (snip) ...
13: You Oughta Know (Jimmy the Saint blend) / Your House (a cappella)
Finished.
Finished at Sun 11 Jul 2021 09:17:35 PM JST
リッピングが完了すると、CDがドライブから排出され、指定されたディレクトリにファイルが出力されていることが確認できます。
$ tree /media/pi/MEDIA/MUSIC/
/media/pi/MEDIA/MUSIC/
├── Alanis_Morissette
│ └── Jagged_Little_Pill
│ ├── 01.All_I_Really_Want.flac
│ ├── 02.You_Oughta_Know.flac
│ ├── 03.Perfect.flac
│ ├── 04.Hand_in_My_Pocket.flac
│ ├── 05.Right_Through_You.flac
│ ├── 06.Forgiven.flac
│ ├── 07.You_Learn.flac
│ ├── 08.Head_Over_Feet.flac
│ ├── 09.Mary_Jane.flac
│ ├── 10.Ironic.flac
│ ├── 11.Not_the_Doctor.flac
│ ├── 12.Wake_Up.flac
│ ├── 13.You_Oughta_Know_(Jimmy_the_Saint_Blend)__Your_House.flac
│ └── albumart_backup
│ └── cover.jpg
├── Alanis_Morissette-Jagged_Little_Pill.flac.m3u
プレイヤーアプリで確認すると、メタ情報が入力され、カバーアートもファイルに埋め込まれていることが確認できます。
まとめ
udev
, systemd
を使って、abcde
によるエンコードを半自動化することができました。
Discussion
ドライブ10台ぐらい繋いで平行にたくさんできたら需要あるかも?