Audacity 3.2.0
Classes | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
PitchAndSpeedDialog Class Referencefinal

#include <PitchAndSpeedDialog.h>

Inheritance diagram for PitchAndSpeedDialog:
[legend]
Collaboration diagram for PitchAndSpeedDialog:
[legend]

Classes

struct  PitchShift
 
struct  StrongTarget
 

Public Member Functions

 PitchAndSpeedDialog (AudacityProject &project)
 
PitchAndSpeedDialogRetarget (const std::shared_ptr< WaveTrack > &track, const WaveTrack::IntervalHolder &wideClip)
 
PitchAndSpeedDialogSetFocus (const std::optional< PitchAndSpeedDialogGroup > &group)
 
void TryRetarget (const TrackPanelMouseEvent &event)
 
- Public Member Functions inherited from wxDialogWrapper
 wxDialogWrapper ()
 
 wxDialogWrapper (wxWindow *parent, wxWindowID id, const TranslatableString &title, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxDEFAULT_DIALOG_STYLE, const TranslatableString &name=XO("Dialog"))
 
bool Create (wxWindow *parent, wxWindowID id, const TranslatableString &title, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxDEFAULT_DIALOG_STYLE, const TranslatableString &name=XO("Dialog"))
 
void SetTitle (const TranslatableString &title)
 
void SetLabel (const TranslatableString &title)
 
void SetName (const TranslatableString &title)
 
void SetName ()
 
- Public Member Functions inherited from wxTabTraversalWrapper< wxDialog >
 wxTabTraversalWrapper (Args &&... args)
 
 wxTabTraversalWrapper (const wxTabTraversalWrapper &)=delete
 
 wxTabTraversalWrapper (wxTabTraversalWrapper &&)=delete
 
wxTabTraversalWrapperoperator= (const wxTabTraversalWrapper &)=delete
 
wxTabTraversalWrapperoperator= (wxTabTraversalWrapper &&)=delete
 
- Public Member Functions inherited from ClientData::Base
virtual ~Base ()
 

Static Public Member Functions

static PitchAndSpeedDialogGet (AudacityProject &project)
 
static const PitchAndSpeedDialogGet (const AudacityProject &project)
 
static void Destroy (AudacityProject &project)
 

Private Member Functions

bool Show (bool show) override
 
void SetFocus () override
 
void PopulateOrExchange (ShuttleGui &s)
 
void SetSemitoneShift ()
 
bool SetClipSpeed ()
 
void UpdateDialog ()
 
void UpdateHistory (const TranslatableString &desc)
 
std::optional< StrongTargetLockTarget ()
 

Private Attributes

AudacityProjectmProject
 
const wxString mTitle
 
Observer::Subscription mProjectCloseSubscription
 
Observer::Subscription mAudioIOSubscription
 
Observer::Subscription mClipDeletedSubscription
 
Observer::Subscription mClipCentShiftChangeSubscription
 
Observer::Subscription mClipSpeedChangeSubscription
 
double mClipSpeed = 100
 
double mOldClipSpeed = mClipSpeed
 
PitchShift mShift
 
PitchShift mOldShift
 
std::weak_ptr< WaveClipmLeftClip
 
std::weak_ptr< WaveClipmRightClip
 
std::weak_ptr< WaveTrackmTrack
 
bool mConsolidateHistory = true
 
bool mFirst = true
 
bool mFormantPreservation = false
 
bool mOldFormantPreservation = mFormantPreservation
 

Detailed Description

Definition at line 30 of file PitchAndSpeedDialog.h.

Constructor & Destructor Documentation

◆ PitchAndSpeedDialog()

PitchAndSpeedDialog::PitchAndSpeedDialog ( AudacityProject project)

Definition at line 166 of file PitchAndSpeedDialog.cpp.

168 FindProjectFrame(&project), wxID_ANY, XO("Pitch and Speed"), wxDefaultPosition,
169 { 480, 250 }, wxDEFAULT_DIALOG_STYLE)
170 , mProject { project }
173 , mTitle { GetTitle() }
174{
175 Bind(wxEVT_CLOSE_WINDOW, [this](const auto&) { Show(false); });
176
177 Bind(wxEVT_CHAR_HOOK, [this](wxKeyEvent& event) {
178 if (event.GetKeyCode() == WXK_ESCAPE)
179 Show(false);
180 else
181 event.Skip();
182 });
183
184 if (const auto audioIo = AudioIO::Get())
185 {
187 audioIo->Subscribe([this](const AudioIOEvent& event) {
188 if (event.pProject != &mProject)
189 return;
190 switch (event.type)
191 {
192 case AudioIOEvent::CAPTURE:
193 case AudioIOEvent::PLAYBACK:
194 if (const auto child = wxDialog::FindWindowById(speedCtrlId))
195 child->Enable(!event.on);
196 break;
197 case AudioIOEvent::MONITOR:
198 break;
199 default:
200 // Unknown event type
201 assert(false);
202 }
203 });
204 }
205}
XO("Cut/Copy/Paste")
wxFrame * FindProjectFrame(AudacityProject *project)
Get a pointer to the window associated with a project, or null if the given pointer is null,...
const auto project
static AudioIO * Get()
Definition: AudioIO.cpp:126
Subscription Subscribe(Callback callback)
Connect a callback to the Publisher; later-connected are called earlier.
Definition: Observer.h:199
static void Destroy(AudacityProject &project)
Observer::Subscription mAudioIOSubscription
Observer::Subscription mProjectCloseSubscription
bool Show(bool show) override
AudacityProject & mProject
static ProjectWindow & Get(AudacityProject &project)
enum AudioIOEvent::Type type
AudacityProject * pProject
Definition: AudioIO.h:60
Message sent when the project window is closed.
Definition: ProjectWindow.h:29

Member Function Documentation

◆ Destroy()

void PitchAndSpeedDialog::Destroy ( AudacityProject project)
static

Definition at line 155 of file PitchAndSpeedDialog.cpp.

156{
157 auto& attachedWindows = GetAttachedWindows(project);
158 auto* pPanel = attachedWindows.Find(key);
159 if (pPanel)
160 {
161 pPanel->wxWindow::Destroy();
162 attachedWindows.Assign(key, nullptr);
163 }
164}
AUDACITY_DLL_API AttachedWindows & GetAttachedWindows(AudacityProject &project)
static const AttachedWindows::RegisteredFactory key

References GetAttachedWindows(), anonymous_namespace{PitchAndSpeedDialog.cpp}::key, and project.

Here is the call graph for this function:

◆ Get() [1/2]

PitchAndSpeedDialog & PitchAndSpeedDialog::Get ( AudacityProject project)
static

Definition at line 144 of file PitchAndSpeedDialog.cpp.

145{
147}
Subclass & Get(const RegisteredFactory &key)
Get reference to an attachment, creating on demand if not present, down-cast it to Subclass.
Definition: ClientData.h:318

References ClientData::Site< Host, ClientData, ObjectCopyingPolicy, Pointer, ObjectLockingPolicy, RegistryLockingPolicy >::Get(), GetAttachedWindows(), anonymous_namespace{PitchAndSpeedDialog.cpp}::key, and project.

Referenced by Get(), WaveTrackAffordanceHandle::Release(), SelectHandle::Release(), WaveChannelView::SelectNextClip(), and WaveTrackAffordanceControls::StartEditSelectedClipSpeed().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Get() [2/2]

const PitchAndSpeedDialog & PitchAndSpeedDialog::Get ( const AudacityProject project)
static

Definition at line 150 of file PitchAndSpeedDialog.cpp.

151{
152 return Get(const_cast<AudacityProject&>(project));
153}
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
Definition: Project.h:90
static PitchAndSpeedDialog & Get(AudacityProject &project)

References Get(), and project.

Here is the call graph for this function:

◆ LockTarget()

std::optional< PitchAndSpeedDialog::StrongTarget > PitchAndSpeedDialog::LockTarget ( )
private

Definition at line 428 of file PitchAndSpeedDialog.cpp.

429{
430 if (const auto track = mTrack.lock())
431 if (const auto leftClip = mLeftClip.lock())
432 return StrongTarget {
433 track, leftClip
434 };
435 return {};
436}
std::weak_ptr< WaveClip > mLeftClip
std::weak_ptr< WaveTrack > mTrack

References mLeftClip, and mTrack.

Referenced by PopulateOrExchange(), SetClipSpeed(), and SetSemitoneShift().

Here is the caller graph for this function:

◆ PopulateOrExchange()

void PitchAndSpeedDialog::PopulateOrExchange ( ShuttleGui s)
private

Definition at line 286 of file PitchAndSpeedDialog.cpp.

287{
288 {
289 ScopedInvisiblePanel panel { s, 15 };
290 s.SetBorder(0);
291 {
292 ScopedStatic scopedStatic { s, XO("Clip Pitch") };
293 {
294 ScopedHorizontalLay h { s, wxLeft };
295 s.SetBorder(2);
296 // Use `TieSpinCtrl` rather than `AddSpinCtrl`, too see updates
297 // instantly when `UpdateDialog` is called.
298 const auto semiSpin = s.Id(semitoneCtrlId)
300 XO("se&mitones:"), mShift.semis,
303 semiSpin->Bind(wxEVT_SPINCTRL, [this, semiSpin](const auto&) {
304 // The widget's value isn't updated yet on macos, so we need
305 // to asynchronously query it later.
306 CallAfter([this, semiSpin] {
307 const auto prevSemis = mShift.semis;
308 mShift.semis = semiSpin->GetValue();
309 // If we have e.g. -3 semi, -1 cents, and the user
310 // changes the sign of the semitones, the logic in
311 // `SetSemitoneShift` would result in 2 semi, 99
312 // cents. If the user changes sign again, we would now
313 // get 1 semi, -1 cents. Mirrorring (e.g. -3 semi, -1
314 // cents -> 3 semi, 1 cents) is not a good idea because
315 // that would ruin the work of users painstakingly
316 // adjusting the cents of an instrument. So instead, we
317 // map -3 semi, -1 cents to 3 semi, 99 cents.
318 if (mShift.cents != 0)
319 {
320 if (prevSemis < 0 && mShift.semis > 0)
321 ++mShift.semis;
322 else if (prevSemis > 0 && mShift.semis < 0)
323 --mShift.semis;
324 }
326 });
327 });
328 const auto centSpin =
329 s.TieSpinCtrl(XO("&cents:"), mShift.cents, 100, -100);
330 centSpin->Bind(wxEVT_SPINCTRL, [this, centSpin](const auto&) {
331 CallAfter([this, centSpin] {
332 mShift.cents = centSpin->GetValue();
334 });
335 });
336 }
337 }
338
339 s.AddSpace(0, 12);
340 s.SetBorder(0);
341
342 {
343 ScopedStatic scopedStatic { s, XO("Clip Speed") };
344 {
345 ScopedHorizontalLay h { s, wxLeft };
346 const auto txtCtrl =
347 s.Id(speedCtrlId)
348 .Name(XO("Clip Speed"))
350 wxSize(60, -1), XO("&speed %: "), mClipSpeed, 1000.0, 1.0);
351#if wxUSE_ACCESSIBILITY
352 txtCtrl->SetAccessible(safenew WindowAccessible(txtCtrl));
353#endif
354 const auto playbackOngoing =
356 txtCtrl->Enable(!playbackOngoing);
357 txtCtrl->Bind(
358 wxEVT_SPINCTRL, [this, txtCtrl](wxCommandEvent& event) {
359 mClipSpeed = txtCtrl->GetValue();
360 if (!SetClipSpeed())
361 if (auto target = LockTarget())
362 {
364 *target->track, *target->clip);
365 UpdateDialog();
366 }
367 });
368 }
369 }
370
371 s.AddSpace(0, 12);
372 s.SetBorder(0);
373
374 {
375 ScopedStatic scopedStatic { s, XO("General") };
376 {
377 ScopedHorizontalLay h { s, wxLeft };
378 s.SetBorder(2);
379 s.TieCheckBox(XO("&Optimize for Voice"), mFormantPreservation)
380 ->Bind(wxEVT_CHECKBOX, [this](auto&) {
382 if (auto target = LockTarget())
383 target->clip->SetPitchAndSpeedPreset(
387 });
388 }
389 }
390 }
391}
#define safenew
Definition: MemoryX.h:10
std::optional< StrongTarget > LockTarget()
bool IsAudioActive() const
static ProjectAudioIO & Get(AudacityProject &project)
void SetBorder(int Border)
Definition: ShuttleGui.h:495
wxCheckBox * TieCheckBox(const TranslatableString &Prompt, bool &Var)
wxSpinCtrl * TieSpinCtrl(const TranslatableString &Prompt, int &Value, const int max, const int min=0)
SpinControl * TieSpinControl(const wxSize &size, const TranslatableString &Prompt, double &Value, const double max, const double min=0)
ShuttleGui & Id(int id)
wxSizerItem * AddSpace(int width, int height, int prop=0)
ShuttleGui & Name(const TranslatableString &name)
Definition: ShuttleGui.h:672
static constexpr auto MaxCents
static constexpr auto MinCents
An alternative to using wxWindowAccessible, which in wxWidgets 3.1.1 contained GetParent() which was ...
void CallAfter(Action action)
Schedule an action to be done later, and in the main thread.
Definition: BasicUI.cpp:213
WAVE_TRACK_API void ExpandClipTillNextOne(const WaveTrack &track, WaveTrack::Interval &interval)

References ShuttleGui::AddSpace(), BasicUI::CallAfter(), PitchAndSpeedDialog::PitchShift::cents, Default, WaveTrackUtilities::ExpandClipTillNextOne(), ProjectAudioIO::Get(), ShuttleGui::Id(), ProjectAudioIO::IsAudioActive(), LockTarget(), TimeAndPitchInterface::MaxCents, mClipSpeed, mFormantPreservation, TimeAndPitchInterface::MinCents, mProject, mShift, ShuttleGui::Name(), OptimizeForVoice, safenew, PitchAndSpeedDialog::PitchShift::semis, anonymous_namespace{PitchAndSpeedDialog.cpp}::semitoneCtrlId, ShuttleGuiBase::SetBorder(), SetClipSpeed(), SetSemitoneShift(), anonymous_namespace{PitchAndSpeedDialog.cpp}::speedCtrlId, ShuttleGuiBase::TieCheckBox(), ShuttleGuiBase::TieSpinControl(), ShuttleGuiBase::TieSpinCtrl(), UpdateDialog(), and XO().

Referenced by Retarget(), and UpdateDialog().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Retarget()

PitchAndSpeedDialog & PitchAndSpeedDialog::Retarget ( const std::shared_ptr< WaveTrack > &  track,
const WaveTrack::IntervalHolder wideClip 
)

Definition at line 215 of file PitchAndSpeedDialog.cpp.

218{
219 mConsolidateHistory = false;
220 wxDialog::SetTitle(mTitle + " - " + clip->GetName());
221 const auto leftClip = clip;
223 leftClip->Observer::Publisher<WaveClipDtorCalled>::Subscribe(
224 [this](WaveClipDtorCalled) { Show(false); });
226 leftClip->Observer::Publisher<CentShiftChange>::Subscribe(
227 [this](const CentShiftChange& cents) {
229 mShift.semis * 100 + mShift.cents, cents.newValue);
230 UpdateDialog();
231 });
233 leftClip->Observer::Publisher<StretchRatioChange>::Subscribe(
234 [this](const StretchRatioChange& stretchRatio) {
235 mClipSpeed = 100.0 / stretchRatio.newValue;
236 UpdateDialog();
237 });
238
239 mTrack = track;
240 mLeftClip = leftClip;
241 mClipSpeed = 100.0 / leftClip->GetStretchRatio();
243 mShift = GetClipShift(*leftClip);
245 mFormantPreservation = leftClip->GetPitchAndSpeedPreset() ==
248
250
251 {
252 ScopedVerticalLay v { s };
254 }
255
256 if (mFirst)
257 {
258 Layout();
259 Fit();
260 Centre();
261 mFirst = false;
262 }
263
264 return *this;
265}
@ eIsSettingToDialog
Definition: ShuttleGui.h:39
@ eIsCreating
Definition: ShuttleGui.h:37
Observer::Subscription mClipSpeedChangeSubscription
Observer::Subscription mClipDeletedSubscription
void PopulateOrExchange(ShuttleGui &s)
Observer::Subscription mClipCentShiftChangeSubscription
Derived from ShuttleGuiBase, an Audacity specific class for shuttling data to and from GUI.
Definition: ShuttleGui.h:640
PitchAndSpeedDialog::PitchShift GetClipShift(const WaveClip &clip)
PitchAndSpeedDialog::PitchShift ToSemitonesAndCents(int oldCents, int newCents)
const int newValue
Definition: WaveClip.h:203
const double newValue
Definition: WaveClip.h:221

References PitchAndSpeedDialog::PitchShift::cents, eIsCreating, eIsSettingToDialog, anonymous_namespace{PitchAndSpeedDialog.cpp}::GetClipShift(), mClipCentShiftChangeSubscription, mClipDeletedSubscription, mClipSpeed, mClipSpeedChangeSubscription, mConsolidateHistory, mFirst, mFormantPreservation, mLeftClip, mOldClipSpeed, mOldFormantPreservation, mOldShift, mShift, mTitle, mTrack, CentShiftChange::newValue, StretchRatioChange::newValue, OptimizeForVoice, PopulateOrExchange(), PitchAndSpeedDialog::PitchShift::semis, Show(), anonymous_namespace{PitchAndSpeedDialog.cpp}::ToSemitonesAndCents(), and UpdateDialog().

Referenced by WaveChannelView::SelectNextClip(), WaveTrackAffordanceControls::StartEditSelectedClipSpeed(), and TryRetarget().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetClipSpeed()

bool PitchAndSpeedDialog::SetClipSpeed ( )
private

Definition at line 393 of file PitchAndSpeedDialog.cpp.

394{
395 auto target = LockTarget();
396 if (!target)
397 return false;
398
399 const auto wasExactlySelected =
401
403 *target->track, *target->clip, 100 / mClipSpeed))
404 return false;
405
406 if (wasExactlySelected)
408
409 UpdateHistory(XO("Changed Speed"));
410
411 return true;
412}
void UpdateHistory(const TranslatableString &desc)
WAVE_TRACK_API bool SetClipStretchRatio(const WaveTrack &track, WaveTrack::Interval &interval, double stretchRatio)
void SelectClip(AudacityProject &project, const WaveTrack::Interval &clip)
bool IsExactlySelected(AudacityProject &project, const ClipTimes &clip)

References anonymous_namespace{PitchAndSpeedDialog.cpp}::IsExactlySelected(), LockTarget(), mClipSpeed, mLeftClip, mProject, WaveClipUIUtilities::SelectClip(), TimeStretching::SetClipStretchRatio(), UpdateHistory(), and XO().

Referenced by PopulateOrExchange().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetFocus() [1/2]

void PitchAndSpeedDialog::SetFocus ( )
inlineoverrideprivate

Definition at line 67 of file PitchAndSpeedDialog.h.

68 {
70 }
void SetFocus(const WindowPlacement &focus)
Set the window that accepts keyboard input.
Definition: BasicUI.h:384

References BasicUI::SetFocus().

Here is the call graph for this function:

◆ SetFocus() [2/2]

PitchAndSpeedDialog & PitchAndSpeedDialog::SetFocus ( const std::optional< PitchAndSpeedDialogGroup > &  group)

Definition at line 267 of file PitchAndSpeedDialog.cpp.

269{
270
271 const auto item =
272 group.has_value() ?
273 wxWindow::FindWindowById(
276 this) :
277 nullptr;
278 if (item)
279 item->SetFocus();
280 wxDialog::Show(true);
281 wxDialog::Raise();
283 return *this;
284}
IMPORT_EXPORT_API ExportResult Show(ExportTask exportTask)

References Pitch, anonymous_namespace{PitchAndSpeedDialog.cpp}::semitoneCtrlId, BasicUI::SetFocus(), ExportProgressUI::Show(), and anonymous_namespace{PitchAndSpeedDialog.cpp}::speedCtrlId.

Referenced by WaveTrackAffordanceControls::StartEditSelectedClipSpeed().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetSemitoneShift()

void PitchAndSpeedDialog::SetSemitoneShift ( )
private

Definition at line 438 of file PitchAndSpeedDialog.cpp.

439{
440 auto target = LockTarget();
441 if (!target)
442 return;
444 const auto success =
445 target->clip->SetCentShift(mShift.semis * 100 + mShift.cents);
446 assert(success);
447 TrackPanel::Get(mProject).RefreshTrack(target->track.get());
448 UpdateHistory(XO("Changed Pitch"));
449}
static TrackPanel & Get(AudacityProject &project)
Definition: TrackPanel.cpp:234
void RefreshTrack(Track *trk, bool refreshbacking=true)
Definition: TrackPanel.cpp:768
void ClampPitchShift(PitchAndSpeedDialog::PitchShift &shift)

References PitchAndSpeedDialog::PitchShift::cents, anonymous_namespace{PitchAndSpeedDialog.cpp}::ClampPitchShift(), TrackPanel::Get(), LockTarget(), mProject, mShift, TrackPanel::RefreshTrack(), PitchAndSpeedDialog::PitchShift::semis, UpdateHistory(), and XO().

Referenced by PopulateOrExchange().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Show()

bool PitchAndSpeedDialog::Show ( bool  show)
inlineoverrideprivate

Definition at line 63 of file PitchAndSpeedDialog.h.

64 {
65 return wxDialogWrapper::Show(show);
66 }

References ExportProgressUI::Show().

Referenced by Retarget().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ TryRetarget()

void PitchAndSpeedDialog::TryRetarget ( const TrackPanelMouseEvent event)

Definition at line 207 of file PitchAndSpeedDialog.cpp.

208{
209 const auto target = GetHitClip(mProject, event);
210 if (!target.has_value() || target->clip == mLeftClip.lock())
211 return;
212 Retarget(target->track, target->clip);
213}
PitchAndSpeedDialog & Retarget(const std::shared_ptr< WaveTrack > &track, const WaveTrack::IntervalHolder &wideClip)
std::optional< HitClip > GetHitClip(AudacityProject &project, const TrackPanelMouseEvent &event)

References anonymous_namespace{PitchAndSpeedDialog.cpp}::GetHitClip(), mLeftClip, mProject, and Retarget().

Referenced by WaveTrackAffordanceHandle::Release(), and SelectHandle::Release().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateDialog()

void PitchAndSpeedDialog::UpdateDialog ( )
private

Definition at line 414 of file PitchAndSpeedDialog.cpp.

415{
418}
#define S(N)
Definition: ToChars.cpp:64

References eIsSettingToDialog, PopulateOrExchange(), and S.

Referenced by PopulateOrExchange(), and Retarget().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateHistory()

void PitchAndSpeedDialog::UpdateHistory ( const TranslatableString desc)
private

Definition at line 420 of file PitchAndSpeedDialog.cpp.

421{
424 mConsolidateHistory = true;
425}
void PushState(const TranslatableString &desc, const TranslatableString &shortDesc)
static ProjectHistory & Get(AudacityProject &project)
const TranslatableString desc
Definition: ExportPCM.cpp:51

References CONSOLIDATE, anonymous_namespace{ExportPCM.cpp}::desc, ProjectHistory::Get(), mConsolidateHistory, mProject, NONE, and ProjectHistory::PushState().

Referenced by SetClipSpeed(), and SetSemitoneShift().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ mAudioIOSubscription

Observer::Subscription PitchAndSpeedDialog::mAudioIOSubscription
private

Definition at line 89 of file PitchAndSpeedDialog.h.

◆ mClipCentShiftChangeSubscription

Observer::Subscription PitchAndSpeedDialog::mClipCentShiftChangeSubscription
private

Definition at line 91 of file PitchAndSpeedDialog.h.

Referenced by Retarget().

◆ mClipDeletedSubscription

Observer::Subscription PitchAndSpeedDialog::mClipDeletedSubscription
private

Definition at line 90 of file PitchAndSpeedDialog.h.

Referenced by Retarget().

◆ mClipSpeed

double PitchAndSpeedDialog::mClipSpeed = 100
private

Definition at line 93 of file PitchAndSpeedDialog.h.

Referenced by PopulateOrExchange(), Retarget(), and SetClipSpeed().

◆ mClipSpeedChangeSubscription

Observer::Subscription PitchAndSpeedDialog::mClipSpeedChangeSubscription
private

Definition at line 92 of file PitchAndSpeedDialog.h.

Referenced by Retarget().

◆ mConsolidateHistory

bool PitchAndSpeedDialog::mConsolidateHistory = true
private

Definition at line 100 of file PitchAndSpeedDialog.h.

Referenced by Retarget(), and UpdateHistory().

◆ mFirst

bool PitchAndSpeedDialog::mFirst = true
private

Definition at line 101 of file PitchAndSpeedDialog.h.

Referenced by Retarget().

◆ mFormantPreservation

bool PitchAndSpeedDialog::mFormantPreservation = false
private

Definition at line 102 of file PitchAndSpeedDialog.h.

Referenced by PopulateOrExchange(), and Retarget().

◆ mLeftClip

std::weak_ptr<WaveClip> PitchAndSpeedDialog::mLeftClip
private

Definition at line 97 of file PitchAndSpeedDialog.h.

Referenced by LockTarget(), Retarget(), SetClipSpeed(), and TryRetarget().

◆ mOldClipSpeed

double PitchAndSpeedDialog::mOldClipSpeed = mClipSpeed
private

Definition at line 94 of file PitchAndSpeedDialog.h.

Referenced by Retarget().

◆ mOldFormantPreservation

bool PitchAndSpeedDialog::mOldFormantPreservation = mFormantPreservation
private

Definition at line 103 of file PitchAndSpeedDialog.h.

Referenced by Retarget().

◆ mOldShift

PitchShift PitchAndSpeedDialog::mOldShift
private

Definition at line 96 of file PitchAndSpeedDialog.h.

Referenced by Retarget().

◆ mProject

AudacityProject& PitchAndSpeedDialog::mProject
private

◆ mProjectCloseSubscription

Observer::Subscription PitchAndSpeedDialog::mProjectCloseSubscription
private

Definition at line 88 of file PitchAndSpeedDialog.h.

◆ mRightClip

std::weak_ptr<WaveClip> PitchAndSpeedDialog::mRightClip
private

Definition at line 98 of file PitchAndSpeedDialog.h.

◆ mShift

PitchShift PitchAndSpeedDialog::mShift
private

Definition at line 95 of file PitchAndSpeedDialog.h.

Referenced by PopulateOrExchange(), Retarget(), and SetSemitoneShift().

◆ mTitle

const wxString PitchAndSpeedDialog::mTitle
private

Definition at line 87 of file PitchAndSpeedDialog.h.

Referenced by Retarget().

◆ mTrack

std::weak_ptr<WaveTrack> PitchAndSpeedDialog::mTrack
private

Definition at line 99 of file PitchAndSpeedDialog.h.

Referenced by LockTarget(), and Retarget().


The documentation for this class was generated from the following files: