問題タブ [cd-rom]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - CD-ROM の正確なトラック長を計算するために前後のギャップをどのように検出しますか?
を使用してIOCTL_CDROM_READ_TOC_EX
、CD-ROM トラックの正確な長さを計算する単純な方法は、オーディオ トラックには 2 秒のプリギャップがあり、別のトラック タイプが続くデータ トラックには 2 秒のポスト ギャップがあると仮定することです。
しかし、残念なことに、マルチセッション ディスクなど、常にそうであるとは限りません。
そこで、各トラックの正確な長さを計算するために次のことを思いつきました。
- トラックの先頭を逆方向に読み取る
- コマンドを発行して
READ CD
Q サブチャネルを読み取る INDEX
電流がゼロである限り、TNO
事実上、ギャップ前後のゾーンにいます。
これは期待どおりに機能し、ギャップを見つけてセクター単位の正確なトラック長を計算できます。
しかし、このトピックが SCSI マルチメディア コマンド仕様で説明されていないのは少し驚くべきことです!
質問:
これは、CD-ROM の各トラックの正確な長さを計算する正しい方法ですか?
crc32 - cdrom の crc32 多項式を理解する
CDROM データは、Reed-Solomon を使用した第 3 層のエラー検出と、32 ビットの CRC 多項式を使用した EDC を使用します。
ECMA 130規格では、EDC CRC 多項式を次のように定義しています (16 ページ、14.3 ページ)。
P(X) = (X^16 + x^15 + x^2 + 1).(x^16 + x^2 + x + 1)
と
データ バイトの最下位ビットが最初に使用されます。
通常、多項式を整数値形式に変換するのは非常に簡単です。モジュロ演算を使用すると、拡張多項式は である必要がP(X) = x^32 + x^31 + x^18 + x^17 + x^16 + x^15 + x^4 + x^3 + x^2 + x + 1
あるため、値は0x8007801F
最後の文は、多項式が逆になっていることを意味します (正しく理解できれば)。
しかし、これまでのところ正しい値を得ることができませんでした。Cdrtoolsソース コードは、多項式の値として 0x08001801 を使用します。誰かがその価値をどのように見つけたのか説明できますか?