void AudioController::PlayRange(const TimeRange &range) { if (!IsAudioOpen()) return; player->Play(SamplesFromMilliseconds(range.begin()), SamplesFromMilliseconds(range.length())); playback_mode = PM_Range; playback_timer.Start(20); AnnouncePlaybackPosition(range.begin()); }
void AudioController::PlayToEnd(int64_t start_sample) { if (!IsAudioOpen()) return; player->Play(start_sample, provider->GetNumSamples()-start_sample); playback_mode = PM_ToEnd; playback_timer.Start(20); AnnouncePlaybackPosition(start_sample); }
void AudioController::OnPlaybackTimer(wxTimerEvent &) { int64_t pos = player->GetCurrentPosition(); if (!player->IsPlaying() || (playback_mode != PM_ToEnd && pos >= player->GetEndPosition()+200)) { // The +200 is to allow the player to end the sound output cleanly, // otherwise a popping artifact can sometimes be heard. Stop(); } else { AnnouncePlaybackPosition(MillisecondsFromSamples(pos)); } }