/*******************************************************************************
This file is Part of the ZEngine Library for SDL Game Development.
Copyright (C) 2002 ConceptOfZero.net
Licensed under the BSD License, see licensing.txt.
The maintainer of this library is James Turk (james@conceptofzero.net)
and the home of this Library is http://www.conceptofzero.net/
*******************************************************************************/
/*!
\par File Header:
File: ZE_ZMusic.cpp
Description: Implementation source file for core ZEngine Music Object.
Author(s): James Turk
$Id: ZE_ZMusic.cpp,v 1.1 2002/11/21 05:41:13 cozman Exp $
\file ZE_ZMusic.cpp
\brief Source file for ZMusic.
Implementation of ZMusic, the basic Music class for ZEngine.
**/
#include "ZE_ZMusic.h"
#ifdef USE_SDL_MIXER
namespace ZE
{
const int ZMusic::LoopInfinite = -1;
ZMusic::ZMusic()
{
}
ZMusic::ZMusic(string filename)
{
Open(filename);
}
ZMusic::~ZMusic()
{
Release();
}
void ZMusic::Open(string filename)
{
Release();
rMusic = rEngine->LoadMusic(filename);
}
void ZMusic::Release()
{
Mix_HaltMusic();
rEngine->FreeMusic(rMusic);
}
void ZMusic::Play(int loopNum, int fadeTime)
{
if(Mix_PlayingMusic()) //stop currently playing music
Mix_HaltMusic();
if(rMusic.music)
{
if(fadeTime)
Mix_FadeInMusic(rMusic.music, loopNum, fadeTime);
else
Mix_PlayMusic(rMusic.music, loopNum);
}
else
LogError(FormatStr("ZMusic not initialized in ZMusic::Play(%d,%d), filename: %s.",loopNum,fadeTime,rMusic.filename.c_str()));
}
void ZMusic::Pause()
{
if(rMusic.music)
Mix_PauseMusic();
else
LogError(FormatStr("ZMusic not initialized in ZMusic::Pause(), filename: %s.",rMusic.filename.c_str()));
}
void ZMusic::Unpause()
{
if(rMusic.music)
Mix_ResumeMusic();
else
LogError(FormatStr("ZMusic not initialized in ZMusic::Unpause(), filename: %s.",rMusic.filename.c_str()));
}
void ZMusic::Rewind()
{
if(rMusic.music)
Mix_RewindMusic();
else
LogError(FormatStr("ZMusic not initialized in ZMusic::Rewind(), filename: %s.",rMusic.filename.c_str()));
}
void ZMusic::Stop(int fadeTime)
{
if(rMusic.music)
{
if(fadeTime)
Mix_FadeOutMusic(fadeTime);
else
Mix_HaltMusic();
}
else
LogError(FormatStr("ZMusic not initialized in ZMusic::Stop(%d), filename: %s.",fadeTime,rMusic.filename.c_str()));
}
void ZMusic::SetVolume(int volume)
{
if(rMusic.music)
Mix_VolumeMusic(volume);
else
LogError(FormatStr("ZMusic not initialized in ZMusic::SetVolume(%d), filename: %s.",volume,rMusic.filename.c_str()));
}
bool ZMusic::IsLoaded()
{
return rMusic.music != NULL;
}
bool ZMusic::IsPlaying()
{
if(rMusic.music)
return Mix_PlayingMusic() > 0;
else
{
LogError(FormatStr("ZMusic not initialized in ZMusic::IsPlaying(), filename: %s.",rMusic.filename.c_str()));
return false;
}
}
bool ZMusic::IsPaused()
{
if(rMusic.music)
return Mix_PausedMusic() > 0;
else
{
LogError(FormatStr("ZMusic not initialized in ZMusic::IsPaused(), filename: %s.",rMusic.filename.c_str()));
return false;
}
}
int ZMusic::GetVolume()
{
if(rMusic.music)
return Mix_VolumeMusic(-1);
else
{
LogError(FormatStr("ZMusic not initialized in ZMusic::GetVolume(), filename: %s.",rMusic.filename.c_str()));
return false;
}
}
}
#endif