FC2ブログ

音楽CDの構造

19/10/03初稿

 リッピングについていろいろ考えるためには、そもそもCD-DA(音楽CD)がどんな構造になっているのか知る必要があります。
 本Blogとしては、「オフセットとギャップ」記事で考え増補していたのですが、量が増えたこともあり本稿に独立させました(オフセット記事は「リッピング時のズレ」に特化)。


■CD-DAの構造

 CD-DAについての勉強が難しいのは「その後成立したCD-ROMやCD-Rなどの情報が錯綜している」点ですね。CD-DA規格時には存在しなかったCD-DAをリッピングするための技術(MMC規格)用語がCD-DA説明のために使われていたりします。また、例えば同じ2352Byteの取り扱い単位についても、規格によってフレーム、ブロック、セクタ、セクションなどいろいろな呼び方があります。同じ単語でも意味が違うこともあります(「フレーム」など)。
 これに惑わされないようにするのが“コツ”だと思います。
 本稿では、“惑わされないために”以下の2情報を最優先に利用します。

・JIS規格「JIS-S8605 コンパクトディスクディジタルオーディオシステム」
・CD開発者の方の著作「図解コンパクトディスク読本」


図解 コンパクトディスク読本
(Amazonアソシエイト)

#JIS-S8605は2016年に廃止されてしまいましたが、一度制定された規格が(追加はあれど)変わることはないので問題ないでしょう。廃止理由は「レッドブックもあるしIEC608もあるから」ですし。

・結論から:CD-DA構造
 まず、結論的に調べたCD-DA構造を図示します(3曲入りの場合)。「ポーズ」は通例では「プリギャップ」だと思いますが、JIS記述を優先して記します(JISにはプリギャップという用語はない)。

CD-DA構造(改訂2)

・「JIS-S8605 コンパクトディスクディジタルオーディオシステム」より
 ベースとしたJISの記述は以下の部分です。原文を優先しましたが、そのままではなく読みやすく加工した部分もあります。

(1)12
・ディスクの記録領域は,次の3部分に区分される
  リードイン領域
  プログラム記録領域
  リードアウト領域

(2)17.5.1
・INDEX00はポーズを示す
・各トラックの最初には,同一トラック番号のポーズ区間をもつことができる
・最初のオーディオトラックは2~3秒のポーズが先行する
・一つのプログラムが複数のディスクに分けられるときのトラック番号は,連番としてもよい
・一つのトラックの最小長さは4秒とし,先行するポーズ時間は含まない

・オーディオトラック番号は01から始まり連続して増加する(最大99)
・オーディオトラックにはINDEX01~99を設定できる
・オーディオトラック内のINDEX番号は01から始まり連続して増加する

・リードイントラックのトラックナンバは00
・リードイントラックにINDEXはない
・リードイントラックにAMSFはない
・リードイントラックの終わりはプログラム記録領域のスタート位置になる

・リードアウトトラックのトラックナンバはAA(BCD(*)的に99の次の10・10)
・リードアウトトラックのINDEXは01
・リードアウトトラックは最終トラックの終点位置から始まりポーズを持たない
・リードアウトトラックはオーディオトラックとして符号化する

・一つのトラック中の走行時間は,6けたのBCD符号で表し,MIN, SEC, FRAMEに各2けたを割り当てる
 トラックのスタートではタイムは“0”とし,タイムはオーディオ部分では増加する
 ポーズ部分では減少して,ポーズの終わりでは“0”になる
 リードイントラック及びリードアウトトラックではタイムは増加する

・ディスク上の走行時間 (ATIME) は,6けたのBCD符号で表し,AMIN, ASEC, AFRAMEに各2けたを割り当てる
 プログラム記録領域のスタート位置では,走行時間は“0”にセットし,TNOはディスク上の最初のトラックの数値となる

*:BCD(Binary-coded decimal)=2進化10進数

・「図解コンパクトディスク読本」より
 特記なき場合、音楽CDにおける「サンプル」はステレオ(4Byte)です。読みやすさを考慮し、図解は稿末に記しました。

・CIRCは6サンプルをワンセットとして扱う
・サンプルの1ByteはEFM変調によって14bitに変調される
・6サンプルは24ByteなのでEFM変調結果は24個の14bitデータになる
・次の内訳で「最小データ単位」を形成する
  ・同期パターン:24bit
  ・EFM変調された8bit(8種)のサブコーディング:14bit
  ・EFM変調したサンプルデータ:14bitデータ24個
  ・12個のEFMデータごとに付加するパリティ:14bitを4個ずつ
  ・上記合計34個のbit塊の間に結合bit:3bit
  ・合計:24+14+14x(12+4)+14x(12+4)+3x34=588bit
・これがCD盤面に連続して記録されている
・これをを98個束ねるとチャンネルとしてのサブコードが読める塊になる
  #ここでは「サブコーディングフレーム(*)」と仮称する(SCフレームと略)
・SCフレームの区切りはサブコーディングが同期パターン(S0,S1の2行)であることで判別する
・EFM解除されたサブコーディング8bitが98bit/種の8種サブコードになる
・正確にはS0,S1で頭が削られるので情報ビット数としては96bit
・サブコードにはCRCを含む(CIRC対象ではないがノーケアではない)
・なのでトラック番号などが記録されている情報ビット数としては72bit
・「最小データ単位」中に6サンプルあるのでSCフレーム中のサンプル数は588個
・4Byte/サンプルなのでSCフレーム中の音声データ量は2352Byte
・44100/588=75なので1秒にあるSCフレームは75個

*:読本では588bitフレームが98個まとまったフォーマットをこう呼んでいることから。

#余談:CD-DAではSCフレームから取り出される実データ量は2352Byteですが、CD-ROMでは2352Byte中にさらにエラー訂正するための冗長データを持たせているので、実データ量は2048Byteとなっています(厳密に言えば実データ量が違う複数のモードがあります)。


■JISをかみくだく

 以下、上記をもうちょっと解りやすく書いてみます。

・領域
 CD-DAにはリードイン領域・プログラム記憶領域・リードアウト領域しかありません。プログラム記憶領域には音声トラック(INDEX00含む)しかありません。CD-ROMやCD-Rなどと混ざらないようにしたいところです。

・INDEX00
 「ポーズ」と呼ばれるINDEX01に続いていく領域です。JISには「同一トラック番号の~」とありますから当該トラック関連データではありますが、あくまでも「ポーズ」であって「トラック」には含めていないようです。
 そして、「INDEX00=ポーズ」は「最初のトラック=トラック01(*)」には「2~3秒先行する=付けることが必須」です。上図で「ポーズ01(特殊プリギャップ)」としている領域がこれに当たります。
 その他トラックでは「もつことができる=任意」です。設ける場合の時間規定もありません。実際あったりなかったりしますし、あっても時間はまちまちです。
 通常は無音(データ的な0000hだけでなくほぼ無音の意味とする。以下同義)ですが、「無音であること」といった規定はありません(実際0001hやFFFFhなどの場合もあり)。これを利用して「MC」や「トラックにカウントされない曲」を入れたりすることがあります。
 ポイントは、トラックの再生開始(CDプレーヤでの頭出しなど)はINDEX00ではなくINDEX01であることです。つまりトラック01のINDEX00期間は通常アクセスされないので、これを利用して隠しトラックにすることもあります。

*:JISによればディスク最初のトラックナンバは(複数枚組タイトルでは)連番にしてもよいので01ではない可能性もありますが、本Blogでは無視します。

#余談:数フレームしかないINDEX00=「ショートギャップ」が設けられたタイトルもあります(もちろんトラック01のINDEX00を除く)。かつて、リッピング防止のためドライブやリッパーを混乱させようとしたものですが、今となってはその効果はありません。

・INDEX01~99
 INDEXは99までトラック内に設定できます。かつてはCDプレーヤで「インデックスサーチ」として利用されていたこともありますが、現在ではINDEX02以降を持つCDはほとんどないと思います(クラシック再販盤などではまだ残っている模様)。民生用対応CDプレーヤもほぼないでしょう。
 ファイル再生において「02以降のINDEXを認識してサーチなどに利用できる」環境を整えるのはかなり困難&バーター条件が多い&一般的ではない気がしますので、本Blogでは無視しています。

・FRAME
 MIN,SEC,FRAMEという走行時間(位置)の最小単位です。FRAMEは1/75秒を表します。
 一方、読本の読み解き通り、CD-DAのデータ単位は1秒間に75個あるため、これを「フレーム」と呼びたくなります。
 しかし、CD-DA規格「JIS-S8605」や読本では、原初のひとまとまり588bit(EFM&CIRCデコード前)を「フレーム」と呼んでいます。一方CD-R規格「JIS-X6282」では「EFMフレーム」と呼んでいます。
 難しいところですが、本Blogでは「FRAME(1/75秒)分の音声データ588サンプル2352Byteのひとまとまり」をフレームと呼んだ方が解りやすいと考え、そう定義して記述しています。

#余談:音楽CDは音声データをフレーム単位でしか読み出せないのですから、リッピングしたサンプル総数は588の整数倍になるハズ。いくつかやってみると確かに割り切れます。割り切れなかったら何等かのエラーが発生したとみていいでしょう。

・SECTOR
 本Blogで「フレーム」とした単位のことを「セクタ」「セクション」「ブロック」と呼ぶこともあるようです(*)。JISの状況をみてみます。

・CD-DA規格「JIS-S8605」・・・どれも出てきません。
・CD-ROM規格「JIS-X6281」・・・1秒間に75個あるひとまとまりを「セクション」、アドレスを持ち独立アクセスできる2352Byteのひとまとまりを「セクタ」と呼んでいます。ただし、「セクタ」には2352Byteすべてを実データとして使えるモードはありません。
・CD-R規格「JIS-X6282」・・・用語説明の項で2352Byteの“データを記録する最小単位”を「ブロック」、アドレスを持ち独立アクセスできるひとまとまりを「セクタ」と定義しています。

 本Blogでは、CD-DA規格にないことからCD-ROMやCD-R(以降の)用語であってCD-DAには無関係と考え、「セクタ」「セクション」「ブロック」は無視します。AMSFはあるものの独立アドレスを持たないデータ単位を「セクタ」と呼ぶのは憚られますし。
 CD-DAの記述で「セクタ」などが用いられている場合は、どんな意味で使われているのか注意した方がよいでしょう。

*:https://av.watch.impress.co.jp/docs/20010319/dal02.htm

 なお、オレンジブック系の業界団体のwebサイト「Orange Forum」には次のようにあります。

 このプログラムエリアには、LPレコードのように、信号がディスク全面に連続的に記録されているわけではありません。Red Bookの場合、1秒間を75の“フレーム”という単位に分け、このフレームをデータのひとまとまりとしています。フレームがRed Bookのデータのひとまとまりの単位であるということは、すべてのCDファミリーのデータの単位もこのフレームということです。ただし、フレームと言うのはオーディオ系の言い方で、PC系、およびデータ系では“ブロック”と呼んでいます。
出典:http://www.cds21solutions.org/osj/j/family/index.html

・MSF
 フレームの位置はMSFで示されます。「Minute,Second,Frame」のことです。トラック(リードアウト含む)ごとのMSFは、INDEX01の先頭フレームを走行時間0(=00m00s00f)として加算されていきます。MSFはリードインにもあり、同じく加算ですが開始走行時間は0でなくてよいことになっています。
 INDEX00期間では“減算”されて最後の走行時間が0になるように割り振られます。2秒であれば最初のフレーム番号が00m01s74f、最後が00m00s00fということでしょう。後述するようにCDプレーヤではINDEX00期間は「マイナス表示」ですが、フレーム番号から算出する秒数にマイナス記号付ければよいようにしてあるということでしょうか。

・AMSF
 MSFは「トラックの中におけるフレームの位置」を示します。一方、ディスク全体の中での位置(絶対位置)はAMSFとして記録されており、その起点はプログラム記録領域のスタート位置(つまりトラック01のINDEX00の最初のフレーム)です。走行時間を0=00m00s00fにセットすることになっています。AMSFはリードアウトまで貫通します。
 リードインはAMSFに含まれず、そのAMSF領域はTOCのための“PMSF”に用いられています。

#余談:MSFとAMSFの仕様を見ると、リッピングソフトの時間(フレーム)表示やCDプレーヤの演奏時間表示はMSFやAMSFそのままではなく“計算されたもの”と考えた方がよいでしょう。例えば、≪EAC≫のトラック01開始時間表示はINDEX00が通常の00m02s00f分のタイトルでは00m00s00fですが、00m02s37f分あるタイトルでは00m00s37fですので、AMSFそのままではなく00m02s00f分マイナスしています。ただし、≪CD Manipulator≫のようにそのまま表示するものもあります。

・LBA
 フレーム位置としてMSFではなくLBA(Logical Block Address)が用いられることもありますが、「フレームとセクタ」と同じく、少なくともCD-DAにおいてはMSFだけ意識しておけばよく、LBAは無視していいと判断しています(JISではCD-ROMにもCD-Rにも出てきません)。

#余談:MMC的にはLBAはAMSFから150フレーム進んだ位置になります(リードインなどのヤヤコシイ事情は別として)。つまり通常ならトラック01のINDEX01期間の先頭フレームを起点とするようです(トラック01のINDEX00期間はマイナスになる)。ですが、CD-DAにおいてはトラック01のINDEX00は150フレームちょうどと規定されていませんので、トラック01のINDEX01の最初のフレームが必ずLBA起点になるワケではありません。

・サブコード
 フレームを構成するデータが揃うと揃うサブコードはP,Q,R,S,T,U,V,Wの8チャンネルありますが、リッピングに関係にあるサブコード=Qチャンネルに絞ります。さらに、Qチャンネルには3モードありますがモード1に絞ります(モード2と3はオプション。稿末に記述)。
 オーディオトラックとリードアウトトラックの各フレームのサブコードには以下の情報が入っています。「トラックのプロパティ」のような情報ですね。
  ・トラック番号
  ・INDEX番号
  ・トラック内におけるフレーム位置(MSF)
  ・CD内におけるフレーム位置(AMSF)
  ・エンファシス有無
  ・デジタルコピー許可・禁止(事実上未使用)

#余談:リードアウトトラックもオーディオトラックと共通フォーマットですので、再生対象ではないのにエンファシスなどの項目があります。無意味な気もしますが、「オーディオトラックとして符号化する」とあることも合わせて考えると、万一CDプレーヤがオーバーランなどして“音声トラックとして”読む可能性を(読んでも大丈夫なように)想定しているのかも知れません。TOCのスタート位置精度は±1秒ともありますので、読んじゃう可能性あるのかも。
 さらに、トラック01の前には2秒以上のINDEX00区間を必須としていることを考え合わせると、一方リードインは読まないようにする想定なのだと思われます。
 もちろん、「規格策定当時、CDプレーヤで再生する」ことを想定した設計として、です。

・TOC
 「Table Of Contents」のことです。CDの「目次」または「概要説明」です。リードイントラックのサブコードに「自トラックの情報」ではなく「CDタイトルの情報」として以下が繰り返し入っています。
  ・最初のトラック番号
  ・最後のトラック番号
  ・各トラックの開始位置(事実上INDEX01のAMSF)
  ・リードアウトトラックの開始位置
  ・各トラックのエンファシス有無
  ・各トラックのデジタルコピー許可・禁止(事実上未使用)

 CDプレーヤやリッピングソフトは、まずこのTOCを読んで各トラックの位置やエンファシス有無などを把握します(ただしINDEX00位置は解りません)。一般的なリッパーはTOC情報に基づいてトラック分割やエンファシス処理を実施します(なのでINDEX01位置でしか分割できません)。実トラックを読みにいかなくても全体像が把握できるようになっているワケですが、トラック内サブコード情報とTOC情報が合致していないタイトルもあることがリッピングをヤヤコシクしています。

#余談:MacOSなら「drutil」というコマンドでTOC読めるらしいですね。


■CDデータ構造図(読本の読解による)

 読本の記述に則り、ここでは588bitの最小単位を「フレーム」として記します。

・フレーム(588bit)98個で構成されるSCフレーム(シンボル間結合bitは省略)
CDフレーム

・各シンボルのビットは縦に並んでおり、フレーム01のシンボル01から縦にシリアルに読み出すイメージ。
・「EFM」はもと8bitのデータがCD盤面記録用14bitに変調された状態を示す(ただしS0とS1はEFMパターンとしてのみ利用)。
・CIRCデータ計24シンボルは計8シンボルのCIRCパリティと共にEFM解除された後CIRCデコードされて24Byte=6サンプルになる。

・EFM解除された(S0,S1以外)サブコーディング8bit(=8ch)96個
CDサブコードチャンネル

・コントロール:音声チャンネル数(事実上2chのみ)、コピー許可禁止(事実上未使用)、エンファシス有無を示す。
・アドレス:チャンネルのモードを示す。
・データ:TNO,INDEX,MIN,SEC,FRAME,AMIN,ASEC,AFREME。詳細は以下。
・CRC:コントロール・アドレス・データのエラー検出用コード。JISに「CRCは,CONTROL,ADR及びDATA-Qに関する16ビットの誤り検出コードであり~」とあることから。

・サブコーディングQチャンネル(モード1)のデータ部
CDサブコードデータ

・4bitずつのBCD符号でそれぞれ2桁の10進数を示す。


■余談

・容量
 JEITA(*1)や磁気研究所(*2)によると、音楽CDは74分、CD-R(CD-ROM)は650MBとなっています。
 74分は333,000フレームです。CD-ROMでは1フレーム(セクタ)にパリティなどを除いた“真水”データを2048Byte記録しますから681,984,000Byteとなります。これを1024で2回割って1024単位系のMBで表すと確かに650MBになります。
 ちなみに74分の1644PCMは783,216,000Byteとなります。パリティなどを付加してデータを記録する場合はざっくり87%相当になるということですね。

*1:https://home.jeita.or.jp/cgi-bin/page/detail.cgi?n=233&ca=14
*2:http://www.mag-labo.com/?p=1142

・ISRC
 ≪EAC≫に設定があります。
 モード3のQチャンネルで記録される情報です。
 「International Standard Recording Code」の略称で、そのトラック音楽の録音IDのようなものです。
 必須ではありません。読みだしてCUEsheetに記載する場合もあります。
 詳細は「JIS-X0308 国際標準レコーディングコード(ISRC)」に定められています。

・UPC
 ≪EAC≫に設定があります。
 モード2のQチャンネルで記録されるPOS情報です。
 「Universal Product Code」の略で、米国やカナダで使用されている商品コードとのこと。POSコードの具体的規格名ですね。欧州系の「EAN(European Article Number)」もあります。
 必須ではありません。読みだしてCUEsheetに記載する場合もあります。


メインメニューへ

テーマ : オーディオ
ジャンル : 趣味・実用

最新記事
ERIへようこそ

Author:らかせ
「最新記事」または
「メインメニュー」からどうぞ

・ファイルへの直接リンク以外はリンクフリー(連絡不要)です

・一応、拍手にコメント(非公開)付けられるようにしてあります

・DB的に利用しており、過去記事もガシガシ書き換えています。特に「最新記事」は初稿から一週間くらいは直してることが多く、大幅に変わっちゃうことも。ご了承ください

・ということもありますし、記すまでもないですが無断転載(ファイル含む)はご遠慮ください

・引用の考え方については「007:諸事」をご参照ください

・ハイパーリンクは当Blog記事のみです(054:節電記事のみ例外)

・Amazonアソシエイトに参加しています(アフィリエイトはAmazonのみです)

カテゴリ
検索フォーム
FC2カウンター