なんかタイトルを弄っているうちに妙にごてごてしたものになってしまったなぁ…
意外とそういう情報は探しても見当たらない
音楽CDをmp3等に変換するためにcdparanoiaとかで切り出すという話はよく見つかるんだけど…
複製が作れる状態で保存するには, cdrdaoというツールで吸い出すのがよい模様, データCD(MODE1)だったらiso, 一般的にはbinとかrawとかの形式CDイメージとtocファイルの形で保存される
普通の音楽CDならさらにtoc2cueでtocファイルをcue sheetに変換すれば, bchunkでwavファイルに切り出せる
さて, mixed mode CD, つまりTrack 1にMODE1で記録PC用データがあってTrack 2以降にCD-DA音楽データがあるCDの場合どうなるんだろうか
cue sheetはCDイメージ内でのオフセットを指すのに時刻を用いる, CDデータのブロックサイズ2352バイト毎であり, これは音楽CDは16+16bit(ステレオ), 44100kHzなので176400 Bytes/sec1/75秒で, トラックの区切りなどは全てこれにalignされている
蛇足であるが, tocやcueの中の時刻表記は分mm:秒ss:フレームffであり, 12:34:74の次は12:35:00である, 今回の情報収集でもたまにこの辺を勘違いして35.85とかにするとエラーになるというユーザが見られたが, こういう理由で存在し得ない時刻なのである
さて, 話を戻すと, cdrdaoはmixed mode CDを取り込もうとするとMODE1の部分はEDC, ECCといったエラー訂正符号による検証を終わらせた後の1ブロックあたり2048バイトの元データのみを書き出し, オーディオ部分には訂正符号は正確にはCIRCと呼ばれる符号化がMODE1だろうとCD-DAだろうとなされているが, そこは復号した状態で読み出されるので無視無いので1ブロック2352バイトで読み出される
そしてtocファイルのCD-DAトラックについては, データ部分のオフセット(バイト単位)とCD-DA部分のオフセット(フレーム単位)が両方記録される
このtocファイルをcueファイルに変換しようとすると, cueファイル内での時刻表現がフレーム単位しかないので, MODE1トラックのエラー訂正コードの分だけそれ以降のオフセットに誤差が生じてしまい, bchunkを実行してもトラックの途中から次のトラックの頭までが1つのwavファイルとして切り出されてしまい, 面白くない
これを回避するには, binファイルをオフセットで分割してCD-DAトラックのみのオフセットの無いtocを作ってからcueに変換するか, cdrdaoでの取り込み時に--read-rawオプションをつけて, MODE1トラックもブロックサイズ2352バイトで取り込む羽目になる, 前者は面倒だし後者だとそのbinファイルをmount -o loopできなくなるのでやはり面白くない, どちらにせよ容量の無駄が起こる訳だし
ここまで前フリということで, cueファイルを経由せずに直接toc(と対応するbin)から各CD-DAトラックをwavに変換するスクリプトを作ったのでISerたるものここはNYSLを使うのがネタってものでしょNYSLで公開します
言うまでも無いけど, 著作権法その他の法律に触れない範囲で使ってくださいね, NYSLだからどうしようと利用者の勝手といえばそうなんだけど
因みにcdparanoiaとかその辺を使ってCDから直接切り出せばこんな必要ないけど, 敢えてこんなことをやってる理由は, 単純に2回もスキャンするのは面倒, 無駄だと思うこととか気分的問題とかそういったところに過ぎません, まぁcdrdaoで吸い出した結果をCDドライブの無いマシンに持っていってとかそういうことは出来ますが, それはあと付けの理由に過ぎません
この日記でファイルを公開するときには大抵images/ディレクトリに放り込むことが多いし, 実際にimages/以下には画像以外のファイルは2つしか無いんだけど, なんか名は体を現して無いので気持ち悪い
このディレクトリ名をfilesとかに改めるとか画像以外をfiles/にお引越しさせたりするべきなんだろうか, でも画像以外のファイルを公開することなんて殆ど無いので意味無いよなとも思ってしまうわけで…