[Precedente] Contenuti [Successivo]

Usare la Simple DirectMedia Layer API

La periferica CD-ROM

  • Open della periferica CD-ROM

E' possibile ottenere il numero di drive CD-ROM installati sul sistema usato mediante la funzione SDL_CDNumDrives(). E' possibile selezionarne uno con la funzione SDL_CDOpen().

Il CD-ROM di default del sistema e' il numero 0. La periferica puo' essere aperta anche se non e' presente nessun disco al suo interno.

La funzione SDL_CDStatus() serve per controllare lo stato di un drive. Per chiudere una periferica dopo l'uso, e' necessario usare la funzione SDL_CDClose().

Suggerimento:
E' possibile ottenere il nome di una periferica CD-ROM tramite la funzione SDL_CDName(). Il nome ottenuto sara' dipendente dal sistema operativo utilizzato.
Esempio:
{
    SDL_CD *cdrom;

    if ( SDL_CDNumDrives() > 0 ) {
        cdrom = SDL_CDOpen(0);
        if ( cdrom == NULL ) {
            fprintf(stderr, "Impossibile aprire il CD-ROM di " \
				"default: %s\n", SDL_GetError());
            return;
        }

        ...

        SDL_CDClose(cdrom);
    }
}
  • Uso della periferica CD-ROM

I lettori CD-ROM specificano i tempi nel formato MSF (minuti/secondi/frames) oppure direttamente in frames. Un frame e' un'unita' di misura di tempo standard per i CD, e corrisponde a 1/75 di secondo. L'SDL usa i frames al posto del sistema MSF per specificare la lunghezza e gli offset delle tracce, ma puo' convertire i due formati tramite le macro FRAMES_TO_MSF() e MSF_TO_FRAMES().

L'SDL non aggiorna le informazioni sulle tracce in una struttura SDL_CD fino a che non viene chiamata la funzione SDL_CDStatus(). Quindi, e' bene usare la suddetta funzione ogni volta che si devono leggere delle tracce da un CD, in modo da assicurarsi che ci sia effettivamente un CD nel drive, e sincerarsi delle tracce a disposizione sul disco. Gl'indici di traccia partono da 0, per la prima traccia.

SDL mette a disposizione due funzioni per il play di tracce da CD. E' possibile il play di tracce specifiche usando la funzione SDL_CDPlayTracks(), oppure il play di gruppi di frame tramite la funzione SDL_CDPlay().

L'SDL non prevede un metodo per la notificazione automatica dell'inserimento di un CD nel drive, come neppure per il raggiungimento della fine dell'operazione di play. Per verificare questi eventi, e' necessario chiamare periodicamente SDL_CDStatus() per controllare lo stato del CD. Dal momento che questa funzione aggiorna anche la tavola dei contenuti del CD, non dovrebbe essere chiamata in continuazione in un loop stretto.

Suggerimento:
E' possibile determinare quali tracce sono audio e quali sono dati osservando il membro cdrom->tracks[track].type, e successivamente comparandolo ai simboli SDL_AUDIO_TRACK e SDL_DATA_TRACK.
Esempio:
void PlayTrack(SDL_CD *cdrom, int track)
{
    if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) {
        SDL_CDPlayTracks(cdrom, track, 0, track+1, 0);
    }
    while ( SDL_CDStatus(cdrom) == CD_PLAYING ) {
        SDL_Delay(1000);
    }
}

[Precedente] Contenuti [Successivo]