Menambahkan Suara dengan SDL_Mixer

Game tanpa suara mungkin tidak akan menarik bagi orang yang memainkannya. Library utama SDL memang menyediakan function untuk memainkan suara, tapi formatnya cuma wav. 

Lalu, bagaimana jika kita ingin menggunakan format mp3 atau format audio lainnya? Untungnya, SDL menyediakan SDL_Mixer yang bisa kalian gunakan bersama dengan library utama dari SDL. Kalian bisa menggunakan format suara selain wav jika kalian menggunakan SDL_Mixer. Beberapa format suara yang bisa kalian gunakan di versi ini adalah MP3, wav, dan ogg

Seperti library lainnya, jika kalian menggunakan linux, kalian bisa menginstall-nya dari terminal. Jika kalian menggunakan ubuntu, untuk menginstal SDL_Mixer versi 2.0, kalian bisa mengetik "sudo apt-get install libsdl2-mixer-dev". Untuk pengguna windows, kalian bisa mengunduh library tersebut di website resmi SDL_Mixer.

Berikut ini adalah contoh kode program yang menggunakan SDL_Mixer.

#include <SDL2/SDL.h>
#include <SDL2/SDL_mixer.h>
#define playar 640
#define tlayar 480

SDL_Renderer *trender=NULL;
Mix_Music *musik;
Mix_Chunk *efek;

void tutup(){

    Mix_FreeChunk( efek );
    efek = NULL;

    Mix_FreeMusic( musik );
    musik = NULL;

    Mix_Quit();
    SDL_Quit();
}

int memuatmedia(){
    int berhasil = 1;

    //Memuat musik
    musik = Mix_LoadMUS( "musik.mp3" );
    if( musik == NULL ){
        berhasil = 0;
    }
    
    //Memuat efek suara
    efek = Mix_LoadWAV( "efek.wav" );
    if( efek == NULL ){
        berhasil = 0;
    }

    return berhasil;
}

int main(int argc, char* args[]){
    SDL_Window* window = NULL;
    SDL_Event evt;
    int gagal=0;

    if( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0){
        printf( "Error: %s\n", SDL_GetError() );
    }else{
        if( Mix_Init(MIX_INIT_MP3) <0 ){
            return 0;
        }
	
    	if(Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096)<0)return 0;
	    memuatmedia();
    	    Mix_PlayMusic( musik, -1 );
            if(gagal==0){
            window = SDL_CreateWindow( "SDLku", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, playar, tlayar, SDL_WINDOW_SHOWN );
            if( window == NULL ){
                printf( "Error : %s", SDL_GetError() );
            }else{
                trender = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
                if(trender!=NULL){
                    while(evt.type!=SDL_QUIT){
                        while(SDL_PollEvent(&evt)){
		            if( evt.type == SDL_KEYUP ){
                                switch( evt.key.keysym.sym ){
                		case SDLK_0:
                                    if(Mix_PlayingMusic() == 0)Mix_PlayMusic( musik, -1 );
                                    else Mix_HaltMusic();
                                    break;
                                case SDLK_1:
                                    if(Mix_PausedMusic() != 1)Mix_PauseMusic();
                                    else Mix_ResumeMusic();
                                    break;
                                default:
                                    Mix_PlayChannel( -1, efek, 0 );
                                    break;
		                }
		            }
                        }
			
                        SDL_SetRenderDrawColor(trender, 0xFF, 0xFF, 0xFF, 0xFF);
                        SDL_RenderClear(trender);
                        SDL_RenderPresent(trender);
                    }
                }
            }
        }
    }

    SDL_DestroyRenderer( trender );
    SDL_DestroyWindow( window );
    tutup();

    return 0;
}

Program yang dihasilkan dari kode program di atas memerlukan file "efek.wav" dan "musik.mp3". File-file tersebut harus di folder project jika kalian menjalankannya dari Code::block. Jika kalian menjalankan program secara langsung, kalian perlu meletakkan filenya di folder program tersebut.

Sebelum bisa melakukan compile atau build, kalian juga perlu mengubah setting di linker setting dalam menu Project=>Build Options. Berikut ini adalah isi "linker setting" untuk masing-masing OS.