Mercurial > sdl-ios-xcode
annotate test/loopwave.c @ 1775:5572e4204f36
Date: Sun, 7 May 2006 19:22:33 -0400
From: Mike Frysinger
Subject: [SDL] [patch] fix building with DirectFB-0.9.25.1
another DirectFB release, another small bit of API breakage :)
this time around, DIKI_ALTGR has been removed and DIKI_ALT_R is supposed to be
used ... DIKI_ALT_R is not a new define, so there shouldnt be any need for
checking the DirectFB version ... it should work with older DirectFB's as
well
thanks to Sascha Schwarz for pointing this out on the Gentoo bugzilla:
http://bugs.gentoo.org/132571
-mike
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 08 May 2006 02:09:34 +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 } |