mirror of
https://github.com/dborth/fceugx.git
synced 2024-12-25 16:11:54 +01:00
136 lines
2.0 KiB
C++
136 lines
2.0 KiB
C++
/****************************************************************************
|
|
* FCE Ultra 0.98.12
|
|
* Nintendo Wii/Gamecube Port
|
|
*
|
|
* Tantric February 2009
|
|
*
|
|
* gui_sound.cpp
|
|
*
|
|
* GUI class definitions
|
|
***************************************************************************/
|
|
|
|
#include "gui.h"
|
|
|
|
/**
|
|
* Constructor for the GuiSound class.
|
|
*/
|
|
GuiSound::GuiSound(const u8 * snd, s32 len, int t)
|
|
{
|
|
sound = snd;
|
|
length = len;
|
|
type = t;
|
|
voice = -1;
|
|
volume = 100;
|
|
}
|
|
|
|
/**
|
|
* Destructor for the GuiSound class.
|
|
*/
|
|
GuiSound::~GuiSound()
|
|
{
|
|
}
|
|
|
|
void GuiSound::Play()
|
|
{
|
|
#ifndef NO_SOUND
|
|
int vol;
|
|
|
|
switch(type)
|
|
{
|
|
case SOUND_PCM:
|
|
vol = 255*(volume/100.0)*(GCSettings.SFXVolume/100.0);
|
|
voice = ASND_GetFirstUnusedVoice();
|
|
if(voice >= 0)
|
|
ASND_SetVoice(voice, VOICE_MONO_8BIT, 8000, 0,
|
|
(u8 *)sound, length, vol, vol, NULL);
|
|
break;
|
|
|
|
case SOUND_OGG:
|
|
voice = 0;
|
|
PlayOgg(mem_open((char *)sound, length), 0, OGG_INFINITE_TIME);
|
|
SetVolumeOgg(255*(volume/100.0));
|
|
break;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void GuiSound::Stop()
|
|
{
|
|
#ifndef NO_SOUND
|
|
if(voice < 0)
|
|
return;
|
|
|
|
switch(type)
|
|
{
|
|
case SOUND_PCM:
|
|
ASND_StopVoice(voice);
|
|
break;
|
|
|
|
case SOUND_OGG:
|
|
StopOgg();
|
|
break;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void GuiSound::Pause()
|
|
{
|
|
#ifndef NO_SOUND
|
|
if(voice < 0)
|
|
return;
|
|
|
|
switch(type)
|
|
{
|
|
case SOUND_PCM:
|
|
ASND_PauseVoice(voice, 1);
|
|
break;
|
|
|
|
case SOUND_OGG:
|
|
PauseOgg(1);
|
|
break;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void GuiSound::Resume()
|
|
{
|
|
#ifndef NO_SOUND
|
|
if(voice < 0)
|
|
return;
|
|
|
|
switch(type)
|
|
{
|
|
case SOUND_PCM:
|
|
ASND_PauseVoice(voice, 0);
|
|
break;
|
|
|
|
case SOUND_OGG:
|
|
PauseOgg(0);
|
|
break;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void GuiSound::SetVolume(int vol)
|
|
{
|
|
#ifndef NO_SOUND
|
|
volume = vol;
|
|
|
|
if(voice < 0)
|
|
return;
|
|
|
|
int newvol = 255*(volume/100.0)*(GCSettings.SFXVolume/100.0);
|
|
|
|
switch(type)
|
|
{
|
|
case SOUND_PCM:
|
|
ASND_ChangeVolumeVoice(voice, newvol, newvol);
|
|
break;
|
|
|
|
case SOUND_OGG:
|
|
SetVolumeOgg(255*(volume/100.0));
|
|
break;
|
|
}
|
|
#endif
|
|
}
|