前回は、お見苦しいところをお見せしました。
ご指摘のあった点以外にも間違いがありましたので、
さきほど直しました。
それから、
2006/07/31 の Sub Q Channel の説明にも間違いがありましたので、直しました。
気を取り直して、(間違いを恐れずに)SEND CUE SHEET の説明の続きをします。
リードイン、リードアウト、および各トラックとそのインデックスの
開始位置を記述するブロックのフォーマットは次の通りです。
BYTE\bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 | CTRL | ADR |
1 | TNO |
2 | INDEX |
3 | DATA FORM |
Sub-channel | Main Data |
4 | SCMS |
5 | 開始時間 (分) |
6 | 開始時間 (秒) |
7 | 開始時間 (フレーム =1/75秒) |
ADR はそのブロックの内容を表します。
ADR | 内容 |
1 | トラックとインデックスの開始位置 |
2 | MCN |
3 | ISRC |
ADR が異なると 1〜7 バイトの意味が全く変わります。
Ctrl (コントロール/制御フィールド) は、ビット毎に意味があります。
bit | Ctrl |
7 | 0=2チャンネルオーディオ 1=4チャンネルオーディオ |
6 | 0=音楽トラック 1=データトラック |
5 | コピー 0=禁止 1=許可 |
4 | プリエンファシス 0=なし 1=50/15 |
Ctrl = 0100b で、データトラックになります。
TNO はトラックの番号です。
リードインは TNO = 0x00
リードアウトは TNO = 0xAA
に、それぞれ設定してください。
INDEX は各トラックのインデックス番号です。
リードインでは INDEX = 0x00
リードアウトでは INDEX = 0x01
に、それぞれ設定してください。
DATA FORM では各トラックのモードと、
書き込む際に送るデータの大きさを指定します。
Main Data (下位6ビット) に設定できる値の一覧を次に示します。
DATA FORM | 形式 | 送るバイト数 | 注釈 |
0x00 | CD-DA | 2352 | オーディオデータ |
0x01 | CD-DA | 0 | |
0x10 | mode 1 | 2048 | データ本体のみ |
0x11 | mode 1 | 2352 | ヘッダや訂正コードを含める 但し、送ったヘッダや訂正コードは無視され、書き込み位置や送ったデータ本体から作成される |
0x12 | mode 1 | 2048 | 送ったデータは全て無視される |
0x13 | mode 1 | 2352 | 送ったデータは全て無視される |
0x14 | mode 1 | 0 | |
0x20 | mode 2 form 1,2 | 2336 | サブヘッダ+データ本体+訂正コード 但し、送った訂正コードは無視され、送ったデータ本体から作成される |
0x21 | mode 2 form 1,2 | 2352 | ヘッダ、サブヘッダ、訂正コードなどを含める 但し、送ったヘッダや訂正コードは無視され、書き込み位置や送ったデータ本体から作成される |
0x22 | mode 2 form 1,2 | 2336 | サブヘッダ (0〜7バイト目) 以外は無視される |
0x23 | mode 2 form 1,2 | 2352 | サブヘッダ (16〜23バイト目) 以外は無視される |
0x24 | mode 2 form 2 | 0 | |
0x30 | mode 2 | 2336 | データ本体のみ |
0x31 | mode 2 | 2352 | ヘッダを含める 但し、送ったヘッダは無視され、書き込み位置から作成される |
0x32 | mode 2 | 2336 | 送ったデータは全て無視される |
0x33 | mode 2 | 2352 | 送ったデータは全て無視される |
0x34 | mode 2 | 0 | |
"送るバイト数"が 0 になっている部分では、
そのインデックスでは空のデータが自動的に書き込まれると思われます。
"mode 2 form 1,2" となっている部分では、送られたサブヘッダから形式が判断されます。
なお、DATA FORM = 0x24 の form 1 はありません。
リードインとリードアウトでは 0x01 に設定してください。
続いて Sub-channnel (上位2ビット) に設定できる値を次に示します。
DATA FORM | 送るバイト数 | 注釈 |
0 | 0 | サブチャネルは自動的に作成される |
1 | 96 | RAW 形式のデータを送る |
3 | 96 | PACK DATA |
DATA FORM = 0x00 しか使ったことがありません。
リードインでは 0 か 1 に、
リードアウトでは 0 に設定してください。
SCMS は Selial Copy Management System のことです。
最上位ビット(bit 7)で ON/OFF を設定します。
開始時間 (分、秒、フレーム) はトラック1のインデックス0からの経過時間を設定します。
よって TNO=1 & INDEX=0 では 0分0秒0フレーム です。
なお、リードイン (TNO=0) でも DATA FORM = 0x41 (8ビットで)以外の場合(=0x01)
は、0分0秒0フレーム にしてください。
なお、データCDおよび多くの音楽CDの TNO=1 & INDEX=1 では、0分2秒0フレーム です。
"せんべえ焼き"では、そのように設定しています。
それから、TNO、INDEX、開始時間 (分、秒、フレーム) は、
BCD変換した値ではなく、普通の値を送ります。トラック 99 の場合は TNO=0x63 です。
"せんべえ焼き" 過去のバージョンでは、この間違いのせいで
ひどい結果が生じるので、最新版を使うようにお願いします。
ここまで書いてみて、いろいろと矛盾する記述があると思います。
これは、私が一部の機能しか使っておらず、その経験からの思い込みをそのまま書いている部分が多いためです。
SEND CUE SHEET でも リードインや各トラックのサブチャネルを直接書き込む
ような使い方も出来るみたいです。
やったことはありませんが。
この記事へのトラックバック
この広告は90日以上新しい記事の投稿がないブログに表示されております。
DATA FORM はトラック毎に指定します。
返答が遅くなって申し訳ありませんでした。
★Mode Selectコマンドで
Write Parameters Pageを
Write Type 0x02
Data Block Type 0x00
に設定する。
★Send Cue Sheet コマンドで
CTRL/ADRは
●Lead In
CDDA 0x01
Mode1,2 0x41
●Gapと各トラック
CDDA 0x01
Mode1,2 0x41
●Lead Out
0x01
DATA FORMは
●Lead In
CDDA 0x01
Mode1 0x14
Mode2 0x34
●Gapと各トラック
0x00
●Lead Out
0x01
★1セクタに 2352バイト(RAW セクタ扱い)
として書き込む。
★データトラックは ソフト側で スクランブルして
ドライヴに送る。
P.S. これらを実装した CD Manipulator Fix-7のバージョンがあるのですが、
ソースコードのみのアップロードは違法なのでしょうか?そちらを見てもらった方が解かりやすいと思いますが………。
醜いコメントで申し訳ありません。
現在、実際にディスクに記録して確認できる状況にないため、お役に立てず、すみません。
ドライブが不調なのです。
お持ちでしたらわけて頂けませんか?