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 case AudioIOEvent::PAUSE:
199 break;
200 default:
201 // Unknown event type
202 assert(false);
203 }
204 });
205 }
206}
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:61
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 429 of file PitchAndSpeedDialog.cpp.

430{
431 if (const auto track = mTrack.lock())
432 if (const auto leftClip = mLeftClip.lock())
433 return StrongTarget {
434 track, leftClip
435 };
436 return {};
437}
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 287 of file PitchAndSpeedDialog.cpp.

288{
289 {
290 ScopedInvisiblePanel panel { s, 15 };
291 s.SetBorder(0);
292 {
293 ScopedStatic scopedStatic { s, XO("Clip Pitch") };
294 {
295 ScopedHorizontalLay h { s, wxLeft };
296 s.SetBorder(2);
297 // Use `TieSpinCtrl` rather than `AddSpinCtrl`, too see updates
298 // instantly when `UpdateDialog` is called.
299 const auto semiSpin = s.Id(semitoneCtrlId)
301 XO("se&mitones:"), mShift.semis,
304 semiSpin->Bind(wxEVT_SPINCTRL, [this, semiSpin](const auto&) {
305 // The widget's value isn't updated yet on macos, so we need
306 // to asynchronously query it later.
307 CallAfter([this, semiSpin] {
308 const auto prevSemis = mShift.semis;
309 mShift.semis = semiSpin->GetValue();
310 // If we have e.g. -3 semi, -1 cents, and the user
311 // changes the sign of the semitones, the logic in
312 // `SetSemitoneShift` would result in 2 semi, 99
313 // cents. If the user changes sign again, we would now
314 // get 1 semi, -1 cents. Mirrorring (e.g. -3 semi, -1
315 // cents -> 3 semi, 1 cents) is not a good idea because
316 // that would ruin the work of users painstakingly
317 // adjusting the cents of an instrument. So instead, we
318 // map -3 semi, -1 cents to 3 semi, 99 cents.
319 if (mShift.cents != 0)
320 {
321 if (prevSemis < 0 && mShift.semis > 0)
322 ++mShift.semis;
323 else if (prevSemis > 0 && mShift.semis < 0)
324 --mShift.semis;
325 }
327 });
328 });
329 const auto centSpin =
330 s.TieSpinCtrl(XO("&cents:"), mShift.cents, 100, -100);
331 centSpin->Bind(wxEVT_SPINCTRL, [this, centSpin](const auto&) {
332 CallAfter([this, centSpin] {
333 mShift.cents = centSpin->GetValue();
335 });
336 });
337 }
338 }
339
340 s.AddSpace(0, 12);
341 s.SetBorder(0);
342
343 {
344 ScopedStatic scopedStatic { s, XO("Clip Speed") };
345 {
346 ScopedHorizontalLay h { s, wxLeft };
347 const auto txtCtrl =
348 s.Id(speedCtrlId)
349 .Name(XO("Clip Speed"))
351 wxSize(60, -1), XO("&speed %: "), mClipSpeed, 1000.0, 1.0);
352#if wxUSE_ACCESSIBILITY
353 txtCtrl->SetAccessible(safenew WindowAccessible(txtCtrl));
354#endif
355 const auto playbackOngoing =
357 txtCtrl->Enable(!playbackOngoing);
358 txtCtrl->Bind(
359 wxEVT_SPINCTRL, [this, txtCtrl](wxCommandEvent& event) {
360 mClipSpeed = txtCtrl->GetValue();
361 if (!SetClipSpeed())
362 if (auto target = LockTarget())
363 {
365 *target->track, *target->clip);
366 UpdateDialog();
367 }
368 });
369 }
370 }
371
372 s.AddSpace(0, 12);
373 s.SetBorder(0);
374
375 {
376 ScopedStatic scopedStatic { s, XO("General") };
377 {
378 ScopedHorizontalLay h { s, wxLeft };
379 s.SetBorder(2);
380 s.TieCheckBox(XO("&Optimize for Voice"), mFormantPreservation)
381 ->Bind(wxEVT_CHECKBOX, [this](auto&) {
383 if (auto target = LockTarget())
384 target->clip->SetPitchAndSpeedPreset(
388 });
389 }
390 }
391 }
392}
#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:214
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 216 of file PitchAndSpeedDialog.cpp.

219{
220 mConsolidateHistory = false;
221 wxDialog::SetTitle(mTitle + " - " + clip->GetName());
222 const auto leftClip = clip;
224 leftClip->Observer::Publisher<WaveClipDtorCalled>::Subscribe(
225 [this](WaveClipDtorCalled) { Show(false); });
227 leftClip->Observer::Publisher<CentShiftChange>::Subscribe(
228 [this](const CentShiftChange& cents) {
230 mShift.semis * 100 + mShift.cents, cents.newValue);
231 UpdateDialog();
232 });
234 leftClip->Observer::Publisher<StretchRatioChange>::Subscribe(
235 [this](const StretchRatioChange& stretchRatio) {
236 mClipSpeed = 100.0 / stretchRatio.newValue;
237 UpdateDialog();
238 });
239
240 mTrack = track;
241 mLeftClip = leftClip;
242 mClipSpeed = 100.0 / leftClip->GetStretchRatio();
244 mShift = GetClipShift(*leftClip);
246 mFormantPreservation = leftClip->GetPitchAndSpeedPreset() ==
249
251
252 {
253 ScopedVerticalLay v { s };
255 }
256
257 if (mFirst)
258 {
259 Layout();
260 Fit();
261 Centre();
262 mFirst = false;
263 }
264
265 return *this;
266}
@ 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 394 of file PitchAndSpeedDialog.cpp.

395{
396 auto target = LockTarget();
397 if (!target)
398 return false;
399
400 const auto wasExactlySelected =
402
404 *target->track, *target->clip, 100 / mClipSpeed))
405 return false;
406
407 if (wasExactlySelected)
409
410 UpdateHistory(XO("Changed Speed"));
411
412 return true;
413}
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:392

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 268 of file PitchAndSpeedDialog.cpp.

270{
271
272 const auto item =
273 group.has_value() ?
274 wxWindow::FindWindowById(
277 this) :
278 nullptr;
279 if (item)
280 item->SetFocus();
281 wxDialog::Show(true);
282 wxDialog::Raise();
284 return *this;
285}
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 439 of file PitchAndSpeedDialog.cpp.

440{
441 auto target = LockTarget();
442 if (!target)
443 return;
445 const auto success =
446 target->clip->SetCentShift(mShift.semis * 100 + mShift.cents);
447 assert(success);
448 TrackPanel::Get(mProject).RefreshTrack(target->track.get());
449 UpdateHistory(XO("Changed Pitch"));
450}
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 208 of file PitchAndSpeedDialog.cpp.

209{
210 const auto target = GetHitClip(mProject, event);
211 if (!target.has_value() || target->clip == mLeftClip.lock())
212 return;
213 Retarget(target->track, target->clip);
214}
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 415 of file PitchAndSpeedDialog.cpp.

416{
419}
#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 421 of file PitchAndSpeedDialog.cpp.

422{
425 mConsolidateHistory = true;
426}
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: