Ses CD'si için içerik tablosu

TOK veya İçeriğin Tablo her başında bulunan bir veri alanının adıdır Ses CD'si . TOC, CD'deki parçaların listesini içerir . CD çok oturumluysa, her oturumda bir TOC bulunur. Oturum, giriş , program alanı ve çıkıştan oluşur (en az 90 saniyelik sessizlik içermelidir).

Bir Ses CD'sinin TOC'si, geleneksel bir sabit sürücünün kök dizini ile aynı rolü oynar . Farklılıklar aşağıdaki gibidir:

Bir TOC, 100 yolun sayısını ve konumunu içerecek şekilde boyutlandırılır. Fiziksel olarak OKB bulunan kurşun-in öylesine CD (çap çap 25 mm 23 mm) başında. Parçalar aşamalı olarak numaralandırılmalıdır, ancak 1. parçadan başlama zorunluluğu yoktur. Dolayısıyla, 2 CD'lik bir kutu olması durumunda, ilk 10 parça içeriyorsa, ikinci CD'nin numaralandırmasına 11'den başlamak mümkündür. . Piyasadaki tüm oyuncularla uyumlu olduğunuzdan emin olmak için, ancak, 1'den başlamanız önerilir.

TOC'nin yapısı ve aralık sayısı sınırı, Kırmızı Kitap tarafından tanımlanmıştır .

TOC'nin Yapısı

TOC iki tür bilgiden oluşur:

TOC, 100 parça hakkında bilgi içerir: bir Ses CD'sinde yetkilendirilmiş 99 müzik parçası ve çıkış .

Yazılımda aşağıda açıklanan iki yapıyı uygularken, derleyici alanları hizalamak için bir dolgu baytı eklememelidir. GCC ile PACKED seçeneğini kullanmanız gerekir.

Plajdaki bilgi yapısı

Bu 8 baytlık yapı TOCTRACK olarak bilinir .

Addr içeriği MSF formatında veya LBA formatında olabilir:

Verilen kaynak kodu, MSF modunun nasıl etkinleştirileceğini gösterir.

TOC'nin Yapısı

804 bayt ((8 * 100) +4) boyutundaki bu yapı TOC olarak bilinir.

OKB nasıl okunur?

GNU / Linux

Linux altında, CD'nin ilk sektörlerini dd yardımcı programıyla kolayca okuyabilirsiniz, daha sonra diskte okunan ham verileri kendiniz yorumlamalısınız. Daha basit bir yöntem cdrdao'yu okuma-toc seçeneğiyle birlikte doğrudan temizlemedeki bilgileri almak için kullanmaktır.

pencereler

Windows altında CD'nin içeriğine doğrudan erişemiyoruz, bu nedenle TOC'ye erişimimiz yok. CD sektörlerine fiziksel olarak erişmek için, okuyucuya veya yazıcıya SCSI komutlarının gönderilmesine izin veren bir yazılım arayüz katmanı kullanılmalıdır . Örneğin Adaptec şirketinden ASPI kullanılabilir , aşağıdaki örneğe bakın. ASPI kütüphane listeleri ile birlikte belgeleri kapsamaktadır yanı sıra, ekleme tanımlayıp derleyici (bağlıdır Borland C ++ Builder , Microsoft Visual C ++ , GCC ).

TOC toc; // définir une structure en fonction des informations données plus haut SRB_ExecSCSICmd SRBexec; DWORD dwASPIStatus; HANDLE hEvent; memset(&SRBexec, 0, sizeof(SRB_ExecSCSICmd)); hEventSRB = CreateEvent(NULL, TRUE, FALSE, NULL); if (!heventSRB) { // ERREUR : sortir } SRBexec.SRB_Cmd = SC_EXEC_SCSI_CMD; SRBexec.SRB_HaID = haId; // numéro de l'interface SRBexec.SRB_Target = id; // identifiant du périphérique SRBexec.SRB_Lun = lun; // unité logique SRBexec.SRB_Flags = SRB_DIR_IN; // sens du transfert SRBexec.SRB_BufLen = sizeof(TOC); // taille des données à transférer (la TOC) SRBexec.SRB_BufPointer = &toc; SRBexec.SRB_SenseLen = 0x0e; SRBexec.SRB_CDBLen = 0x0A; SRBexec.SRB_CDBByte[0] = 0x43; // numéro de la commande "read TOC" SRBexec.SRB_CDBByte[1] = 0x02; // pour le format du champ Addr (mode MSF = Minute/Second/Frame) SRBexec.SRB_CDBByte[7] = 0x03; // poids-fort de la taille du buffer (804=0x324) SRBexec.SRB_CDBByte[8] = 0x24; // poids-faible de la taille du buffer (804=0x324) SRBexec.SRB_PostProc = hEventSRB; // on bloque sur cet objet, pour attendre la fin de la commande ResetEvent(hEventSRB); // reset l'événement avant de l'utiliser dwASPIStatus = SendASPI32Command((LPSRB)&srbExec); if (dwASPIStatus == SS_PENDING) // commande acceptée, en cours d'exécution { WaitForSingleObject(heventSRB, 15000); // attendre au maximum 15 secondes } else { // ERREUR CloseHandle(hEventSRB); // libérer la ressource avant de sortir // sortir } CloseHandle(hEventSRB); // libérer la ressource avant de sortir if (srbExec.SRB_Status != SS_COMP) { // ERREUR pendant l'exécution, sortir } // commande terminée sans erreur, la TOC est dans la structure toc.

Diğer bir çözüm, CD'yi yerleştirirken Windows tarafından sağlanan CDA dosyalarını kullanmaktır . Bu çözüm ile sorun pozisyonunu vermek olmamasıdır kurşun-out izin vermez, bu nedenle, ve DISCID hesaplanacak .