Exemplos de Audio

Abrindo o dispositivo de Audio

    SDL_AudioSpec wanted;
    extern void fill_audio(void *udata, Uint8 *stream, int len);

    /* Definindo o formato do audio */
    wanted.freq = 22050;
    wanted.format = AUDIO_S16;
    wanted.channels = 2;    /* 1 = mono, 2 = stereo */
    wanted.samples = 1024;  /* Um bom valor de baixa-latencia para o callback */
    wanted.callback = fill_audio;
    wanted.userdata = NULL;

    /* Abrir o dispositivo de audio, forçando o formato desejado */
    if ( SDL_OpenAudio(&wanted, NULL) < 0 ) {
        fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError());
        return(-1);
    }
    return(0);

Tocando o audio

    static Uint8 *audio_chunk;
    static Uint32 audio_len;
    static Uint8 *audio_pos;

    /* A função callback do audio segue os seguintes parâmetros:
       stream:  Um indicador para o buffer do audio ser preenchido
       len:     O comprimento (em bytes) do buffer do audio
    */
    void fill_audio(void *udata, Uint8 *stream, int len)
    {
        /* Somente tocar se tiver dados (data) sobrando */
        if ( audio_len == 0 )
            return;

        /* Misturar a maior quantidade de dados o possível */
        len = ( len > audio_len ? audio_len : len );
        SDL_MixAudio(stream, audio_pos, len, SDL_MIX_MAXVOLUME)
        audio_pos += len;
        audio_len -= len;
    }

    /* Carregar os dados de audio ... */

    ;;;;;

    audio_pos = audio_chunk;

    /* Deixar a função callback tocar o pedaço do audio */
    SDL_PauseAudio(0);

    /* Fazendo algum processo ... */

    ;;;;;

    /* Esperar pelo som para completar */
    while ( audio_len > 0 ) {
        SDL_Delay(100);         /* Sleep 1/10 second */
    }
    SDL_CloseAudio();

SDLDoc-ptBR/Exemplos_Audio (last edited 2008-04-17 08:18:15 by localhost)