[Précédente] Table Des Matières [Suivante]

Utiliser l'API Simple DirectMedia Layer

CD-ROM audio

  • Accéder à un lecteur de CD-ROM

Vous pouvez combien de lecteurs de CD-ROM existent sur les système grâce à la fonction SDL_CDNumDrives(), et accéder à l'un d'entre eux avec SDL_CDOpen().

Le lecteur 0 est le lecteur par défaut sur le système. Le lecteur de CD-ROM peut être ouvert même si il ne contient aucun disque.

Vous devriez utiliser la fonction SDL_CDStatus() afin de déterminer l'état du lecteur de CD-ROM. Après avoir utilisé le lecteur vous devez le fermer avec SDL_CDClose().

Astuce:
Vous pouvez récupérer le nom du lecteur de CD-ROM au sein du système, en utilisant le fonction SDL_CDName().
Exemple:
{
    SDL_CD *cdrom;

    if ( SDL_CDNumDrives() > 0 ) {
        cdrom = SDL_CDOpen(0);
        if ( cdrom == NULL ) {
            fprintf(stderr, "Impossible d'ouvrir le lecteur de CD-ROM par défaut %s\n" SDL_GetError());
            return;
        }

        ...

        SDL_CDClose(cdrom);
    }
}
  • Utiliser un lecteur de CD-ROM

Le temps spécifié par les lecteurs de CD-ROM est soit au format MSF (min/sec/frame) ou directement en "frames". Un frame est une unité standard de temps sur les CDs, il correspond à 1/75 d'une seconde. SDL utilise les frames au lieu du format MSF pour afficher la durée et la plage d'un CD, mais vous pouvez les convertir grâce aux macros : FRAMES_TO_MSF() et MSF_TO_FRAMES().

SDL ne remet pas à jour l'information sur les pistes dans la structure SDL_CD tant que vous n'appelez pas SDL_CDStatus(), donc vous devriez toujours l'appeler pour vérifier que le lecteur contient bien un CD, et déterminer ainsi quelles sont les pistes du CD avant de le jouer. Notez que l'index des pistes démarre à 0 pour la première piste.

SDL possède deux fonctions pour jouer un CD. Vous pouvez soit utiliser SDL_CDPlayTracks() pour jouer une piste précise, soit utiliser SDL_CDPlay() et jouer l'ensemble du CD.

SDL ne notifie pas automatiquement l'insertion d'un CD ou qu'un CD est fini. Vous devez donc vérifier l'état du lecteur périodiquement avec SDL_CDStatus(). Puisque cet appel lit la table des matières du CD, il ne devrait pas être appelé continuellement en une boucle hermétique.

Astuce:
Vous pouvez déterminer quelles pistes sont des pistes audios et quelles pistes sont des pistes de données, en regardant cdrom->tracks[track].type, et en le comparant aux SDL_AUDIO_TRACK et SDL_DATA_TRACK.
Exemple:
void JouerPiste(SDL_CD *cdrom, int piste)
{
    if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) {
        SDL_CDPlayTracks(cdrom, piste, 0, piste+1, 0);
    }
    while ( SDL_CDStatus(cdrom) == CD_PLAYING ) {
        SDL_Delay(1000);
    }
}

[Précédente] Table Des Matières [Suivante]