loopwave.c File Reference
`#include "SDL_config.h"`
`#include <stdio.h>`
`#include <stdlib.h>`
`#include "SDL.h"`
Include dependency graph for loopwave.c:

Go to the source code of this file.

## Functions

static void | quit (int rc)
void | fillerup (void *unused, Uint8 *stream, int len)
void | poked (int sig)
int | main (int argc, char *argv[])

## Variables

struct {
SDL_AudioSpec spec
Uint8 * sound
Uint32 soundlen
int soundpos
} | wave
static int | done = 0

## Function Documentation

void fillerup | ( | void * | unused,
|  | Uint8 * | stream,
|  | int | len
| ) |  |

Definition at line 52 of file loopwave.c.

References SDL_memcpy, and wave.

Referenced by main().

{
Uint8 *waveptr;
int waveleft;
/* Set up the pointers */
waveptr = wave.sound + wave.soundpos;
waveleft = wave.soundlen - wave.soundpos;
/* Go! */
while (waveleft <= len) {
SDL_memcpy(stream, waveptr, waveleft);
stream += waveleft;
len -= waveleft;
waveptr = wave.sound;
waveleft = wave.soundlen;
wave.soundpos = 0;
}
SDL_memcpy(stream, waveptr, len);
wave.soundpos += len;
}
stream
GLuint GLuint stream
Definition: SDL_opengl_glext.h:1776
len
GLenum GLsizei len
Definition: SDL_opengl_glext.h:2926
SDL_memcpy
#define SDL_memcpy
Definition: SDL_dynapi_overrides.h:393
Uint8
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:139
wave
struct @39 wave

int main | ( | int | argc,
|  | char * | argv[]
| ) |  |

Definition at line 91 of file loopwave.c.

References done, sort_controllers::filename, fillerup(), i, loop(), NULL, poked(), quit(), SDL_AUDIO_PLAYING, SDL_CloseAudio, SDL_Delay, SDL_FreeWAV, SDL_GetAudioDriver, SDL_GetAudioStatus, SDL_GetCurrentAudioDriver, SDL_GetError, SDL_GetNumAudioDrivers, SDL_Init, SDL_INIT_AUDIO, SDL_LoadWAV, SDL_Log, SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, SDL_LogError, SDL_LogSetPriority, SDL_OpenAudio, SDL_PauseAudio, SDL_Quit, SDL_strlcpy, and wave.

{
int i;
char filename[4096];
/* Enable standard application logging */
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
/* Load the SDL library */
if (SDL_Init(SDL_INIT_AUDIO) < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
return (1);
}
if (argc > 1) {
SDL_strlcpy(filename, argv[1], sizeof(filename));
} else {
SDL_strlcpy(filename, "sample.wav", sizeof(filename));
}
/* Load the wave file into memory */
if (SDL_LoadWAV(filename, &wave.spec, &wave.sound, &wave.soundlen) == NULL) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", filename, SDL_GetError());
quit(1);
}
wave.spec.callback = fillerup;
#if HAVE_SIGNAL_H
/* Set the signals */
#ifdef SIGHUP
signal(SIGHUP, poked);
#endif
signal(SIGINT, poked);
#ifdef SIGQUIT
signal(SIGQUIT, poked);
#endif
signal(SIGTERM, poked);
#endif /* HAVE_SIGNAL_H */
/* Show the list of available drivers */
SDL_Log("Available audio drivers:");
for (i = 0; i < SDL_GetNumAudioDrivers(); ++i) {
SDL_Log("%i: %s", i, SDL_GetAudioDriver(i));
}
/* Initialize fillerup() variables */
if (SDL_OpenAudio(&wave.spec, NULL) < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open audio: %s\n", SDL_GetError());
SDL_FreeWAV(wave.sound);
quit(2);
}
SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver());
/* Let the audio run */
SDL_PauseAudio(0);
#ifdef __EMSCRIPTEN__
emscripten_set_main_loop(loop, 0, 1);
#else
while (!done && (SDL_GetAudioStatus() == SDL_AUDIO_PLAYING))
SDL_Delay(1000);
#endif
/* Clean up on signal */
SDL_CloseAudio();
SDL_FreeWAV(wave.sound);
SDL_Quit();
return (0);
}
SDL_GetNumAudioDrivers
#define SDL_GetNumAudioDrivers
Definition: SDL_dynapi_overrides.h:79
SDL_strlcpy
#define SDL_strlcpy
Definition: SDL_dynapi_overrides.h:400
loop
void loop()
Definition: checkkeys.c:152
SDL_GetError
#define SDL_GetError
Definition: SDL_dynapi_overrides.h:119
SDL_GetAudioStatus
#define SDL_GetAudioStatus
Definition: SDL_dynapi_overrides.h:88
poked
void poked(int sig)
Definition: loopwave.c:76
SDL_OpenAudio
#define SDL_OpenAudio
Definition: SDL_dynapi_overrides.h:84
SDL_FreeWAV
#define SDL_FreeWAV
Definition: SDL_dynapi_overrides.h:93
SDL_LogError
#define SDL_LogError
Definition: SDL_dynapi_overrides.h:42
SDL_Log
#define SDL_Log
Definition: SDL_dynapi_overrides.h:37
SDL_PauseAudio
#define SDL_PauseAudio
Definition: SDL_dynapi_overrides.h:90
fillerup
void fillerup(void *unused, Uint8 *stream, int len)
Definition: loopwave.c:52
sort_controllers.filename
string filename
Definition: sort_controllers.py:8
quit
static void quit(int rc)
Definition: loopwave.c:44
SDL_Quit
#define SDL_Quit
Definition: SDL_dynapi_overrides.h:64
SDL_LoadWAV
#define SDL_LoadWAV(file, spec, audio_buf, audio_len)
Definition: SDL_audio.h:424
SDL_GetAudioDriver
#define SDL_GetAudioDriver
Definition: SDL_dynapi_overrides.h:80
SDL_LOG_PRIORITY_INFO
Definition: SDL_log.h:106
done
static int done
Definition: loopwave.c:74
SDL_Delay
#define SDL_Delay
Definition: SDL_dynapi_overrides.h:490
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:42
SDL_LogSetPriority
#define SDL_LogSetPriority
Definition: SDL_dynapi_overrides.h:242
SDL_GetCurrentAudioDriver
#define SDL_GetCurrentAudioDriver
Definition: SDL_dynapi_overrides.h:83
NULL
#define NULL
Definition: begin_code.h:143
SDL_INIT_AUDIO
#define SDL_INIT_AUDIO
Definition: SDL.h:76
SDL_CloseAudio
#define SDL_CloseAudio
Definition: SDL_dynapi_overrides.h:102
wave
struct @39 wave
SDL_Init
#define SDL_Init
Definition: SDL_dynapi_overrides.h:60
SDL_AUDIO_PLAYING
Definition: SDL_audio.h:371
SDL_LOG_CATEGORY_APPLICATION
Definition: SDL_log.h:66

void poked | ( | int | sig | ) |

Definition at line 76 of file loopwave.c.

References done, loop(), SDL_AUDIO_PLAYING, and SDL_GetAudioStatus.

Referenced by main().

{
done = 1;
}
done
static int done
Definition: loopwave.c:74

static void quit | ( | int | rc | ) |

static

Definition at line 44 of file loopwave.c.

References SDL_Quit, and SDLCALL.

Referenced by main().

{
SDL_Quit();
exit(rc);
}
SDL_Quit
#define SDL_Quit
Definition: SDL_dynapi_overrides.h:64

## Variable Documentation

int done = 0

static

Definition at line 74 of file loopwave.c.

Referenced by main(), and poked().

Uint8* sound

Definition at line 36 of file loopwave.c.

Uint32 soundlen

Definition at line 37 of file loopwave.c.

int soundpos

Definition at line 38 of file loopwave.c.

SDL_AudioSpec spec

Definition at line 35 of file loopwave.c.

Referenced by main().

struct { ... } wave

Referenced by fillerup(), and main().