見出し画像

え!?!この時代にubuntuでCDリッパーを作れって!!?!できらぁ!!!

ということで今回は自宅サーバで動いてるubuntu君の中に
CDリッパ―の機能を実装するお話になります。



CDリッパ―ってなんぞ

動機

今回これを作ろうとした理由としてアマゾンで買った激安のmp3プレイヤーに楽曲を取り込むのにCD大量に読み込むのが大変で自動化したいなって思ったのが原動力です。


それっぽい製品はないのか

お金を出せばなんでも買えるこの時代、自動でCDを取り込んでオーディオファイルに変えてくれる機械の一つや二つありそうなものです。

調べてみたらこれぐらいしかなく、しかも”””オーディオグレード”””の製品になるためちょっと値が張っている。。。。


こんなもの学生の身にはあまりまくるってことでいっそのこと自作してしまおうとケツイがみなぎったってわけです。


Ubuntu Desktop とServerでの検証

GUIでやってみた

CDドライブがついてないパソコンをメインで使っているのでこれじゃあかんと。

実家から持ってきたドライブがついてるパソコンで一回やってみようってことでUbuntu Desktopをインストールしてやってみました

基本的にやってることは下の記事と同じなのでGUIでやりたい人はそちらの方をご参照ください。

基本的にやってることはasunderとlameというパッケージをダウンロードしてCDDB(CDデータベース)のURLとポートを変えることでできます。

ここでやったことは次のCLIでも生きるのでぜひ一度こちらを試してみてください。

Ubuntu Serverでやってみよ!

上記のGUIでもお金がかかっていないので最高なのですが、いちいち画面を操作するのがめんどくさいのでそこを自動化させたいと思いツールや先駆者がいるか探しました。

結果自分のやりたいことに一番近いのはこの記事かなって感じで見つけました。偉大なる先駆者に敬礼。


このCLIで使用するのはabcdeというツールだそうで、一見ふざけたパッケージ名ですね。

sudo apt update
sudo apt full-upgrade
sudo apt install abcde


これをapt install abcde した後に見慣れない画面が私の場合は表示されました。

情報よわよわの私はびびってスクショ取るの忘れてました。これはネットから引用してきたものです。

postfix configuration の画面
(https://www.kagoya.jp/howto/it-glossary/mail/postfix/)

なんとなく怖かったのでNo configuration を選択して進んだのですがこれであってるのでしょうか教えて有識者。

そんなこんなでインストールできたabcde、
もしリッピングをした後のファイル形式をmp3やwavなどにしたい人は今のうちにlameもインストールしておきましょう。

いざ実装

設定ファイルを見てみる

設定ファイルの場所は /etc/abcde.conf です。

とりあえず見てみるとたっっくさん文字書いてありますね。

ここで出力のファイル形式や出力ディレクトリ、CDDBの選択、読み取りが終わった後の処理などをいじります。

じゃけん忘れないようにデフォのコンフィグはバックアップ取っときましょうね

いじる項目は、

  • CDDBMETHOD
    コメントを外してCDDBに切り替えます。musicbrainzでは日本の曲の対応が甘いので変更します。

    CDDBMRTHOD=cddb

  • CDDBURL
    今回使うのは freedbtest.dydns.org です。日本国内対応したCDDBなのでこれが一番だと思います。これを無料で公開してるなんて最高ですね運営者大好き。

    CDDBURL="http://freedbtest.dyndns.org:80/~cddb/cddb.cgi"

  • CDDBPROTO
    処理の際の言語を選択します。これが 6 だと UTF8 、日本語対応になるのでこれにしときます。

    CDDBPROTO=6

  • INTERACTIVE
    自動化したいのでプログラムと会話しないようにします。これは n ですね。

    INTERACTIVE=n

  • Encoders
    今回はFlacで出力したいのでここのFLACを有効化しときます。今後 wav 同時出力実装したいので今後の記事で更新していきたいと思います。

    FLAC=flac

  • EYED3
    これでファイルのタグ付けを行います。有効化しときましょう。

    EYED3=eyeD3

  • ACTIONS
    これはCDが突っ込まれた時の動作を順番で指定するものです。CDDBにアクセスしたのちにアルバムアートを取得、これをタグ付けしたのちに読み込み、エンコード、タグの編集を行ういます。正直ここ分からないけど書いたら動いた。

    ACTIONS=cddb,getalbumart,embedalbumart,read,encode,tag,move,clean

  • OUTPUTDIR
    ここで出力先のディレクトリを選択します。私が使ってるUbuntu君はNASを兼ねてるのでマウントした外付けハードディスクを選択してます。

    OUTPUTDIR=/mnt/usbhdd/flanker/music/abcde

  • OUTPUTTYPE
    これで出力ファイル形式を選択します。私はFlacを選択しました。今後 wav 同時出力実装したいので今g(ry

    OUTPUTTYPE=flac

  • OUTPUTFORMAT
    ここで上で選択したディレクトリ内の出力形式を決定します。ここは宗派あると思うのでよしなに

    OUTPUTFORMAT='${ARTISTFILE}/${ALBUMFILE}/${TRACKNUM}-${TRACKFILE}'

  • VAOUTPUTFORMAT
    上のやつは一人のアーティストアルバムの場合で、複数アーティスト参加のアルバムは下の形式に従います。

    VAOUTPUTFORMAT='${ARTISTFLIE}/${ALBUMFILE}/${TRACKNUM}-${TRACKFILE}-${ARTISTFILE}'

  • ALBUMARTFILE, ALBUMARTTYPE
    アルバムアートの保存形式と保存ファイルの拡張子を選択します。

    ALBUMARTFILE='cover.jpg'
    ALBUMARTTYPE='JPEG'

  • EJECTED
    処理が終わったのちにどのようなCDの排出を行うかをここで決定します。終わった後に自動的に出てきて欲しいのでここは y を選択しときます。

    EJECTCD=y


これで設定ファイルの編集はできました。abcdeを動かす際に参照する設定ファイルは選択できるので、

用途に合わせて別のコンフィグファイルを設定するといいかもです。

自動起動

次にCDROMが挿入されたら自動的にスクリプトを実行するためにトリガーみたいなのを設定します。

udevというものを活用して挿入を検知します。

sudo nano /etc/udev/rules.d/99-audio-cd-ripping.rules

ここでルールファイルを編集します。

SUBSYSTEM=="block", KERNEL=="sr0", ACTION=="change", RUN+="/bin/systemctl start rip-audio-cd@sr0.service"


次にudevからの起動で動くサービスを作ります。これの次に作る実行ファイルを呼び出すものですね。

sudo nano /etc/systemd/system/rip-audio-cd@sr0.service

これの中身のファイルは以下のものを入力します。

[Unit]
Description=Rip audio CD on insertion

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/audio-cd-ripper.sh %I


実行、ログの記録をしてくれるサービスを登録

sudo nano /usr/local/sbin/audio-cd-ripper.sh

ここのファイルの中身は以下の物です。

#!/bin/bash
LOGFILE=/var/log/cdrip.log

START=`date`
echo "Started at ${START}" >> $LOGFILE
(
  flock -x -w 7200 200 || exit 1

  abcde -D 2>&1 >> $LOGFILE
  rc=$?
  if [[ $rc != 0 ]] ; then
    eject
    exit $rc
  fi
) 200>/var/lock/.audio-cd-ripper.lock

FINISH=`date`
echo "Finished at ${FINISH}" >> $LOGFILE

これでログの記録ができるようになるので作っときましょう。

最後にファイルに実行権限をつけます。

sudo chmod a+x /usr/local/sbin/audio-cd-ripper.sh


いざ動作

昔過ぎて忘れた。。。。

この記事執筆中はもうすでに何とか動くように試行錯誤したのちのためほぼ何を試行錯誤したのか忘れました許して

ファイルの実行権限うんぬんとかコンフィグファイルのディレクトリパスをコメントアウトしたままで出力後のファイルが行方不明になったりもろもろありました。試行錯誤してどうぞ。


結びに

というわけで久しぶりにNote書いたわけですが、諸兄の役に立つことを期待して結びにしたいと思います。

また別のブログに複数出力ファイルをコンフィグ切り替えで実現する方法があったため、今後の課題としてやりたいと思います。

それでは充実した自宅サーバ生活を

この記事が気に入ったらサポートをしてみませんか?