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 |
データ ×12 | 14×12 |
パリティ ×4 | 14×4 |
データ ×12 | 14×12 |
パリティ ×4 | 14×4 |
それぞれには、他に3bitのパリティが付く。
そのため、正確には次のようになる。
用途 | サイズ(bit) |
周期パターン | 24 |
パリティ | 3 |
サブコーディング | 14 |
パリティ | 3 |
データ1-1 | 14 |
パリティ | 3 |
データ1-2 | 14 |
パリティ | 3 |
データ1-3 | 14 |
パリティ | 3 |
データ1-4 | 14 |
パリティ | 3 |
データ1-5 | 14 |
パリティ | 3 |
データ1-6 | 14 |
パリティ | 3 |
データ1-7 | 14 |
パリティ | 3 |
データ1-8 | 14 |
パリティ | 3 |
データ1-9 | 14 |
パリティ | 3 |
データ1-10 | 14 |
パリティ | 3 |
データ1-11 | 14 |
パリティ | 3 |
データ1-12 | 14 |
パリティ | 3 |
パリティ1-1 | 14 |
パリティ | 3 |
パリティ1-2 | 14 |
パリティ | 3 |
パリティ1-3 | 14 |
パリティ | 3 |
パリティ1-4 | 14 |
パリティ | 3 |
データ2-1 | 14 |
パリティ | 3 |
データ2-2 | 14 |
パリティ | 3 |
データ2-3 | 14 |
パリティ | 3 |
データ2-4 | 14 |
パリティ | 3 |
データ2-5 | 14 |
パリティ | 3 |
データ2-6 | 14 |
パリティ | 3 |
データ2-7 | 14 |
パリティ | 3 |
データ2-8 | 14 |
パリティ | 3 |
データ2-9 | 14 |
パリティ | 3 |
データ2-10 | 14 |
パリティ | 3 |
データ2-11 | 14 |
パリティ | 3 |
データ2-12 | 14 |
パリティ | 3 |
パリティ2-1 | 14 |
パリティ | 3 |
パリティ2-2 | 14 |
パリティ | 3 |
パリティ2-3 | 14 |
パリティ | 3 |
パリティ2-4 | 14 |
パリティ | 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ビットを集めて情報として成立する。
執筆中
戻る