2 /* Program to load a wave file and loop playing it using SDL sound */
4 /* loopwaves.c is much more robust in handling WAVE files --
5 This is only for simple WAVEs
7 #include "SDL_config.h"
17 #include "SDL_audio.h"
21 Uint8
*sound
; /* Pointer to wave data */
22 Uint32 soundlen
; /* Length of wave data */
23 int soundpos
; /* Current play position */
27 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
28 static void quit(int rc
)
35 void SDLCALL
fillerup(void *unused
, Uint8
*stream
, int len
)
40 /* Set up the pointers */
41 waveptr
= wave
.sound
+ wave
.soundpos
;
42 waveleft
= wave
.soundlen
- wave
.soundpos
;
45 while ( waveleft
<= len
) {
46 SDL_memcpy(stream
, waveptr
, waveleft
);
50 waveleft
= wave
.soundlen
;
53 SDL_memcpy(stream
, waveptr
, len
);
63 int main(int argc
, char *argv
[])
67 /* Load the SDL library */
68 if ( SDL_Init(SDL_INIT_AUDIO
) < 0 ) {
69 fprintf(stderr
, "Couldn't initialize SDL: %s\n",SDL_GetError());
72 if ( argv
[1] == NULL
) {
73 argv
[1] = "sample.wav";
75 /* Load the wave file into memory */
76 if ( SDL_LoadWAV(argv
[1],
77 &wave
.spec
, &wave
.sound
, &wave
.soundlen
) == NULL
) {
78 fprintf(stderr
, "Couldn't load %s: %s\n",
79 argv
[1], SDL_GetError());
83 wave
.spec
.callback
= fillerup
;
87 signal(SIGHUP
, poked
);
89 signal(SIGINT
, poked
);
91 signal(SIGQUIT
, poked
);
93 signal(SIGTERM
, poked
);
94 #endif /* HAVE_SIGNAL_H */
96 /* Initialize fillerup() variables */
97 if ( SDL_OpenAudio(&wave
.spec
, NULL
) < 0 ) {
98 fprintf(stderr
, "Couldn't open audio: %s\n", SDL_GetError());
99 SDL_FreeWAV(wave
.sound
);
104 /* Let the audio run */
105 printf("Using audio driver: %s\n", SDL_AudioDriverName(name
, 32));
106 while ( ! done
&& (SDL_GetAudioStatus() == SDL_AUDIO_PLAYING
) )
109 /* Clean up on signal */
111 SDL_FreeWAV(wave
.sound
);