Files
2018-07-31 10:50:06 -04:00

154 lines
3.5 KiB
C++

#include "cSound.hpp"
/*** Custom Header Files ***/
#include "../UtilityEngine/cUtility.hpp"
using AudioEngine::cSound;
using UtilityEngine::cUtility;
cSound::cSound( const cString& dir /*= ""*/, const cString& filename /*= ""*/, const unsigned char volume /*= 255*/,
const unsigned char distance /*= 100*/, const short int angle /*= 0*/, const long int channel /*= -1*/,
const long int loops /*= -1*/ )
: mp_sound(nullptr), m_dir(dir), m_fileName(filename), m_volume(volume), m_distance(distance),
m_angle(angle), m_channel(channel), m_loops(loops)
{
if (m_fileName != "")
LoadSound();
}
cSound::cSound( const cSound& copy )
: mp_sound(nullptr), m_dir(copy.getDir()), m_fileName(copy.getFileName()), m_volume(copy.getVolume()),
m_distance(copy.getDistance()), m_angle(copy.getAngle()), m_channel(copy.getChannel()),
m_loops(copy.getLoops())
{
if (m_fileName != "")
LoadSound();
}
cSound::~cSound()
{
UnloadSound();
}
void cSound::PlaySound()
{
if (mp_sound != nullptr) {
if (Mix_Volume(m_channel, m_volume) < 0)
cUtility::Inst().Message("Unable to set volume. Mix_Volume():", __AT__, cUtility::eTypeSDL::MIXER);
if (Mix_SetPosition(m_channel, m_angle, m_distance) < 0)
cUtility::Inst().Message("Unable to set position. Mix_SetPosition():", __AT__, cUtility::eTypeSDL::MIXER);
if (Mix_PlayChannel(m_channel, mp_sound, m_loops) < 0)
cUtility::Inst().Message("Unable to set channel. Mix_PlayChannel():", __AT__, cUtility::eTypeSDL::MIXER);
}
}
void cSound::FadeIn( const unsigned int time /*= 1000*/ ) const
{
if (Mix_FadeInChannel(m_channel, mp_sound, m_loops, time) < 0)
cUtility::Inst().Message("Unable to fade in channel. Mix_FadeInChannel():", __AT__, cUtility::eTypeSDL::MIXER);
}
void cSound::FadeOut( const unsigned int time /*= 1000*/ ) const
{
if (Mix_FadeOutChannel(m_channel, time) < 0)
cUtility::Inst().Message("Unable to fade out channel. Mix_FadeOutChannel():", __AT__, cUtility::eTypeSDL::MIXER);
}
///Sets
void cSound::setDir( const cString& dir )
{
m_dir = dir;
}
void cSound::setFileName( const cString& filename )
{
m_fileName = filename;
LoadSound();
}
void cSound::setFileNameandDir( const cString& filename, const cString& dir /*= ""*/ )
{
setDir(dir);
setFileName(filename);
}
void cSound::setVolume( const unsigned char volume /*= 255*/ )
{
m_volume = volume;
}
void cSound::setDistance( const unsigned char distance /*= 100*/ )
{
m_distance = distance;
}
void cSound::setAngle( const short int angle /*= 0*/ )
{
m_angle = angle;
}
void cSound::setChannel( const long int channel /*= -1*/ )
{
m_channel = channel;
}
void cSound::setLoops( const long int loops /*= -1*/ )
{
m_loops = loops;
}
///Gets
const cString& cSound::getDir() const
{
return m_dir;
}
const cString& cSound::getFileName() const
{
return m_fileName;
}
const unsigned char cSound::getVolume() const
{
return m_volume;
}
const unsigned char cSound::getDistance() const
{
return m_distance;
}
const short int cSound::getAngle() const
{
return m_angle;
}
const long int cSound::getChannel() const
{
return m_channel;
}
const long int cSound::getLoops() const
{
return m_loops;
}
///Private
///Functions
void cSound::LoadSound()
{
UnloadSound();
if (m_fileName != "")
if (mp_sound == nullptr)
if ((mp_sound = Mix_LoadWAV(((cString)(m_dir + m_fileName)).c_str())) == nullptr)
cUtility::Inst().Message("Unable to load file. " + m_dir + m_fileName, "", cUtility::eTypeSDL::MIXER);
}
void cSound::UnloadSound()
{
if (mp_sound != nullptr)
{
Mix_FreeChunk(mp_sound);
mp_sound = nullptr;
}
}