@@ -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