CDリッピングソフト制作のための基礎知識


この文章はCDリッピングソフトを自分で制作しようという人のための資料であり、リッピングソフトの紹介ではありません。


CDからサウンドデータを読みとるには特別な手順を踏まなければならない。
つまり、デバイスを直接コントロールしアクセスするのだ。

なぜこうするのかというと、サウンドデータはCDの中でファイルの形をしていないからである。

普通の音楽CDをウインドウズエクスプローラーでみてみると、トラックと同じ数の.CDAというファイルが見つかるはずだ。
これはトラック情報だけでありサウンドデータはこの中にははいっていない。

つまり、通常のようにファイルオープン&リード&クローズという手順で読むことはできないのだ。
ハードウェアを直接操作しCDの物理的な構造に従って読むことになる。

ではどうやってハードウェアを直接操作するのか?
幸いWindowsにはハードウェアを直接操作するためのインターフェースが用意されている。
しかし、これは例えると買い物をするのに店の前まで案内してくたというレベルにすぎない。
それ以降のことつまり、店員に必要なものを告げ、支払いをするなどは全て自分で行わなければならない。

ライブラリによっては代わりに行ってくれるものもあるが、基本はそういうことだ。

具体的に言うと、SCSI-MMCを発行するための手段を提供しているだけだ。

これは、後述のASPIインターフェースを使っても基本的には同じだ。

MMCを使ってアクセスするというのは、ディスクの物理的な位置を指定し読むことになる。

「XX曲目の〜」という指定ではなく、「先頭から〜の位置」ということになる。
従って、ディスクの構造を知らなければ使いこなすことはできない。



●ディスク(CD)の構造

CDのデータ構造は、まずセクションという単位で区切られている。
セクションの中には、複数のトラックで構成されている。

セクション中の最初と最後のトラックは、それぞれリードイン、リードアウトという特別なトラックだ。

・CD
 ・セクション1
  ・リードイン
  ・トラック1
  ・トラック2
  ・トラック3
    ・
    ・
    ・
  ・トラック15
  ・リードアウト

 ・セクション2
  ・リードイン
  ・トラック1
  ・トラック2
  ・トラック3
    ・
    ・
    ・
  ・トラック14
  ・リードアウト

トラックは1曲に相当する。
また、通常のオーディオCDではセクションは1つだけだ(シングルセクション)。
CD-TEXTなどのCD-EXTでは複数のセクション(マルチセクション)となっている。
ちなみに、CCCDもほとんどがマルチセクションだ。

さて、セクション1のリードインには、TOCといって特別な使い方がされている。
TOCは本の目次のようなもので、各トラックの開始位置などが記録されている。

任意のトラックにジャンプするには、まずTOCを読み目的のトラックのアドレスを取得し、 そのアドレスを指定してジャンプすればよい。
通常はこれでよいのだが、CCCDの場合にはTOCのアドレス情報に間違った値が書き込まれているため(フェイクTOC)、
この手順で行うと曲の途中から再生されてしまうため別の手段が必要となる。
詳細は後述するが、トラック中に書き込まれている位置情報を利用することになる。


さて、トラックだがこれはサブコーディングフレーム(セクタ)というもので構成されている。
この中には、音データの他にいくつかの情報が存在する。

さらにセクタはフレームで構成されている。
フレームというのが最小のアクセス単位だ。

フレームの中は次のようになっている。

周期パターン24
サブコーディング14
データ ×1214×12
パリティ ×414×4
データ ×1214×12
パリティ ×414×4

それぞれには、他に3bitのパリティが付く。

そのため、正確には次のようになる。

用途サイズ(bit)
周期パターン24
パリティ3
サブコーディング14
パリティ3
データ1-114
パリティ3
データ1-214
パリティ3
データ1-314
パリティ3
データ1-414
パリティ3
データ1-514
パリティ3
データ1-614
パリティ3
データ1-714
パリティ3
データ1-814
パリティ3
データ1-914
パリティ3
データ1-1014
パリティ3
データ1-1114
パリティ3
データ1-1214
パリティ3
パリティ1-114
パリティ3
パリティ1-214
パリティ3
パリティ1-314
パリティ3
パリティ1-414
パリティ3
データ2-114
パリティ3
データ2-214
パリティ3
データ2-314
パリティ3
データ2-414
パリティ3
データ2-514
パリティ3
データ2-614
パリティ3
データ2-714
パリティ3
データ2-814
パリティ3
データ2-914
パリティ3
データ2-1014
パリティ3
データ2-1114
パリティ3
データ2-1214
パリティ3
パリティ2-114
パリティ3
パリティ2-214
パリティ3
パリティ2-314
パリティ3
パリティ2-414
パリティ3

全部で588bitだ。

データは14bitとなっているが、これはすべてデータとして使うわけではなく、EFM変調というのがされていて使えるのは8bitだ。
これは、0x00,0x00などのようなデータの区切りをつけるため6bit使っている。

ということで、データとして使えるのは、

12回×2回×8bit=192bit  = 24Bite

ということになる。

フレームが98個でセクタとなる。
セクタで使えるデータは、

24Bite×98フレーム=2,352Bite

となる。


サブコーディングの14bitもEFM変調されていて、実データは8bitだ。これはそれぞれビット単位に
意味が設けられていて、P〜Wサブチャンネルという。
サブコーディングのチャンネルは、フレーム1つだけでは意味がなく、98個(セクタ)になってはじめて意味をなす。

例えば、サブチャンネルQは位置情報などが記録されているが、これはセクタ内の98フレームそれぞれの
サブコーディングのQビットを集めて情報として成立する。






執筆中





戻る