2006年07月13日

LBA と MSF

CD上のデータの位置は、単純に0から増えてゆくLBA (Logical Block Address、論理ブロックアドレス) とMSF (Minute Second Frame、分秒フレーム) という時間で表示する2種類のアドレスで表されます。CDのサブチャネルでは時間表記されており、LBAはもっぱらドライバやプログラム側の都合で使用されます。

MSFでは、1分=60秒、1秒=75フレームです。

このLBAとMSFの変換がややこしいです。LBAの基点は最初のトラックの INDEX 1 が始まる位置であり、データCDおよびCD-Rへの書き込み時では 00:02:00 (=75*2) です。そしてその変換式は、次のようになります。

BYTE M; //分
BYTE S; //秒
BYTE F; //フレーム
long LBA; //論理ブロックアドレス

条件変換式
-150≦LBA≦404849 M = (LBA + 150)/75/60
S = ((LBA + 150)/75)%60
F = (LBA + 150)%75
-45150≦LBA≦-151 M = (LBA + 450150)/75/60
S = ((LBA + 450150)/75)%60
F = (LBA + 450150)%75
00:00:00≦LBA≦89:59:74 LBA = M*60*75 + S*60 + F - 150
90:00:00≦LBA≦99:59:74 LBA = M*60*75 + S*60 + F - 450150
   LBA    MSF
 -45150 ┬ 90:00:00
    │
    │
  -151 ┼ 99:59:74 
  -150 ┼ 00:00:00
    │
   0 ┼ 00:02:00
    │
    │
    │
 404849 ┼ 89:59:74
 -45150 ┼ 90:00:00
    │
    │
  -151 ┴ 99:59:74 
先頭のリードインでは、なんと 100:00:00 からのマイナスになります。


蛇足
「せんべえ焼き」では、
MSF 00:00:00 = 0 LBA
とする表現を主に使用しており、
コマンドを送る直前に -150 しています。
このため、ソースコードがよけいややこしくなっています。

posted by 七癖 at 17:53| Comment(0) | TrackBack(0) | Multimedia Commands | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック