[Předchozí] Obsah [Další]

Použití Simple DirectMedia Layer API

Zvuk z CD-ROM

  • Otevření CD-ROM mechaniky k použití programem

Pomocí funkce SDL_CDNumDrives() můžete zjistit, kolik CD-ROM mechanik je v systému a pak si vybrat, kterou použít, pomocí SDL_CDOpen().

Defaultní systémová CD-ROM je vždy mechanika 0. CD-ROM mechanika se dá otevřít pro použití ve vaší aplikaci, i když v ní není žádný disk.

Pro zjištění stavu mechaniky byste měli používat funkci SDL_CDStatus(). Po ukončení práce s CD-ROM mechanikou ji uzavřete pomocí funkce SDL_CDClose().

Tip:
Na systému závislé jméno CD mechaniky můžete získat použitím funkce SDL_CDName().
Příklad:
{
    SDL_CD *cdrom;

    if ( SDL_CDNumDrives() > 0 ) {
        cdrom = SDL_CDOpen(0);
        if ( cdrom == NULL ) {
            fprintf(stderr, "Nelze otevřít defaultní CD-ROM: %s\n" SDL_GetError());
            return;
        }

        ...

        SDL_CDClose(cdrom);
    }
}
  • Přehrávání CD

CD-ROM mechaniky udávají čas buď v MSF formátu (minuty/sekundy/snímky), nebo přímo ve snímcích. Snímek je standardní jednotka času na CD, která odpovídá 1/75 sekundy. Při udávání délky stop (skladeb) a offsetů používá SDL snímky namísto MSF formátu, ale tyto údaje lze navzájem přepočítat pomocí maker FRAMES_TO_MSF() a MSF_TO_FRAMES().

SDL neupdatuje informace o stopě ve struktuře SDL_CD, dokud nezavoláte SDL_CDStatus(), takže byste měli vždy používat SDL_CDStatus(), abyste se ujistili, že v mechanice je CD a zjistili, jaké stopy jsou na CD, než ho přehrajete. Stopy jsou číslovány od nuly.

SDL má dvě funkce pro přehrání CD. Můžete buď nechat přehrát konkrétní stopy na CD pomocí SDL_CDPlayTracks(), nebo přehrát offsety absolutních snímků pomocí SDL_CDPlay().

SDL neupozorňuje automaticky na vložení CD nebo na dokončení přehrávání. Pro detekci těchto situací musíte pravidelně načítat stav mechaniky pomocí SDL_CDStatus(). Protože tato funkce čte tabulku s obsahem CD, neměla by být stále volána v krátké smyčce.

Tip:
Pokud se podíváte na cdrom‑>tracks[track].type a porovnáte tuto hodnotu s SDL_AUDIO_TRACK a SDL_DATA_TRACK, zjistíte, které stopy jsou zvukové a které datové.
Příklad:
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);
    }
}

[Předchozí] Obsah [Další]