SDL 2.0
loopwavequeue.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include "SDL.h"
+ Include dependency graph for loopwavequeue.c:

Go to the source code of this file.

Functions

static void quit (int rc)
 
void poked (int sig)
 
void loop ()
 
int main (int argc, char *argv[])
 

Variables

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

Function Documentation

◆ loop()

void loop ( void  )

Definition at line 52 of file loopwavequeue.c.

53{
54#ifdef __EMSCRIPTEN__
56 emscripten_cancel_main_loop();
57 }
58 else
59#endif
60 {
61 /* The device from SDL_OpenAudio() is always device #1. */
62 const Uint32 queued = SDL_GetQueuedAudioSize(1);
63 SDL_Log("Device has %u bytes queued.\n", (unsigned int) queued);
64 if (queued <= 8192) { /* time to requeue the whole thing? */
65 if (SDL_QueueAudio(1, wave.sound, wave.soundlen) == 0) {
66 SDL_Log("Device queued %u more bytes.\n", (unsigned int) wave.soundlen);
67 } else {
68 SDL_Log("Device FAILED to queue %u more bytes: %s\n", (unsigned int) wave.soundlen, SDL_GetError());
69 }
70 }
71 }
72}
@ SDL_AUDIO_PLAYING
Definition: SDL_audio.h:398
#define SDL_GetError
#define SDL_GetQueuedAudioSize
#define SDL_GetAudioStatus
#define SDL_QueueAudio
#define SDL_Log
uint32_t Uint32
Definition: SDL_stdinc.h:203
static int done
Definition: loopwavequeue.c:44
static struct @286 wave

References done, SDL_AUDIO_PLAYING, SDL_GetAudioStatus, SDL_GetError, SDL_GetQueuedAudioSize, SDL_Log, SDL_QueueAudio, and wave.

Referenced by main().

◆ main()

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

Definition at line 75 of file loopwavequeue.c.

76{
77 char filename[4096];
78
79 /* Enable standard application logging */
81
82 /* Load the SDL library */
83 if (SDL_Init(SDL_INIT_AUDIO) < 0) {
84 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
85 return (1);
86 }
87
88 if (argc > 1) {
89 SDL_strlcpy(filename, argv[1], sizeof(filename));
90 } else {
91 SDL_strlcpy(filename, "sample.wav", sizeof(filename));
92 }
93 /* Load the wave file into memory */
94 if (SDL_LoadWAV(filename, &wave.spec, &wave.sound, &wave.soundlen) == NULL) {
96 quit(1);
97 }
98
99 wave.spec.callback = NULL; /* we'll push audio. */
100
101#if HAVE_SIGNAL_H
102 /* Set the signals */
103#ifdef SIGHUP
104 signal(SIGHUP, poked);
105#endif
106 signal(SIGINT, poked);
107#ifdef SIGQUIT
108 signal(SIGQUIT, poked);
109#endif
110 signal(SIGTERM, poked);
111#endif /* HAVE_SIGNAL_H */
112
113 /* Initialize fillerup() variables */
114 if (SDL_OpenAudio(&wave.spec, NULL) < 0) {
115 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open audio: %s\n", SDL_GetError());
116 SDL_FreeWAV(wave.sound);
117 quit(2);
118 }
119
120 /*static x[99999]; SDL_QueueAudio(1, x, sizeof (x));*/
121
122 /* Let the audio run */
124
125 done = 0;
126
127 /* Note that we stuff the entire audio buffer into the queue in one
128 shot. Most apps would want to feed it a little at a time, as it
129 plays, but we're going for simplicity here. */
130
131#ifdef __EMSCRIPTEN__
132 emscripten_set_main_loop(loop, 0, 1);
133#else
134 while (!done && (SDL_GetAudioStatus() == SDL_AUDIO_PLAYING))
135 {
136 loop();
137
138 SDL_Delay(100); /* let it play for awhile. */
139 }
140#endif
141
142 /* Clean up on signal */
144 SDL_FreeWAV(wave.sound);
145 SDL_Quit();
146 return 0;
147}
#define SDL_INIT_AUDIO
Definition: SDL.h:78
#define SDL_LoadWAV(file, spec, audio_buf, audio_len)
Definition: SDL_audio.h:484
#define SDL_OpenAudio
#define SDL_CloseAudio
#define SDL_strlcpy
#define SDL_LogSetPriority
#define SDL_LogError
#define SDL_FreeWAV
#define SDL_Delay
#define SDL_Quit
#define SDL_Init
#define SDL_PauseAudio
@ SDL_LOG_PRIORITY_INFO
Definition: SDL_log.h:106
@ SDL_LOG_CATEGORY_APPLICATION
Definition: SDL_log.h:66
#define NULL
Definition: begin_code.h:167
static void quit(int rc)
Definition: loopwavequeue.c:38
void poked(int sig)
Definition: loopwavequeue.c:46
void loop()
Definition: loopwavequeue.c:52

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

◆ poked()

void poked ( int  sig)

Definition at line 46 of file loopwavequeue.c.

47{
48 done = 1;
49}

References done.

Referenced by main().

◆ quit()

static void quit ( int  rc)
static

Definition at line 38 of file loopwavequeue.c.

39{
40 SDL_Quit();
41 exit(rc);
42}

References SDL_Quit.

Referenced by main().

Variable Documentation

◆ done

int done = 0
static

Definition at line 44 of file loopwavequeue.c.

Referenced by loop(), main(), and poked().

◆ sound

Uint8* sound

Definition at line 31 of file loopwavequeue.c.

◆ soundlen

Uint32 soundlen

Definition at line 32 of file loopwavequeue.c.

◆ spec

Definition at line 30 of file loopwavequeue.c.

◆ 

struct { ... } wave

Referenced by loop(), and main().