Mercurial > sdl-ios-xcode
annotate test/loopwave.c @ 1660:8b9d79e7eacf SDL-1.3
Added API requested in bug #43:
Added SDL_GetNumVideoDrivers() and SDL_GetVideoDriver().
Replaced SDL_VideoDriverName() with SDL_GetCurrentVideoDriver()
Added SDL_GetNumAudioDrivers() and SDL_GetAudioDriver().
Replaced SDL_AudioDriverName() with SDL_GetCurrentAudioDriver()
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 20 May 2006 04:35:58 +0000 |
parents | 14717b52abc0 |
children | 782fd950bd46 |
rev | line source |
---|---|
0 | 1 |
2 /* Program to load a wave file and loop playing it using SDL sound */ | |
3 | |
4 /* loopwaves.c is much more robust in handling WAVE files -- | |
5 This is only for simple WAVEs | |
6 */ | |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
7 #include "SDL_config.h" |
0 | 8 |
9 #include <stdio.h> | |
10 #include <stdlib.h> | |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
11 |
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
12 #if HAVE_SIGNAL_H |
0 | 13 #include <signal.h> |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
14 #endif |
0 | 15 |
16 #include "SDL.h" | |
17 #include "SDL_audio.h" | |
18 | |
19 struct { | |
20 SDL_AudioSpec spec; | |
21 Uint8 *sound; /* Pointer to wave data */ | |
22 Uint32 soundlen; /* Length of wave data */ | |
23 int soundpos; /* Current play position */ | |
24 } wave; | |
25 | |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
26 |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
27 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
28 static void quit(int rc) |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
29 { |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
30 SDL_Quit(); |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
31 exit(rc); |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
32 } |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
33 |
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
34 |
1659 | 35 void SDLCALL fillerup(void *unused, Uint8 *stream, int len) |
0 | 36 { |
37 Uint8 *waveptr; | |
38 int waveleft; | |
39 | |
40 /* Set up the pointers */ | |
41 waveptr = wave.sound + wave.soundpos; | |
42 waveleft = wave.soundlen - wave.soundpos; | |
43 | |
44 /* Go! */ | |
45 while ( waveleft <= len ) { | |
46 SDL_MixAudio(stream, waveptr, waveleft, SDL_MIX_MAXVOLUME); | |
47 stream += waveleft; | |
48 len -= waveleft; | |
49 waveptr = wave.sound; | |
50 waveleft = wave.soundlen; | |
51 wave.soundpos = 0; | |
52 } | |
53 SDL_MixAudio(stream, waveptr, len, SDL_MIX_MAXVOLUME); | |
54 wave.soundpos += len; | |
55 } | |
56 | |
57 static int done = 0; | |
58 void poked(int sig) | |
59 { | |
60 done = 1; | |
61 } | |
62 | |
63 int main(int argc, char *argv[]) | |
64 { | |
1660
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
65 int i, n; |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
66 |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
67 /* Print available audio drivers */ |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
68 n = SDL_GetNumAudioDrivers(); |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
69 if ( n == 0 ) { |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
70 printf("No built-in audio drivers\n"); |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
71 } else { |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
72 printf("Built-in audio drivers:"); |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
73 for ( i = 0; i < n; ++i ) { |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
74 if ( i > 0 ) { |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
75 printf(","); |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
76 } |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
77 printf(" %s", SDL_GetAudioDriver(i)); |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
78 } |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
79 printf("\n"); |
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
80 } |
0 | 81 |
82 /* Load the SDL library */ | |
83 if ( SDL_Init(SDL_INIT_AUDIO) < 0 ) { | |
84 fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); | |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
85 return(1); |
0 | 86 } |
87 if ( argv[1] == NULL ) { | |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
88 argv[1] = "sample.wav"; |
0 | 89 } |
90 /* Load the wave file into memory */ | |
91 if ( SDL_LoadWAV(argv[1], | |
92 &wave.spec, &wave.sound, &wave.soundlen) == NULL ) { | |
93 fprintf(stderr, "Couldn't load %s: %s\n", | |
94 argv[1], SDL_GetError()); | |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
95 quit(1); |
0 | 96 } |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
97 |
0 | 98 wave.spec.callback = fillerup; |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
99 #if HAVE_SIGNAL_H |
0 | 100 /* Set the signals */ |
101 #ifdef SIGHUP | |
102 signal(SIGHUP, poked); | |
103 #endif | |
104 signal(SIGINT, poked); | |
105 #ifdef SIGQUIT | |
106 signal(SIGQUIT, poked); | |
107 #endif | |
108 signal(SIGTERM, poked); | |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
109 #endif /* HAVE_SIGNAL_H */ |
0 | 110 |
111 /* Initialize fillerup() variables */ | |
112 if ( SDL_OpenAudio(&wave.spec, NULL) < 0 ) { | |
113 fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError()); | |
114 SDL_FreeWAV(wave.sound); | |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
115 quit(2); |
0 | 116 } |
117 SDL_PauseAudio(0); | |
118 | |
119 /* Let the audio run */ | |
1660
8b9d79e7eacf
Added API requested in bug #43:
Sam Lantinga <slouken@libsdl.org>
parents:
1659
diff
changeset
|
120 printf("Using audio driver: %s\n", SDL_GetCurrentAudioDriver()); |
0 | 121 while ( ! done && (SDL_GetAudioStatus() == SDL_AUDIO_PLAYING) ) |
122 SDL_Delay(1000); | |
123 | |
124 /* Clean up on signal */ | |
125 SDL_CloseAudio(); | |
126 SDL_FreeWAV(wave.sound); | |
1151
be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
Ryan C. Gordon <icculus@icculus.org>
parents:
0
diff
changeset
|
127 SDL_Quit(); |
0 | 128 return(0); |
129 } |