mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-12-23 18:31:56 +01:00
154 lines
2.3 KiB
C++
154 lines
2.3 KiB
C++
|
/****************************************************************************
|
||
|
* libwiigui
|
||
|
*
|
||
|
* Tantric 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;
|
||
|
loop = false;
|
||
|
}
|
||
|
|
||
|
GuiSound::GuiSound(const u8 * snd, s32 len, int t, int v)
|
||
|
{
|
||
|
sound = snd;
|
||
|
length = len;
|
||
|
type = t;
|
||
|
voice = -1;
|
||
|
volume = v;
|
||
|
loop = false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Destructor for the GuiSound class.
|
||
|
*/
|
||
|
GuiSound::~GuiSound()
|
||
|
{
|
||
|
if(type == SOUND_OGG)
|
||
|
StopOgg();
|
||
|
}
|
||
|
|
||
|
void GuiSound::Play()
|
||
|
{
|
||
|
int vol;
|
||
|
|
||
|
switch(type)
|
||
|
{
|
||
|
case SOUND_PCM:
|
||
|
vol = 255*(volume/100.0);
|
||
|
voice = ASND_GetFirstUnusedVoice();
|
||
|
if(voice >= 0)
|
||
|
ASND_SetVoice(voice, VOICE_STEREO_16BIT, 48000, 0,
|
||
|
(u8 *)sound, length, vol, vol, NULL);
|
||
|
break;
|
||
|
|
||
|
case SOUND_OGG:
|
||
|
voice = 0;
|
||
|
if(loop)
|
||
|
PlayOgg(mem_open((char *)sound, length), 0, OGG_INFINITE_TIME);
|
||
|
else
|
||
|
PlayOgg(mem_open((char *)sound, length), 0, OGG_ONE_TIME);
|
||
|
SetVolumeOgg(255*(volume/100.0));
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void GuiSound::Stop()
|
||
|
{
|
||
|
if(voice < 0)
|
||
|
return;
|
||
|
|
||
|
switch(type)
|
||
|
{
|
||
|
case SOUND_PCM:
|
||
|
ASND_StopVoice(voice);
|
||
|
break;
|
||
|
|
||
|
case SOUND_OGG:
|
||
|
StopOgg();
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void GuiSound::Pause()
|
||
|
{
|
||
|
if(voice < 0)
|
||
|
return;
|
||
|
|
||
|
switch(type)
|
||
|
{
|
||
|
case SOUND_PCM:
|
||
|
ASND_PauseVoice(voice, 1);
|
||
|
break;
|
||
|
|
||
|
case SOUND_OGG:
|
||
|
PauseOgg(1);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void GuiSound::Resume()
|
||
|
{
|
||
|
if(voice < 0)
|
||
|
return;
|
||
|
|
||
|
switch(type)
|
||
|
{
|
||
|
case SOUND_PCM:
|
||
|
ASND_PauseVoice(voice, 0);
|
||
|
break;
|
||
|
|
||
|
case SOUND_OGG:
|
||
|
PauseOgg(0);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool GuiSound::IsPlaying()
|
||
|
{
|
||
|
if(ASND_StatusVoice(voice) == SND_WORKING || ASND_StatusVoice(voice) == SND_WAITING)
|
||
|
return true;
|
||
|
else
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
void GuiSound::SetVolume(int vol)
|
||
|
{
|
||
|
volume = vol;
|
||
|
|
||
|
if(voice < 0)
|
||
|
return;
|
||
|
|
||
|
int newvol = 255*(volume/100.0);
|
||
|
|
||
|
switch(type)
|
||
|
{
|
||
|
case SOUND_PCM:
|
||
|
ASND_ChangeVolumeVoice(voice, newvol, newvol);
|
||
|
break;
|
||
|
|
||
|
case SOUND_OGG:
|
||
|
SetVolumeOgg(255*(volume/100.0));
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void GuiSound::SetLoop(bool l)
|
||
|
{
|
||
|
loop = l;
|
||
|
}
|