static void ogg_add_callback(int voice) { if (!ogg_thread_running) { ASND_StopVoice(0); return; } if (private_ogg.flag & 128) return; // Ogg is paused if (private_ogg.pcm_indx >= READ_SAMPLES) { if (ASND_AddVoice(0, (void *) private_ogg.pcmout[private_ogg.pcmout_pos], private_ogg.pcm_indx << 1) == 0) { private_ogg.pcmout_pos ^= 1; private_ogg.pcm_indx = 0; private_ogg.flag = 0; LWP_ThreadSignal(oggplayer_queue); } } else { if (private_ogg.flag & 64) { private_ogg.flag &= ~64; LWP_ThreadSignal(oggplayer_queue); } } }
extern "C" void SoundCallback(s32 voice) { SoundDecoder * decoder = SoundHandler::Instance()->Decoder(voice); if(!decoder) return; if(decoder->IsBufferReady()) { if(ASND_AddVoice(voice, decoder->GetBuffer(), decoder->GetBufferSize()) == SND_OK) { decoder->LoadNext(); SoundHandler::Instance()->ThreadSignal(); } } else if(decoder->IsEOF()) { ASND_StopVoice(voice); //if(voice == 0) //MusicPlayer::Instance()->SetPlaybackFinished(true); //see if next music must be played } else { SoundHandler::Instance()->ThreadSignal(); } }
void GuiSound::Pause() { if(voice < 0 || voice >= 16) return; ASND_StopVoice(voice); }
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(); }
void GuiSound::Stop() { if(voice < 0) return; switch(type) { case SOUND_PCM: ASND_StopVoice(voice); break; case SOUND_OGG: StopOgg(); break; } }
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 }