Mercurial > sdl-ios-xcode
annotate test/loopwave.c @ 1790:828a17e05192
Date: Mon, 8 May 2006 14:19:30 -0700
From: Bob Ippolito
Subject: SDL trunk (r2346) and Mac OS X
The current state of the trunk doesn't quite compile on Mac OS X,
I've attached a series of patches that gets it to compile and kills a
few warnings.
sdl-trunk-r2346-dlcompat-warnings.diff:
The dlcompat thing is just loaded with incorrect type signatures ..
some of them have changed since 10.2 and others are just flat wrong.
This puts it in sync with the latest headers. People on 10.2 will get
the warnings instead of people with new kits.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 09 May 2006 07:26:58 +0000 |
parents | 290b5baf2fca |
children | 8b9d79e7eacf c121d94672cb e905bb5d9bc3 |
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 |
1769 | 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 { | |
65 char name[32]; | |
66 | |
67 /* Load the SDL library */ | |
68 if ( SDL_Init(SDL_INIT_AUDIO) < 0 ) { | |
69 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
|
70 return(1); |
0 | 71 } |
72 if ( argv[1] == NULL ) { | |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
73 argv[1] = "sample.wav"; |
0 | 74 } |
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()); | |
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
|
80 quit(1); |
0 | 81 } |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
82 |
0 | 83 wave.spec.callback = fillerup; |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
84 #if HAVE_SIGNAL_H |
0 | 85 /* Set the signals */ |
86 #ifdef SIGHUP | |
87 signal(SIGHUP, poked); | |
88 #endif | |
89 signal(SIGINT, poked); | |
90 #ifdef SIGQUIT | |
91 signal(SIGQUIT, poked); | |
92 #endif | |
93 signal(SIGTERM, poked); | |
1463
0394f8ebc42d
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1151
diff
changeset
|
94 #endif /* HAVE_SIGNAL_H */ |
0 | 95 |
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); | |
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
|
100 quit(2); |
0 | 101 } |
102 SDL_PauseAudio(0); | |
103 | |
104 /* Let the audio run */ | |
105 printf("Using audio driver: %s\n", SDL_AudioDriverName(name, 32)); | |
106 while ( ! done && (SDL_GetAudioStatus() == SDL_AUDIO_PLAYING) ) | |
107 SDL_Delay(1000); | |
108 | |
109 /* Clean up on signal */ | |
110 SDL_CloseAudio(); | |
111 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
|
112 SDL_Quit(); |
0 | 113 return(0); |
114 } |