[anterior] Conteúdo [próxima]

Usando a API Simple DirectMedia Layer

CD-ROM áudio

  • Abrindo o drive de CD-ROM para uso:

Você pode descobrir quantos drives de CD-ROM existem no sistema com a função SDL_CDNumDrives() , e escolher um para usar com SDL_CDOpen()

O drive de CD-ROM padrão do sistema é o 0 .O drive de CD-ROM deve ser aberto antes do uso, mesmo que não haja disco no drive.

Você deve usar a função SDL_CDStatus para determinar o estado do drive.Depois que terminar de usar o drive de CD-ROM, você deve fecha-lo com a função SDL_CDClose().

Dica:
Você pode obter o nome do drive no sistema usando a função SDL_CDName()
Exemplo:
{
    SDL_CD *cdrom;

    if ( SDL_CDNumDrives() > 0 ) {
        cdrom = SDL_CDOpen(0);
        if ( cdrom == NULL ) {
            fprintf(stderr, "Não foi possível abrir CD-ROM padrão: %s\n" SDL_GetError());
            return;
        }

        ...

        SDL_CDClose(cdrom);
    }
}
  • executando o  CD-ROM

Drives de CD-Rom especificam tempo tanto no formato MSF (mins/secs/frames) ou diretamente em frames. Uma frame é uma unidade padrão de tempo no CD, correspondendo a 1/75 de um segundo. SDL usa frames ao invés do formato MSF ,quando especifica  a duração de faixas e deslocamentos, mas você pode converte-los usando as macros FRAMES_TO_MSF() e MSF_TO_FRAMES().

SDL não atualiza a  informação de faixa na estrutura SDL_CD até você chamar SDL_CDStatus(), então você deve sempre usar SDL_CDStatus() para ter certeza que ha um CD no drive e para determinar que faixas estão disponíveis antes de executa-lo.Vale lembrar que na numeração de faixas, a primeira tem o numero 0.

SDL  possui duas funções para executar o CD-ROM. Você pode tanto executar faixas especificas usando SDL_CDPlayTracks(), ou você pode executar pelo deslocamento absoluto de frames ,usando SDL_CDPlay(). 

SDL não prove notificação automática de inserção de CD ou de fim do CD.Para detectar estas condições, você precisa periodicamente, consultar o status do drive com SDL_CDStatus().Partindo do principio de que esta chamada lê todo o conteúdo do CD, ela não  deve ser chamada em um loop muito  apertado (de modo a não ocupar o sistema permanentemente).

Dica:

Você pode determinar quais  faixas são faixas de áudio e quais são de dados somente por olhar em cd-rom->tracks[track].type e comparar este membro de dados com as flags SDL_AUDIO_TRACK e SDL_DATA_TRACK.

Exemplo:
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] Conteúdo [próxima]