/*********************************************************************
*	Music player
*	SOURCE FILE
*	Autor:	Michal Jirouš
*	Datum: 22.7.2008
*	Soubor: game_musicplayer.cpp
*	Popis: Modul inicializuje SDL audio a umoznuje prehravat a ovladat
*			prehravani hudby = jednoho hudebniho souboru.
**********************************************************************/

#include "game_musicplayer.h"
#include "sys_console.h"
#include <SDL/SDL_mixer.h>
#include <SDL/SDL.h>
#include "error_handler.h"


Mix_Music *g_music = NULL;

bool music_player::isPlaying()
{
	return (g_music == NULL);

}


//inicializace audia
bool music_player::init()
{
	CONSOLE_PRINT_LN("Initializing music player module...");
	if(Mix_OpenAudio(MIX_DEFAULT_FREQUENCY,
			MIX_DEFAULT_FORMAT, 2, 1024) == -1)
	{
		PRINT_ERROR( "\tUnable to open audio: " << Mix_GetError() );
		return false;
	}
	else
		CONSOLE_PRINT_LN( "\tMix audio initialized" );
	CONSOLE_PRINT_LN("\tMusic player ready.");
	return true;
}

//nacte hudebni soubor
bool music_player::openMusic( const char* filename )
{
	remove();
	if((g_music = Mix_LoadMUS(filename)) == NULL)
	{
		PRINT_ERROR( "Unable to load music: " << Mix_GetError() );
		return false;
	}
	else
		CONSOLE_PRINT_LN( "File: " << filename << " has been opened for audio playback." );
	return true;
}

//reset a odstraneni hudebnich dat z pameti
void music_player::remove()
{
	if(Mix_PlayingMusic())
	{
		Mix_HaltMusic(); 
	}


	if(g_music)
	{
		Mix_FreeMusic(g_music);
		g_music = NULL;
	}
}

//deinicializace mix audia
void music_player::destroy()
{
	remove();
	Mix_CloseAudio();


}

//ovladani hudby
void music_player::play( int loops )
{
	if( g_music )
		Mix_PlayMusic(g_music, loops); 
}

void music_player::pause()
{
	if( g_music )
		Mix_PauseMusic(); 
}

void music_player::resume()
{
	if( g_music )
		Mix_ResumeMusic(); 
}

void music_player::stop()
{
	if( g_music )
		Mix_HaltMusic(); 
}

void music_player::fadein( int loops, int ms )
{
	if( g_music )
		Mix_FadeInMusic(g_music, loops, ms); 
}

void music_player::fadeout( int ms )
{
	if( g_music )
		Mix_FadeOutMusic( ms ); 
}

void reset()
{
	if( g_music )
		Mix_RewindMusic(); 
}

