Skip to content

Commit 46a5177

Browse files
committed
Fix sdl_mixer example
1 parent c7a9d3b commit 46a5177

1 file changed

Lines changed: 71 additions & 35 deletions

File tree

  • _includes/samples/sdl_mixer

_includes/samples/sdl_mixer/main.c

Lines changed: 71 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -18,52 +18,88 @@ int main(int argc, char **argv) {
1818
return 1;
1919
}
2020

21-
// Initialize sdl2_mixer
22-
Mix_OpenAudio(44100,
23-
MIX_DEFAULT_FORMAT,
24-
MIX_DEFAULT_CHANNELS,
25-
2048
26-
);
21+
// Initialize SDL mixer
22+
if(!MIX_Init()) {
23+
SDL_Log("Couldn't initialize SDL mixer: %s", SDL_GetError());
24+
SDL_Quit();
25+
return 2;
26+
}
27+
28+
// Initialise audio device
29+
MIX_Mixer * mixer = MIX_CreateMixerDevice(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, NULL);
30+
if (!mixer) {
31+
SDL_Log("Couldn't open default audio device: %s", SDL_GetError());
32+
MIX_Quit();
33+
SDL_Quit();
34+
return 3;
35+
}
36+
37+
// Initialize channel to play music on, called a track in SDL mixer
38+
MIX_Track * music_track = MIX_CreateTrack(mixer);
39+
if (!music_track) {
40+
SDL_Log("Couldn't create window/renderer: %s", SDL_GetError());
41+
MIX_DestroyMixer(mixer);
42+
MIX_Quit();
43+
SDL_Quit();
44+
return 3;
45+
}
46+
2747

2848
SDL_Window * window = NULL;
2949
SDL_Renderer * renderer = NULL;
3050
if (!SDL_CreateWindowAndRenderer("window", 480, 272, 0, &window, &renderer)) {
3151
SDL_Log("Couldn't create window/renderer: %s", SDL_GetError());
52+
MIX_DestroyMixer(mixer);
53+
MIX_Quit();
3254
SDL_Quit();
33-
return 2;
55+
return 4;
3456
}
3557

3658
// Load ogg file
37-
Mix_Music *ogg_file = NULL;
38-
ogg_file = Mix_LoadMUS(MUSIC_PATH);
59+
MIX_Audio *ogg_file = MIX_LoadAudio(mixer, "test.ogg", false);
3960
if (!ogg_file) {
40-
return 0;
61+
SDL_Log("Couldn't load audio file: %s", SDL_GetError());
62+
SDL_DestroyRenderer(renderer);
63+
SDL_DestroyWindow(window);
64+
MIX_DestroyMixer(mixer);
65+
MIX_Quit();
66+
SDL_Quit();
67+
return 5;
4168
}
4269

43-
SDL_Rect rect;
70+
SDL_FRect rect;
4471

4572
// Square dimensions: Half of the min(SCREEN_WIDTH, SCREEN_HEIGHT)
46-
rect.w = SDL_min(SCREEN_WIDTH, SCREEN_HEIGHT) / 2;
47-
rect.h = SDL_min(SCREEN_WIDTH, SCREEN_HEIGHT) / 2;
73+
rect.w = SDL_min(SCREEN_WIDTH, SCREEN_HEIGHT) / 2.0f;
74+
rect.h = SDL_min(SCREEN_WIDTH, SCREEN_HEIGHT) / 2.0f;
4875

4976
// Square position: In the middle of the screen
5077
rect.x = SCREEN_WIDTH / 2 - rect.w / 2;
5178
rect.y = SCREEN_HEIGHT / 2 - rect.h / 2;
5279

5380

5481
// Declare rects of pause symbol
55-
SDL_Rect pause_rect1, pause_rect2;
82+
SDL_FRect pause_rect1, pause_rect2;
5683

57-
pause_rect1.h = rect.h / 2;
58-
pause_rect1.w = 40;
59-
pause_rect1.x = rect.x + (rect.w - pause_rect1.w * 3) / 2;
60-
pause_rect1.y = rect.y + rect.h / 4;
84+
pause_rect1.h = rect.h / 2.0f;
85+
pause_rect1.w = 40.0f;
86+
pause_rect1.x = rect.x + (rect.w - pause_rect1.w * 3.0f) / 2.0f;
87+
pause_rect1.y = rect.y + rect.h / 4.0f;
6188
pause_rect2 = pause_rect1;
62-
pause_rect2.x += pause_rect1.w * 2;
89+
pause_rect2.x += pause_rect1.w * 2.0f;
6390

6491
// play the music 8 times
65-
if (Mix_PlayMusic(ogg_file, 8) == -1) {
66-
return 0;
92+
MIX_SetTrackAudio(music_track, ogg_file);
93+
MIX_SetTrackGain(music_track, 1.0f);
94+
if (!MIX_PlayTrack(music_track, 8)) {
95+
SDL_Log("Couldn't play audio: %s", SDL_GetError());
96+
MIX_DestroyAudio(ogg_file);
97+
SDL_DestroyRenderer(renderer);
98+
SDL_DestroyWindow(window);
99+
MIX_DestroyMixer(mixer);
100+
MIX_Quit();
101+
SDL_Quit();
102+
return 6;
67103
}
68104

69105
int running = 1;
@@ -73,23 +109,22 @@ int main(int argc, char **argv) {
73109
switch(e.type) {
74110
case SDL_EVENT_QUIT:
75111
running = 0;
76-
break;
112+
break;
77113
case SDL_EVENT_GAMEPAD_ADDED:
78114
SDL_OpenGamepad(e.cdevice.which);
79-
break;
115+
break;
80116
case SDL_EVENT_GAMEPAD_BUTTON_DOWN:
81117
// pause using cross button
82-
if (e.cbutton.button == SDL_GAMEPAD_BUTTON_SOUTH) {
83-
Mix_PauseMusic();
118+
if (e.gbutton.button == SDL_GAMEPAD_BUTTON_SOUTH) {
119+
MIX_PauseTrack(music_track);
84120
// resume using circle button
85-
} else if (e.cbutton.button == SDL_GAMEPAD_BUTTON_EAST) {
86-
Mix_ResumeMusic();
87-
}
121+
} else if (e.gbutton.button == SDL_GAMEPAD_BUTTON_EAST) {
122+
MIX_ResumeTrack(music_track);
88123
// press start button to exit
89-
if (e.cbutton.button == SDL_GAMEPAD_BUTTON_START) {
124+
} else if (e.gbutton.button == SDL_GAMEPAD_BUTTON_START) {
90125
running = 0;
91126
}
92-
break;
127+
break;
93128
}
94129
}
95130

@@ -106,23 +141,24 @@ int main(int argc, char **argv) {
106141
SDL_RenderFillRect(renderer, &rect);
107142

108143
// Check pause status
109-
if(Mix_PausedMusic()) {
144+
if(!MIX_TrackPlaying(music_track)) {
110145
// Set renderer color black to draw the pause symbol
111146
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
112147

113148
// Draw pause symbol
114149
SDL_RenderFillRect(renderer, &pause_rect1);
115-
SDL_RenderFillRect(renderer, &pause_rect2);
150+
SDL_RenderFillRect(renderer, &pause_rect2);
116151
}
117152

118153
// Update screen
119154
SDL_RenderPresent(renderer);
120155
}
121156

122-
Mix_FreeMusic(ogg_file);
157+
MIX_DestroyAudio(ogg_file);
123158
SDL_DestroyRenderer(renderer);
124-
SDL_DestroyWindow(win);
125-
Mix_CloseAudio();
159+
SDL_DestroyWindow(window);
160+
MIX_DestroyMixer(mixer);
161+
MIX_Quit();
126162
SDL_Quit();
127163

128164
return 0;

0 commit comments

Comments
 (0)