void GuiSound::Play() { if(IsPlaying()) return; if(voice < 0 || voice >= 16) return; SoundDecoder * decoder = SoundHandler::Instance()->Decoder(voice); if(!decoder) return; if(decoder->IsEOF()) { ASND_StopVoice(voice); decoder->ClearBuffer(); decoder->Rewind(); decoder->Decode(); } u8 * curbuffer = decoder->GetBuffer(); int bufsize = decoder->GetBufferSize(); decoder->LoadNext(); SoundHandler::Instance()->ThreadSignal(); ASND_SetVoice(voice, decoder->GetFormat(), decoder->GetSampleRate(), 0, curbuffer, bufsize, volume, volume, SoundCallback); }
void GuiSound::Stop() { if(voice < 0 || voice >= 16) return; ASND_StopVoice(voice); SoundDecoder * decoder = SoundHandler::Instance()->Decoder(voice); if(!decoder) return; decoder->ClearBuffer(); Rewind(); SoundHandler::Instance()->ThreadSignal(); }