MCPcopy Create free account
hub / github.com/audacity/audacity / EffectOutputTracks

Method EffectOutputTracks

libraries/lib-effects/EffectOutputTracks.cpp:20–77  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

18int EffectOutputTracks::nEffectsDone = 0;
19
20EffectOutputTracks::EffectOutputTracks(
21 TrackList& tracks, EffectType effectType,
22 std::optional<TimeInterval> effectTimeInterval, bool allSyncLockSelected,
23 bool stretchSyncLocked)
24 : mTracks { tracks }
25 , mEffectType { effectType }
26{
27 assert(
28 !effectTimeInterval.has_value() ||
29 effectTimeInterval->first <= effectTimeInterval->second);
30 // Reset map
31 mIMap.clear();
32 mOMap.clear();
33 mOutputTracks = TrackList::Create(mTracks.GetOwner());
34
35 auto trackRange = mTracks.Any() +
36 [&] (const Track *pTrack) {
37 return allSyncLockSelected
38 ? SyncLock::IsSelectedOrSyncLockSelected(*pTrack)
39 : dynamic_cast<const WaveTrack*>(pTrack) && pTrack->GetSelected();
40 };
41
42 for (auto aTrack : trackRange) {
43 auto pTrack = aTrack->Duplicate();
44 mIMap.push_back(aTrack);
45 mOMap.push_back(pTrack.get());
46 mOutputTracks->Add(pTrack);
47 }
48
49 if (
50 effectTimeInterval.has_value() &&
51 effectTimeInterval->second > effectTimeInterval->first)
52 {
53 TimeStretching::WithClipRenderingProgress(
54 [&](const ProgressReporter& parent)
55 {
56 const auto tracksToUnstretch =
57 (stretchSyncLocked ? mOutputTracks->Any<WaveTrack>() :
58 mOutputTracks->Selected<WaveTrack>()) +
59 [&](const WaveTrack* pTrack)
60 {
61 return TimeStretching::HasPitchOrSpeed(
62 *pTrack, effectTimeInterval->first,
63 effectTimeInterval->second);
64 };
65 BasicUI::SplitProgress(
66 tracksToUnstretch.begin(), tracksToUnstretch.end(),
67 [&](WaveTrack* aTrack, const ProgressReporter& child) {
68 aTrack->ApplyPitchAndSpeed(effectTimeInterval, child);
69 },
70 parent);
71 });
72 }
73
74 // Invariant is established
75 assert(mIMap.size() == mOutputTracks->Size());
76 assert(mIMap.size() == mOMap.size());
77}

Callers

nothing calls this directly

Calls 15

CreateFunction · 0.85
SplitProgressFunction · 0.85
has_valueMethod · 0.80
ApplyPitchAndSpeedMethod · 0.80
SizeMethod · 0.80
clearMethod · 0.45
AnyMethod · 0.45
GetSelectedMethod · 0.45
DuplicateMethod · 0.45
push_backMethod · 0.45
getMethod · 0.45
AddMethod · 0.45

Tested by

no test coverage detected