Mercurial > sdl-ios-xcode
annotate Xcode-iPhoneOS/Demos/src/mixer.c @ 4833:34fb492cefe3
Shaped windows for Cocoa build and testshape runs, but the actual shaping doesn't work. Something, however, is definitely happening, because we get the backgrounds drawn in two different colors.
author | egottlieb |
---|---|
date | Thu, 05 Aug 2010 01:03:24 -0400 |
parents | 64ce267332c6 |
children | 06c7423f8c60 |
rev | line source |
---|---|
3277
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 * mixer.c |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
3 * written by Holmes Futrell |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 * use however you want |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 #import "SDL.h" |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 #import "common.h" |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 #define NUM_CHANNELS 8 /* max number of sounds we can play at once */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 #define NUM_DRUMS 4 /* number of drums in our set */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 #define MILLESECONDS_PER_FRAME 16 /* about 60 frames per second */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 static struct |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 SDL_Rect rect; /* where the button is drawn */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 SDL_Color upColor; /* color when button is not active */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 SDL_Color downColor; /* color when button is active */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 int isPressed; /* is the button being pressed ? */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 int touchIndex; /* what mouse (touch) index pressed the button ? */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 } buttons[NUM_DRUMS]; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 struct sound |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 Uint8 *buffer; /* audio buffer for sound file */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 Uint32 length; /* length of the buffer (in bytes) */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 }; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 /* this array holds the audio for the drum noises */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 static struct sound drums[NUM_DRUMS]; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 /* function declarations */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 void handleMouseButtonDown(SDL_Event * event); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 void handleMouseButtonUp(SDL_Event * event); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 int playSound(struct sound *); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 void render(void); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 void initializeButtons(); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 void audioCallback(void *userdata, Uint8 * stream, int len); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 void loadSound(const char *file, struct sound *s); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 struct |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 /* channel array holds information about currently playing sounds */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 struct |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 Uint8 *position; /* what is the current position in the buffer of this sound ? */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 Uint32 remaining; /* how many bytes remaining before we're done playing the sound ? */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 Uint32 timestamp; /* when did this sound start playing ? */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 } channels[NUM_CHANNELS]; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 SDL_AudioSpec outputSpec; /* what audio format are we using for output? */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 int numSoundsPlaying; /* how many sounds are currently playing */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 } mixer; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 /* sets up the buttons (color, position, state) */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 void |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 initializeButtons() |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 int i; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
60 int spacing = 10; /* gap between drum buttons */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 SDL_Rect buttonRect; /* keeps track of where to position drum */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
62 SDL_Color upColor = { 86, 86, 140, 255 }; /* color of drum when not pressed */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
63 SDL_Color downColor = { 191, 191, 221, 255 }; /* color of drum when pressed */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
64 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
65 buttonRect.x = spacing; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
66 buttonRect.y = spacing; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
67 buttonRect.w = SCREEN_WIDTH - 2 * spacing; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
68 buttonRect.h = (SCREEN_HEIGHT - (NUM_DRUMS + 1) * spacing) / NUM_DRUMS; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
69 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
70 /* setup each button */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 for (i = 0; i < NUM_DRUMS; i++) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 buttons[i].rect = buttonRect; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
74 buttons[i].isPressed = 0; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
75 buttons[i].upColor = upColor; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
76 buttons[i].downColor = downColor; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
77 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
78 buttonRect.y += spacing + buttonRect.h; /* setup y coordinate for next drum */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
79 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
80 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
81 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
82 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
83 /* |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
84 loads a wav file (stored in 'file'), converts it to the mixer's output format, |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
85 and stores the resulting buffer and length in the sound structure |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
87 void |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
88 loadSound(const char *file, struct sound *s) |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
89 { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 SDL_AudioSpec spec; /* the audio format of the .wav file */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 SDL_AudioCVT cvt; /* used to convert .wav to output format when formats differ */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
92 int result; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
93 if (SDL_LoadWAV(file, &spec, &s->buffer, &s->length) == NULL) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
94 fatalError("could not load .wav"); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
95 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
96 /* build the audio converter */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
97 result = SDL_BuildAudioCVT(&cvt, spec.format, spec.channels, spec.freq, |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
98 mixer.outputSpec.format, |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
99 mixer.outputSpec.channels, |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
100 mixer.outputSpec.freq); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
101 if (result == -1) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
102 fatalError("could not build audio CVT"); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
103 } else if (result != 0) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
104 /* |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
105 this happens when the .wav format differs from the output format. |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
106 we convert the .wav buffer here |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
107 */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
108 cvt.buf = (Uint8 *) SDL_malloc(s->length * cvt.len_mult); /* allocate conversion buffer */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
109 cvt.len = s->length; /* set conversion buffer length */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
110 SDL_memcpy(cvt.buf, s->buffer, s->length); /* copy sound to conversion buffer */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
111 if (SDL_ConvertAudio(&cvt) == -1) { /* convert the sound */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
112 fatalError("could not convert .wav"); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
113 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
114 SDL_free(s->buffer); /* free the original (unconverted) buffer */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
115 s->buffer = cvt.buf; /* point sound buffer to converted buffer */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
116 s->length = cvt.len_cvt; /* set sound buffer's new length */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
117 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
118 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
119 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
120 /* called from main event loop */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
121 void |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
122 handleMouseButtonDown(SDL_Event * event) |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
123 { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
124 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
125 int x, y, mouseIndex, i, drumIndex; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
126 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
127 mouseIndex = event->button.which; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
128 drumIndex = -1; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
129 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
130 SDL_SelectMouse(mouseIndex); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
131 SDL_GetMouseState(&x, &y); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
132 /* check if we hit any of the drum buttons */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
133 for (i = 0; i < NUM_DRUMS; i++) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
134 if (x >= buttons[i].rect.x |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
135 && x < buttons[i].rect.x + buttons[i].rect.w |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
136 && y >= buttons[i].rect.y |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
137 && y < buttons[i].rect.y + buttons[i].rect.h) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
138 drumIndex = i; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
139 break; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
140 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
141 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
142 if (drumIndex != -1) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
143 /* if we hit a button */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
144 buttons[drumIndex].touchIndex = mouseIndex; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
145 buttons[drumIndex].isPressed = 1; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
146 playSound(&drums[drumIndex]); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
147 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
148 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
149 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
150 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
151 /* called from main event loop */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
152 void |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
153 handleMouseButtonUp(SDL_Event * event) |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
154 { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
155 int i; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
156 int mouseIndex = event->button.which; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
157 /* check if this should cause any of the buttons to become unpressed */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
158 for (i = 0; i < NUM_DRUMS; i++) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
159 if (buttons[i].touchIndex == mouseIndex) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
160 buttons[i].isPressed = 0; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
161 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
162 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
163 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
164 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 /* draws buttons to screen */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
166 void |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
167 render(void) |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
168 { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
169 int i; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
170 SDL_SetRenderDrawColor(50, 50, 50, 255); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
171 SDL_RenderFill(NULL); /* draw background (gray) */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
172 /* draw the drum buttons */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
173 for (i = 0; i < NUM_DRUMS; i++) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
174 SDL_Color color = |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
175 buttons[i].isPressed ? buttons[i].downColor : buttons[i].upColor; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
176 SDL_SetRenderDrawColor(color.r, color.g, color.b, color.unused); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
177 SDL_RenderFill(&buttons[i].rect); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
178 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
179 /* update the screen */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
180 SDL_RenderPresent(); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
181 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
182 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
183 /* |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
184 finds a sound channel in the mixer for a sound |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
185 and sets it up to start playing |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
186 */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
187 int |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
188 playSound(struct sound *s) |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
189 { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
190 /* |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
191 find an empty channel to play on. |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
192 if no channel is available, use oldest channel |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
193 */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
194 int i; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
195 int selected_channel = -1; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
196 int oldest_channel = 0; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
197 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
198 if (mixer.numSoundsPlaying == 0) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
199 /* we're playing a sound now, so start audio callback back up */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
200 SDL_PauseAudio(0); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
201 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
202 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
203 /* find a sound channel to play the sound on */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
204 for (i = 0; i < NUM_CHANNELS; i++) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
205 if (mixer.channels[i].position == NULL) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
206 /* if no sound on this channel, select it */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
207 selected_channel = i; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
208 break; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
209 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
210 /* if this channel's sound is older than the oldest so far, set it to oldest */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
211 if (mixer.channels[i].timestamp < |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
212 mixer.channels[oldest_channel].timestamp) |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
213 oldest_channel = i; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
214 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
215 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
216 /* no empty channels, take the oldest one */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
217 if (selected_channel == -1) |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
218 selected_channel = oldest_channel; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
219 else |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
220 mixer.numSoundsPlaying++; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
221 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
222 /* point channel data to wav data */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
223 mixer.channels[selected_channel].position = s->buffer; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
224 mixer.channels[selected_channel].remaining = s->length; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
225 mixer.channels[selected_channel].timestamp = SDL_GetTicks(); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
226 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
227 return selected_channel; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
228 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
229 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
230 /* |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
231 Called from SDL's audio system. Supplies sound input with data by mixing together all |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
232 currently playing sound effects. |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
233 */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
234 void |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
235 audioCallback(void *userdata, Uint8 * stream, int len) |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
236 { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
237 int i; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
238 int copy_amt; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
239 SDL_memset(stream, mixer.outputSpec.silence, len); /* initialize buffer to silence */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
240 /* for each channel, mix in whatever is playing on that channel */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
241 for (i = 0; i < NUM_CHANNELS; i++) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
242 if (mixer.channels[i].position == NULL) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
243 /* if no sound is playing on this channel */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
244 continue; /* nothing to do for this channel */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
245 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
246 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
247 /* copy len bytes to the buffer, unless we have fewer than len bytes remaining */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
248 copy_amt = |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
249 mixer.channels[i].remaining < |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
250 len ? mixer.channels[i].remaining : len; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
251 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
252 /* mix this sound effect with the output */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
253 SDL_MixAudioFormat(stream, mixer.channels[i].position, |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
254 mixer.outputSpec.format, copy_amt, 150); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
255 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
256 /* update buffer position in sound effect and the number of bytes left */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
257 mixer.channels[i].position += copy_amt; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
258 mixer.channels[i].remaining -= copy_amt; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
259 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
260 /* did we finish playing the sound effect ? */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
261 if (mixer.channels[i].remaining == 0) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
262 mixer.channels[i].position = NULL; /* indicates no sound playing on channel anymore */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
263 mixer.numSoundsPlaying--; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
264 if (mixer.numSoundsPlaying == 0) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
265 /* if no sounds left playing, pause audio callback */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
266 SDL_PauseAudio(1); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
267 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
268 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
269 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
270 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
271 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
272 int |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
273 main(int argc, char *argv[]) |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
274 { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 int done; /* has user tried to quit ? */ |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3277
diff
changeset
|
277 SDL_Window *window; /* main window */ |
3277
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 SDL_Event event; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 Uint32 startFrame; /* holds when frame started processing */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
280 Uint32 endFrame; /* holds when frame ended processing */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
281 Uint32 delay; /* calculated delay, how long should we wait before next frame? */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
282 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
283 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
284 fatalError("could not initialize SDL"); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
285 } |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3277
diff
changeset
|
286 window = |
3277
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
287 SDL_CreateWindow(NULL, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
288 SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS); |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3277
diff
changeset
|
289 SDL_CreateRenderer(window, 0, 0); |
3277
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
290 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 /* initialize the mixer */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
292 SDL_memset(&mixer, 0, sizeof(mixer)); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 /* setup output format */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
294 mixer.outputSpec.freq = 44100; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
295 mixer.outputSpec.format = AUDIO_S16LSB; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
296 mixer.outputSpec.channels = 2; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
297 mixer.outputSpec.samples = 256; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
298 mixer.outputSpec.callback = audioCallback; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
299 mixer.outputSpec.userdata = NULL; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 /* open audio for output */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 if (SDL_OpenAudio(&mixer.outputSpec, NULL) != 0) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
303 fatalError("Opening audio failed"); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
304 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 /* load our drum noises */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 loadSound("ds_kick_big_amb.wav", &drums[3]); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 loadSound("ds_brush_snare.wav", &drums[2]); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
309 loadSound("ds_loose_skin_mute.wav", &drums[1]); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
310 loadSound("ds_china.wav", &drums[0]); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
311 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
312 /* setup positions, colors, and state of buttons */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
313 initializeButtons(); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
314 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 /* enter main loop */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 done = 0; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 while (!done) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 startFrame = SDL_GetTicks(); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 while (SDL_PollEvent(&event)) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 switch (event.type) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 case SDL_MOUSEBUTTONDOWN: |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
322 handleMouseButtonDown(&event); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
323 break; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
324 case SDL_MOUSEBUTTONUP: |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
325 handleMouseButtonUp(&event); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 break; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
327 case SDL_QUIT: |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
328 done = 1; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
329 break; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
330 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
331 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
332 render(); /* draw buttons */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
333 endFrame = SDL_GetTicks(); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
334 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
335 /* figure out how much time we have left, and then sleep */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
336 delay = MILLESECONDS_PER_FRAME - (endFrame - startFrame); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
337 if (delay < 0) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
338 delay = 0; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
339 } else if (delay > MILLESECONDS_PER_FRAME) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
340 delay = MILLESECONDS_PER_FRAME; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
341 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
342 SDL_Delay(delay); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
343 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
344 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
345 /* cleanup code, let's free up those sound buffers */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
346 int i; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
347 for (i = 0; i < NUM_DRUMS; i++) { |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
348 SDL_free(drums[i].buffer); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
349 } |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
350 /* let SDL do its exit code */ |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
351 SDL_Quit(); |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
352 |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
353 return 0; |
20326ba2bda2
This name inconsistency has been bugging me for a while...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
354 } |