[Anterior] Tabla De Contenido [Siguiente]

Usando la API de Simple DirectMedia Layer

CD-ROM de audio

  • Abriendo una unidad de CD-ROM para su uso

Puedes averiguar cuantas unidades de CD-ROM hay en el sistema con la función SDL_CDNumDrives(), y entonces escoger una con SDL_CDOpen().

La unidad de CD-ROM por defecto del sistema es siempre 0. La unidad de CD-ROM puede abrirse para su uso incluso si no hay un disco en su interior.

Deberías utilizar la función SDL_CDStatus() para determinar el estado de la unidad . Cuando termines de usar la unidad de CD-ROM, ciérrala con la función SDL_CDClose().

Pista:
Puedes obtener el nombre del dispositivo dependiente del sistema mediante la función SDL_CDName().
Ejemplo:
{
    SDL_CD *cdrom;

    if ( SDL_CDNumDrives() > 0 ) {
        cdrom = SDL_CDOpen(0);
        if ( cdrom == NULL ) {
            fprintf(stderr, "No puedo abrir el CD-ROM \ 
                    por defecto: %s\n" SDL_GetError());
            return;
        }

        ...

        SDL_CDClose(cdrom);
    }
}
  • Reproduciendo el CD-ROM

Las unidades de CD-ROM especifican el tiempo bien en formato MSF (mins/segs/marcos), bien directamente en marcos. Un marco es una unidad estándar de tiempo en el CD, que se corresponde con 1/75 segundos. SDL usa marcos en lugar del formato MSF cuando especifica longitudes de pisat y desplazamientos, pero puedes convertir entre ambos formatos usando las macros FRAMES_TO_MSF() y MSF_TO_FRAMES().

SDL no actualiza la información de pistas en la estructura SDL_CD hasta que realices una llamada a SDL_CDStatus(), así que deberías siempre hacer uso de SDL_CDStatus() para asegurarte de que hay un CD en la unidad y determinar qué pistas tienes disponibles antes de reproducir el CD. Notar que los índices para las pistas comienzan en 0 para la primera pista.

SDL tiene dos funciones de reproducción de CD-ROM. Puedes reproducir pistas especificas del CD usando SDL_CDPlayTracks(), o puedes reproducir de una posición absoluta de marco usando SDL_CDPlay().

SDL no facilita notificación automática de inserción de CD o de fin de reproducción. Para detectar estas condiciones, necesitarás consultar periódicamente el estado de la unidad con SDL_CDStatus(). Ya que esta llamada lee la tabla de contenido del CD, no debería ser llamada continuamente en un bucle corto.

Pista:
Puedes determinar qué pistas son de audio y cuales son de datos mirando en cdrom->tracks[track].type, y comparando su valor con SDL_AUDIO_TRACK y SDL_DATA_TRACK.
Ejemplo:
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);
    }
}

[Anterior] Tabla De Contenido [Siguiente]