もぐてっく

人は1つ歳をとるたび、1ビットづつ大きくなれると信じてた。

Alcohol52%のイメージファイルmdf + mdsをwav + cueに変換する

前回めでたく成功したbin + cue→wav + cue変換。

bin + cueをwav + cueに変換する - もぐてっく

でも、うちのライブラリはbin + cueじゃなくてAlcohol52%ネイティブのフォーマットであるmds + mdfファイルなのよね。

ひとつずつ再変換しても良いんだけど、超面倒だよね。うん。面倒だ。

まぁ、mdfとbinは完全互換なのは調査済みだから、後はmdsファイルを適当にパースしてcueファイル作れば良いんじゃね?

(mdsファイルをテキストエディットで開く)

バババ、バイナリィィィィィィィィィィィィィィ!?


バイナリファイルでした(泣)。


でも、こんなことではめげません。めげずに調べます。


mdsファイルのデータ構造はここにドキュメントがあるのですが、所々計算が間違っててどうも怪しいです。

http://developer.berlios.de/docman/display_doc.php?docid=840&group_id=2545

なので、大変参考にしつつ(ありがとうございます)hexdumpとにらめっこしながらそれっぽい構造体を作ってみました。


これでmdsファイルの中身が読めるようになりました。
でも、それだけではダメでした。ダメダメでした。

mdsのdata_blockに格納されてる値でcueファイルを作ると、全体的に2秒ずれてしまいました。単純に2秒引けば良いんですけど、なにかとてもきもち悪いから調べてみました。


なんでも、CD-DAは「きかくじょう」、トラック1の前に2秒(150フレーム)の無音区間(プリギャップ)が必要なのだそうです。

そして、その2秒の無音区間は無駄なので、mdfファイルからは削られてます。

でもでも、mdsは2秒のプリギャップを削る前のタイムスタンプを保持しているので、件のズレが発生します。

多分ヘッダのpregap_corrに入ってる-150が削ったプリギャップだと思うので、これを75で割って引き去るようにしました。


はい。これで出来ました。

moguno/mdsmdf2cuewav · GitHub

第一引数にmdsファイルを指定すると、同じフォルダにcueファイルとwavファイルが出来ます。


これで本気でWindowsが捨てられる準備が出来ましたv