Wiki Page Content

Differences between revisions 10 and 11
Revision 10 as of 2010-10-12 01:16:04
Size: 2346
Editor: SheenaSmith
Comment: update content - pointers, structs
Revision 11 as of 2011-10-30 21:40:21
Size: 3053
Editor: SheenaSmith
Comment: add code example from old wiki http://www.libsdl.org/cgi/docwiki.cgi/Audio_Examples
Deletions are marked like this. Additions are marked like this.
Line 26: Line 26:
You can add your code example here static Uint8 *audio_chunk;
static Uint32 audio_len;
static Uint8 *audio_pos;

/* The audio function callback takes the following parameters:
   stream: A pointer to the audio buffer to be filled
   len: The length (in bytes) of the audio buffer
*/
void fill_audio(void *udata, Uint8 *stream, int len)
{
/* Only play if we have data left */
    if ( audio_len == 0 )
        return;

/* Mix as much data as possible */
    len = ( len > audio_len ? audio_len : len );
    SDL_MixAudio(stream, audio_pos, len, SDL_MIX_MAXVOLUME);
    audio_pos += len;
    audio_len -= len;
}

/* Load the audio data ... */

;;;;;

audio_pos = audio_chunk;

/* Let the callback function play the audio chunk */
SDL_PauseAudio(0);

/* Do some processing */

;;;;;

/* Wait for sound to complete */
while ( audio_len > 0 ) {
    SDL_Delay(100); /* Sleep 1/10 second */
}
SDL_CloseAudio();
Line 28: Line 66:
<<Color2(green,There is a reference to the following in the old wiki. Do any of these examples belong in the new wiki?)>>
http://www.libsdl.org/cgi/docwiki.cgi/Audio_Examples

DRAFT

SDL_MixAudio

Use this function to mix audio data.

Syntax

void SDL_MixAudio(Uint8*       dst, 
                  const Uint8* src,
                  Uint32       len, 
                  int          volume)

Function Parameters

dst

the destination for the mixed audio

src

the source audio buffer to be mixed

len

defines the length of the audio buffer in bytes

volume

ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME for full audio volume

Code Examples

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

/* The audio function callback takes the following parameters:
   stream:  A pointer to the audio buffer to be filled
   len:     The length (in bytes) of the audio buffer
*/
void fill_audio(void *udata, Uint8 *stream, int len)
{
/* Only play if we have data left */
    if ( audio_len == 0 )
        return;

/* Mix as much data as possible */
    len = ( len > audio_len ? audio_len : len );
    SDL_MixAudio(stream, audio_pos, len, SDL_MIX_MAXVOLUME);
    audio_pos += len;
    audio_len -= len;
}

/* Load the audio data ... */

;;;;;

audio_pos = audio_chunk;

/* Let the callback function play the audio chunk */
SDL_PauseAudio(0);

/* Do some processing */

;;;;;

/* Wait for sound to complete */
while ( audio_len > 0 ) {
    SDL_Delay(100);         /* Sleep 1/10 second */
}
SDL_CloseAudio();

Remarks

This takes an audio buffer src of len bytes in the playing audio format and mixes it into dst, performing addition, volume adjustment, and overflow clipping.

Note that this does not change hardware volume.

This is provided for convenience -- you can mix your own audio data.

Do not use this function for mixing together more than two streams of sample data. The output from repeated application of this function may be distorted by clipping, because there is no accumulator with greater range than the input (not to mention this being an inefficient way of doing it). Use mixing functions from SDL_mixer, OpenAL, or write your own mixer instead.

It is a common misconception that this function is required to write audio data to an output stream in the audio-callback. While you can do that, SDL_MixAudio() is really only needed when you're mixing a single audio stream with a volume adjustment.

*
green

void audio_callback(void *udata, Uint8 *stream, int len)
{
    SDL_MixAudio(stream, audio_pos, len, SDL_MIX_MAXVOLUME);
}


*


CategoryAPI, CategoryAudio

None: SDL_MixAudio (last edited 2015-01-02 21:46:19 by PhilippWiesemann)

(Page Info.)
Feedback
Please include your contact information if you'd like to receive a reply.
Submit