Spis treści płyty audio CD

Spis treści lub spis treści to nazwa obszaru danych znajdującego się na początku każdej płyty audio CD . Spis treści zawiera listę utworów na płycie CD . Jeśli dysk CD jest wielosesyjny, każda sesja ma spis treści. Sesja składa się z doprowadzającego , w obszarze programu , a wyprowadzającym (który musi zawierać co najmniej 90 sekund ciszy).

Spis treści płyty Audio CD pełni tę samą rolę, co katalog główny konwencjonalnego dysku twardego. Różnice są następujące:

Rozmiar spisu treści obejmuje liczbę i położenie 100 utworów. Fizycznie OCD znajduje się na wejściu , a więc na początku CD (średnica 23 mm do średnicy 25 mm). Utwory muszą być numerowane przyrostowo, ale nie ma obowiązku rozpoczynania od utworu 1. Zatem w przypadku zestawu 2-CD box, jeśli pierwszy zawiera 10 utworów, możliwe jest rozpoczęcie numeracji drugiego CD od 11. Aby mieć pewność, że jesteś kompatybilny ze wszystkimi graczami na rynku, zalecamy jednak zacząć od 1.

Strukturę spisu treści oraz limit liczby zakresów określa Czerwona Księga .

Struktura spisu treści

Spis treści składa się z dwóch rodzajów informacji:

Spis treści zawiera informacje o 100 utworach: 99 utworach muzycznych autoryzowanych na płycie Audio CD i wyjściu .

Podczas implementacji dwóch struktur opisanych poniżej w oprogramowaniu kompilator nie powinien dodawać bajtu wypełniającego, aby wyrównać pola. W przypadku GCC musisz użyć opcji PAKOWANE.

Struktura informacji na plaży

Ta 8-bajtowa struktura jest znana jako TOCTRACK .

Zawartość Addr może być w formacie MSF lub w formacie LBA:

Podany kod źródłowy pokazuje, jak aktywować tryb MSF.

Struktura spisu treści

Ta struktura o rozmiarze 804 bajtów ((8 * 100) +4) jest znana jako TOC.

Jak czytać OCD?

GNU / Linux

W Linuksie możesz łatwo odczytać pierwsze sektory płyty CD za pomocą narzędzia dd , a następnie musisz samodzielnie zinterpretować surowe dane odczytane z dysku. Prostszą metodą jest użycie cdrdao z opcją read-toc w celu bezpośredniego pobrania informacji w pliku clear.

Windows

W systemie Windows nie mamy bezpośredniego dostępu do zawartości płyty CD, więc nie mamy dostępu do spisu treści. Aby fizycznie uzyskać dostęp do sektorów CD , należy użyć warstwy interfejsu oprogramowania, umożliwiającej wysyłanie poleceń SCSI do czytnika lub urządzenia zapisującego. Można na przykład skorzystać z ASPI firmy Adaptec, patrz przykład poniżej. Dokumentacja dostarczona z listy bibliotek ASPI obejmuje dodawanie, jak również dla Definiuje które zależą od kompilatora ( 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.

Innym rozwiązaniem jest użycie plików CDA dostarczonych przez system Windows podczas wkładania dysku CD . Problem z tym rozwiązaniem polega na tym, że nie podaje pozycji wyprowadzenia , a zatem nie pozwala na obliczenie DiscId .