void ControlToolBar::StopPlaying(bool stopStream /* = true*/) { StopScrolling(); AudacityProject *project = GetActiveProject(); if(project) { // Let scrubbing code do some appearance change project->GetScrubber().StopScrubbing(); } if (!CanStopAudioStream()) return; mStop->PushDown(); SetStop(false); if(stopStream) gAudioIO->StopStream(); SetPlay(false); SetRecord(false); #ifdef EXPERIMENTAL_AUTOMATED_INPUT_LEVEL_ADJUSTMENT gAudioIO->AILADisable(); #endif mPause->PopUp(); mPaused=false; //Make sure you tell gAudioIO to unpause gAudioIO->SetPaused(mPaused); ClearCutPreviewTracks(); mBusyProject = NULL; // So that we continue monitoring after playing or recording. // also clean the MeterQueues if( project ) { project->MayStartMonitoring(); Meter *meter = project->GetPlaybackMeter(); if( meter ) { meter->Clear(); } meter = project->GetCaptureMeter(); if( meter ) { meter->Clear(); } } const auto toolbar = project->GetToolManager()->GetToolBar(ScrubbingBarID); toolbar->EnableDisableButtons(); }
void ScrubbingToolBar::EnableDisableButtons() { const auto scrubButton = mButtons[STBScrubID]; scrubButton->SetEnabled(true); const auto seekButton = mButtons[STBSeekID]; seekButton->SetEnabled(true); AudacityProject *p = GetActiveProject(); if (!p) return; auto &scrubber = p->GetScrubber(); const auto canScrub = scrubber.CanScrub(); if (scrubber.Scrubs()) { scrubButton->PushDown(); scrubButton->Enable(); } else { scrubButton->PopUp(); if (canScrub) scrubButton->Enable(); else scrubButton->Disable(); } if (scrubber.Seeks()) { seekButton->PushDown(); seekButton->Enable(); } else { seekButton->PopUp(); if (canScrub) seekButton->Enable(); else seekButton->Disable(); } const auto barButton = mButtons[STBRulerID]; barButton->Enable(); if (p->GetRulerPanel()->ShowingScrubRuler()) barButton->PushDown(); else barButton->PopUp(); RegenerateTooltips(); scrubber.CheckMenuItems(); }
void ScrubbingToolBar::OnButton(wxCommandEvent &event) { AudacityProject *p = GetActiveProject(); if (!p) return; auto &scrubber = p->GetScrubber(); int id = event.GetId(); switch (id) { case STBScrubID: scrubber.OnScrub(event); break; case STBSeekID: scrubber.OnSeek(event); break; case STBBarID: scrubber.OnToggleScrubBar(event); break; default: wxASSERT(false); } EnableDisableButtons(); }
// Come here from button clicks, or commands void TranscriptionToolBar::PlayAtSpeed(bool looped, bool cutPreview) { // Can't do anything without an active project AudacityProject * p = GetActiveProject(); if (!p) { return; } // Fixed speed play is the old method, that uses a time track. // VariSpeed play reuses Scrubbing. bool bFixedSpeedPlay = !gPrefs->ReadBool(wxT("/AudioIO/VariSpeedPlay"), true); // Scrubbing doesn't support note tracks, but the fixed-speed method using time tracks does. if (p->GetTracks()->Any<NoteTrack>()) bFixedSpeedPlay = true; // Scrubbing only supports straight through play. // So if looped or cutPreview, we have to fall back to fixed speed. bFixedSpeedPlay = bFixedSpeedPlay || looped || cutPreview; if (bFixedSpeedPlay) { // Create a TimeTrack if we haven't done so already if (!mTimeTrack) { mTimeTrack = p->GetTrackFactory()->NewTimeTrack(); if (!mTimeTrack) { return; } } // Set the speed range //mTimeTrack->SetRangeUpper((double)mPlaySpeed / 100.0); //mTimeTrack->SetRangeLower((double)mPlaySpeed / 100.0); mTimeTrack->GetEnvelope()->Flatten((double)mPlaySpeed / 100.0); } // Pop up the button SetButton(false, mButtons[TTB_PlaySpeed]); // If IO is busy, abort immediately if (gAudioIO->IsBusy()) { p->GetControlToolBar()->StopPlaying(); } // Get the current play region double playRegionStart, playRegionEnd; p->GetPlayRegion(&playRegionStart, &playRegionEnd); // Start playing if (playRegionStart < 0) return; if (bFixedSpeedPlay) { AudioIOStartStreamOptions options(p->GetDefaultPlayOptions()); options.playLooped = looped; // No need to set cutPreview options. // Due to a rather hacky approach, the appearance is used // to signal use of cutpreview to code below. options.timeTrack = mTimeTrack.get(); ControlToolBar::PlayAppearance appearance = cutPreview ? ControlToolBar::PlayAppearance::CutPreview : looped ? ControlToolBar::PlayAppearance::Looped : ControlToolBar::PlayAppearance::Straight; p->GetControlToolBar()->PlayPlayRegion (SelectedRegion(playRegionStart, playRegionEnd), options, PlayMode::normalPlay, appearance); } else { Scrubber &Scrubber = p->GetScrubber(); Scrubber.StartSpeedPlay(GetPlaySpeed(), playRegionStart, playRegionEnd); } }