From 36e5b4fbbc3496eafe1d3fb7b83ddece55bb1960 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Thu, 19 May 2016 16:26:20 -0400 Subject: [PATCH] AudioIOStartStreamOptions includes the sample rate --- src/AudioIO.cpp | 4 +++- src/AudioIO.h | 10 ++++++---- src/Project.cpp | 2 +- src/effects/Effect.cpp | 5 +++-- src/toolbars/ControlToolBar.cpp | 6 +++--- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/AudioIO.cpp b/src/AudioIO.cpp index 90eb43486..f0e887116 100644 --- a/src/AudioIO.cpp +++ b/src/AudioIO.cpp @@ -1520,12 +1520,14 @@ int AudioIO::StartStream(const WaveTrackArray &playbackTracks, #ifdef EXPERIMENTAL_MIDI_OUT const NoteTrackArray &midiPlaybackTracks, #endif - double sampleRate, double t0, double t1, + double t0, double t1, const AudioIOStartStreamOptions &options) { if( IsBusy() ) return 0; + const auto &sampleRate = options.rate; + // We just want to set mStreamToken to -1 - this way avoids // an extremely rare but possible race condition, if two functions // somehow called StartStream at the same time... diff --git a/src/AudioIO.h b/src/AudioIO.h index 7dde10e5e..2f3298808 100644 --- a/src/AudioIO.h +++ b/src/AudioIO.h @@ -88,9 +88,11 @@ DECLARE_EXPORTED_EVENT_TYPE(AUDACITY_DLL_API, EVT_AUDIOIO_MONITOR, -1); // To avoid growing the argument list of StartStream, add fields here struct AudioIOStartStreamOptions { - AudioIOStartStreamOptions() + explicit + AudioIOStartStreamOptions(double rate_) : timeTrack(NULL) , listener(NULL) + , rate(rate_) , playLooped(false) , cutPreviewGapStart(0.0) , cutPreviewGapLen(0.0) @@ -106,6 +108,7 @@ struct AudioIOStartStreamOptions TimeTrack *timeTrack; AudioIOListener* listener; + double rate; bool playLooped; double cutPreviewGapStart; double cutPreviewGapLen; @@ -163,9 +166,8 @@ class AUDACITY_DLL_API AudioIO final { #ifdef EXPERIMENTAL_MIDI_OUT const NoteTrackArray &midiTracks, #endif - double sampleRate, double t0, double t1, - const AudioIOStartStreamOptions &options = - AudioIOStartStreamOptions()); + double t0, double t1, + const AudioIOStartStreamOptions &options); /** \brief Stop recording, playback or input monitoring. * diff --git a/src/Project.cpp b/src/Project.cpp index b96cd86c9..24be2951a 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -1131,7 +1131,7 @@ AudacityProject::~AudacityProject() AudioIOStartStreamOptions AudacityProject::GetDefaultPlayOptions() { - AudioIOStartStreamOptions options; + AudioIOStartStreamOptions options { GetRate() }; options.timeTrack = GetTracks()->GetTimeTrack(); options.listener = this; return options; diff --git a/src/effects/Effect.cpp b/src/effects/Effect.cpp index ac08b1b54..e1a44bde7 100644 --- a/src/effects/Effect.cpp +++ b/src/effects/Effect.cpp @@ -2534,7 +2534,7 @@ void Effect::Preview(bool dryOnly) double previewLen; gPrefs->Read(wxT("/AudioIO/EffectsPreviewLen"), &previewLen, 6.0); - double rate = mProjectRate; + const double rate = mProjectRate; if (isNyquist && isGenerator) { previewDuration = CalcPreviewInputLength(previewLen); @@ -2637,12 +2637,13 @@ void Effect::Preview(bool dryOnly) NoteTrackArray empty; #endif // Start audio playing + AudioIOStartStreamOptions options { rate }; int token = gAudioIO->StartStream(playbackTracks, recordingTracks, #ifdef EXPERIMENTAL_MIDI_OUT empty, #endif - rate, mT0, t1); + mT0, t1, options); if (token) { int previewing = eProgressSuccess; diff --git a/src/toolbars/ControlToolBar.cpp b/src/toolbars/ControlToolBar.cpp index 1a662d6fd..9d33f3d17 100644 --- a/src/toolbars/ControlToolBar.cpp +++ b/src/toolbars/ControlToolBar.cpp @@ -634,7 +634,7 @@ int ControlToolBar::PlayPlayRegion(const SelectedRegion &selectedRegion, #ifdef EXPERIMENTAL_MIDI_OUT NoteTrackArray(), #endif - p->GetRate(), tcp0, tcp1, myOptions); + tcp0, tcp1, myOptions); } else { // Cannot create cut preview tracks, clean up and exit @@ -655,7 +655,7 @@ int ControlToolBar::PlayPlayRegion(const SelectedRegion &selectedRegion, #ifdef EXPERIMENTAL_MIDI_OUT t->GetNoteTrackArray(false), #endif - p->GetRate(), t0, t1, options); + t0, t1, options); } if (token != 0) { success = true; @@ -1085,7 +1085,7 @@ void ControlToolBar::OnRecord(wxCommandEvent &evt) #ifdef EXPERIMENTAL_MIDI_OUT midiTracks, #endif - p->GetRate(), t0, t1, options); + t0, t1, options); bool success = (token != 0);