先日から音楽CDをbin+cueファイルにイメージ化して現物を捨てる整理法を実行しているわけですが、bin+cue形式って割と扱いにくいんですよね。理想的にはbin+cueを複数曲が入ったデータとして直接再生できるプレーヤーとか無いし、ほかのソフトでも使いたいのでbin+cueから直接トラックごとのwavファイルが抽出できればそれでいい。
結構前からDAEMON Toolsという仮想ドライブソフトを使えばBIN+CUEを直接マウントして使えることは分かってるんだけど、いつの間にかアドウェア付きになってたり、そもそもいつまでサポートがあるか分からないしLinuxでは使えないしOSSでも無いのでこれだけに頼りたくない。Daemon Tools自体は使い勝手も良いし、プロテクト付きディスクのエミュレーションとかあって何かと有用なのは間違いないのだが。
—
ドライバを入れたりせず、もっとシンプルにbin+cueをwavなりisoに分解するには、Linuxだとbchunkというソフトがあって、Debianだとapt-getですぐ使える。で、Windowsでも使えないかと思って探したらokwaveでまさに同じようなことを考える先人を見つけた。
http://okwave.jp/qa/q3629100/a11028949.html
Q:bin+cueをbchunkでISOに変換したいのですが、bchunkのダウンロードの仕方がわかりません。
A:ちゃんと対応 OS とか書いてあるんだから読もうよ. それはあなたのシステムでは使えません. 別のものを探してください.Img Burn とかあるみたいね. シェアウェアかもしれんけど.
ImgBurnはフリーソフトだよちゃんと書いてあるんだから読もうよと ツッコミたくなるナイスなベストアンサー。とりあえずbchunkのWin32バイナリは無いと理解した。ありがとうokwaveの方々。あきらめてWindowsでbchunkをビルド。手元のパソコンにはVisual Studio 2010 Expressが入っていたのでそのまま使った。mingwとかcygwinのが変更は少なくて良いと思うが入れたくなかったので。
→ここで作ったバイナリとソースは掲載しました。
以下はソース改変&コンパイルのレシピ。バイナリだけ使えればいいっていう場合は読まなくていいです。
1.http://he.fi/bchunk/ から bchunk-1.2.0.tar.gz をダウンロード。適当に展開して作業開始。
.
2.strcasecmpの定義を追加。bchunk.c の編集前26行目付近に追加する。
#ifdef _MSC_VER
//not #if defined(_WIN32) || defined(_WIN64) because we have strncasecmp in mingw
#define strncasecmp _strnicmp
#define strcasecmp _stricmp
#endif
.
3.unistd.h を追加。出典 http://d.hatena.ne.jp/deraw/20070517/1179334643 から unistd.h をもらってきて105行目を変更。
ft.dwHighDateTime = (DWORD)ll >>32;
↓
ft.dwHighDateTime = ((__int64)(DWORD)ll) >>32;
そしてbchunk.c の編集前25行目付近のunistd.hのインクルードパスを変更。
#include <unistd.h>
↓
#include “unistd.h”
→このunistd.hはライセンス不明なので使わないようにしました。必要なのはhtonsとhtonlだけなので次の二行を追加するだけです。
#pragma comment( lib, “ws2_32” )
#include <winsock2.h>
.
4.getoptを追加。出典 http://takamints.hatenablog.jp/entry/2015/04/27/231454 から getopt.h、getopt.c をもらってきて、bchunk.c の編集前26行目付近に追加する。
#include “getopt.h”
.
5.inttypeを削除。bchunk.c の編集前60、61行目付近を削除(コメントアウト)する。
//#include <inttypes.h>
//#include <netinet/in.h>
.
6.stdint.hを追加。出典 http://stackoverflow.com/questions/5657825/whats-the-equivalent-of-int32-t-in-visual-c
bchunk.c の編集前25行目付近をに追加。
#include <stdint.h>
.
7.BINファイルのオープンモードを変更。bchunk.c の編集前402行目付近を変更。
if (!((binf = fopen(binfile, “r”)))) {
↓
if (!((binf = fopen(binfile, “rb”)))) {
.
8.出力ファイルのオープンモードを変更。bchunk.c の編集前282行目付近を変更。
if (!(f = fopen(fname, “w”))) {
↓
if (!(f = fopen(fname, “wb”))) {
.
9.コンパイル。メイクファイルの変更は面倒なのでコンパイラドライバCLで直接ビルド。bchunk.exe が出来上がったら成功。
cl bchunk.c getopt.c
.
10.試してみる。
chunk -w image.bin image.cue track
でtrack*.wav がたくさん出てきたら再生してみる。
.
できたwavをNeroでリッピングしたwavと比較すると先頭に1ワードの余分(0000H)が出るのと、末尾付近にNeroが付けた変なチャンク部分が異なるけど、それ以外のデータはバイナリ一致したのでたぶん大丈夫だと思う。これでbin+cueもさくっとwavに変換して聞くことができる。知恵を貸してくださったインターネッツの先人の方々に感謝ですね。 めでたしめでたし。
wavとisoができることは確認したけどそれ以外の検証はちゃんとしてないので試すときは自己責任で。
—
オリジナルの作者ではないですが、bchunk v1.2.1がリリースされました。待望のWindowsサポートが! … て一部取り込まれとるやないかい!! ええのんか。getoptはMITライセンスやからともかく、strcasecmpとかunistd.hはライセンス不明やし。。
https://github.com/extramaster/bchunk
→自分のエントリに起因がないわけでもないんでOSSライセンスのみで再構成したものにMIMEエンコードしたアーカイブ公開の中身を差し替えました。
ピンバック: bchunk for Win32バイナリ | の回想録
ピンバック: 音楽CDを捨てる前に保存しておきたい | の回想録