2014年12月23日火曜日

 RaspberryPi+VolumioでCDリッピング なスクリプトができました。

 色々やってみたんです。
 cddaなオーディオディスクって直接マウントできないんです。
 google先生に聞いてもRaspberryPiにオーディオCDマウントしてファイル参照する手順出てこないんです。

cdda-srcインストールしようとしたけど、ソースが古すぎて、Volumioのカーネルに合わなくてコンパイルできない。

 gvfsでマウントできるか試したけど、X11なGUI環境無いと走らない。

 mplayerなら直接再生できるけど、VolumioのI2S直出しは16Bitだと左詰めな32fsBitCLKで鳴らない。尤も、これだとVolumioのMPDの意味が無い。

 I2Sドライバいじって64fsBitCLKに修正と思ったけど、ソースのダウンロードがよくわからん。

 今のVolumioでできる事は、リッピングしたWAVの再生がメインならば、リッピング環境起こせばいいやって事で、RaspberryPiで簡単CDリッピングなスクリプトになりました。

 /mnt/SDにwavファイルを置きます。
 /mnt/USBに置くよりずっとずっとイイです。SDカードの空き領域を活用しましょう。

 必須なプログラムは、python cdparanoia cdrdao ejectの4つ。あと、Webに繋がる事。
 pythonは、既に公開してるインストール済みのイメージ使ってもらえばOK。
 cdparanoiaとcdrdaoとejectインストールすれば使えるようになります。

 apt-get -y install cdparanoia cdrdao eject<enter>
  でインストール完了です。
 エラーが出るようなら
 apt-get update<enter>
  してからもう一回試してください。今のLinuxって簡単でいいです。

 cdrdaoで、フリーなCDDBのデータベースからディスク情報ダウンロードして、
 cdparanoiaでtrack01.cdda.wav ~ trackXX.cdda.wavをリッピングして、
 /mnt/SDにディスクタイトルのフォルダ造って、
 Voumio用のプレイリスト生成しつつ、
 曲名.wavにリネームしながら/mnt/SD/ディスクタイトルフォルダに移動します。

 CDDBデータベースにディスク情報無かった場合のチェックはしてません。
 WEBに繋がってないと、プレイリストもフォルダも造らないし、移動もリネームもしません。
 実行したフォルダにtrack01.cdda.wav ~ trackXX.cdda.wavが残ります。

 お試しいただくにあたっては、

0.USB接続な外部電源CDドライブを繋いでVolumio起動。DVDでもブルレイでも何でも可。
  USB電源なドライブなら外部電源付きHUB挟む事。
  dmesg|grep usb<enter> 
   で、認識されてるか確認できます。

1.スクリプト本体は/mnt/USBの下に置いてください。
 作業領域がCD容量である700MB必用なので、/home/Voumioに置くと容量不足で全曲リッピングできません。700MB以上の空き容量のUSBメモリを刺してください。

2. SDカードの空き領域を/mnt/SDにマウントしてください。 やり方はgoogle先生に聞きましょう。

3.SSHでログイン。
 cd /mnt/USB<enter>
 chmod +x CD2SD.py<enter>
 ./CD2SD.py<enter>
 で、CD読み込んで、終わるとejectします。

4.VolumioでLibralyUpdateすると、BrowseにPlaylistが表示されます。ADDすれば再生できます。

 ダウンロードはここから CD2SD.py CD2USB.py Volumio1.51PI_CD2USB_FSLED.zip

SDカードの空き領域をマウントするのがめんどくさいと思ったら、CD2USB.pyを使ってください。
/mnt/USBにフォルダ造って、その下に落とします。中身の違いはSDとUSBだけです。

でもねぇ、曲はSDに置いた方がいいです。手間惜しまないで試してみてください。
 
 Linux領域広げて、空きをSDにマウントしたCD2SD.pyインストール済みイメージは、16GBなSDカードじゃないと入りません
 こっちはGPIOにスイッチ付けて、ポチっとGNDに落とせば起動する仕様。後程アップします。
 今置いてあるイメージは、2GBSDカードに入りますがCD2SD入ってませんので誤解無きように。

12月23日19:00以下追記
2GBカードに、CD2USB.py組み込んだイメージファイル用意しました。
全領域Linuxにしました。CD1枚分は余裕で取り込めます。転送先はUSBメモリです。
4GB、8GB、16GBなカードに書込みしたなら、空き領域を/mnt/SDにマウントしましょう。

解凍してSDカードに書き込んで、USBCDROM繋いで起動して、オーディオディスク入れてください。
GPIOの7番ピンにGNDタッチなスイッチ付けてください。
長押しすると(5秒ぐらい)スクリプトが起動して、WAVファイルがUSBメモリに生成されます。これがデフォルト。

SDに生成する仕様が希望なら、空き領域を/mnt/SDにマウントして、mpc_FSLED.pyの120行目前後のCD2USB.pyをCD2SD.pyに書きかえて、リブートしてください。

CDDBにデータが無いオーディオディスクのエラーハンドリングが組まれていません。
参照データが無いと、ルートにtrack01.cdda.wav~traackXX.cdda.wavが残ってしまいます。
プレイリストも造られません。

 参照データが間違っていても、正しく機能しません。playlistを手動編集してやり直し。
 たとえば2枚組CDで、タイトルがCD1がdisk1、CD2がdisk2なのに両方disk1なんて間違いが、まれに存在します。只で使えるデータベースはこの程度かって気もしますが、正しいデータが殆どです

 誰でも使える完璧な環境構築は難しいですね。CDDBが正しければ、とりあえずはボタン一発でリッピングできます。お試しください。
 私が使った感想は、プレイリスト自動生成が気分いいです。フォルダからマウスでクリックして曲選んでをせずとも、ワンクリックでアルバム再生できます。

12月24日19:00以下追記
 フリーCDDBって、使えそうで使えませんね。
 日本人アーティストのディスクのタイトル、曲名が、全角文字は?で返ってくるのは仕方ないのですが、登録された曲名の最初のAがAだったりするの。他は半角なのに。
 もうね、誰が登録したの?確認しろよ!って感じ。

 CD2SD.pyスクリプト内のcdrdaoコマンドはコメントアウト。
 で、手動でcdrdao discid>playlist実行して、手動でplaylistファイル修正して、手動で./CD2SD.pyが正しい使い方って事になります。手動で造るplaylist内の曲名は、全角OKです。
 ボタン一発CD->SDは無理筋でした。

 リッピングはWindows機の方が便利にできますかね。でもUSBメモリへのコピーはまだいいとして、Volumio内のSD領域にコピーは、ネットワーク経由じゃないとできないからCD2SD.pyのレゾンデトールは保たれるかと。
 えふ様みたいにNASに吸い上げがスマートでいいのかなぁ。


バグ報告大歓迎です。コメント欄にお願いします。 

7 件のコメント:

  1. スクリプト早速使わせてもらっています。

    追記がなされる前に試したことですが、SD空き領域を/dev/mmcblk0p4として/mnt/SDに自動マウントするようにしました。
    CD2SD.pyを走らせると確かにUSBメモリにはplaylist、/mnt/SDにはデータの実体が作成され、リッピング自体はうまくいったのですが、再生の仕方がよく分かりません。

    CD2USB.pyで操作した時、つまりリッピング・データもUSBメモリ上にある場合は、問題なく再生できます。このスクリプトの仕組を理解していないので、おかしな質問かもしれませんが。

    当方は普段のリッピングは、Vortexboxを使用しています。CDを挿入するとNASにflacデータを自動的に作成するようにしていまが、それとほぼ同じことをスクリプトでこなしているところがとても素晴らしいと思います。

    返信削除
    返信
    1.  評価ありがとうございます。
       コマンド必用なの忘れてました。
      cd /var/lib/mpd/music
      ln -s SD /mnt/SD
      やってください。
       「ejectされてから」VolumioのLibraryUPDATEすると、Brws表示に生成されたリストが表示されます。こいつをADDとかDD&Reprace&PLAYとかで再生します。
       実ファイルはTitle.m3uなプレイリストで、/var/lib/mpd/playlists/の下に置かれます。
       Browsすると/mnt/USBは見えるけど、 /mnt/SDは見えないんです。でも、プレイリストにはSD内を見に行くPATHが書かれてるから、プレイリスト越しに再生できます。

      USBに残るplaylistは残骸です。CDDBしくじった時の為に残してます。
      次のCDリッピングすると上書きされます。

      削除
    2. 回答ありがとうございました。再生できました。

      追加のご説明で納得です。たぶんそうなんだろうなという程度には想像していたのですが、シンボリックリンクまでは思いが寄りませんでした。

      それと大したことではないですが、スクリプトをWindows経由でvolumio側にコピーしたせいか、改行コードがCRLFに変更されてしまいます。viなどで「^M」を取り除く必要がありますので、スクリプトを単独でダウンロードして試される方はご留意ください。

      削除
    3.  再生できたようで何よりです。
       MPDの再生対象ディレクトリが/vat/lib/mpd/musicの決め打ちになっていて、ここに見えないと鳴らせないみたいです。

       VolumioにWindowsからテキストデータ移行する際、私はワードパッドでctrl+A,ctrl+Cして、SSH側ではnanoエディタ開いておいてペーストします。
       TeraTermならALT+CでコピーALT+Vでペースト。
       この手段だとCRLF気にならないです。

       dos2unixって便利コマンドあるんですけどVolumioでは削除してるみたい。

      削除
    4. コマンド間違ってた。
      ln -s /mnt/SD SD
      でした。

      削除
  2. 何か皆様の反応が無いですね(^^;

    当方は、残念ながらタンデム基板というかFN1242Aを入手し損ないましたので、この基板をお持ちの方が羨ましいのですが、基板をお持ちの方は是非、ネットワークなどを介さない音を聴いていただければ、その音に納得されると思いますよ。

    返信削除
    返信
    1. >何か皆様の反応が無いですね(^^;
       これはねぇ、皆様既に、リッピング環境はWindowsなり、MacOSなりで構築済みだから、RaspberryPiでやっちゃえって需要は無いのかもしれないです。
       
       色々試してみると、USBメモリとか、SD空き領域のマウントって、エラー起こすとリードオンリーに切り替わって使いにくいの。
       これならばって決定打が打てないモノです。

       CDDAをそのまま何とかするのって、実は凄い困難である事を、今更思い知らされた気がします。

      削除