17namespace tracktion {
inline namespace engine
20inline AudioNode* createTrackCompAudioNode (AudioNode* input,
28 input =
new TimedMutingAudioNode (input, muteTimes);
30 for (
auto r : nonMuteTimes)
32 auto fadeIn = r.withLength (crossfadeTime) - 0.0001;
33 auto fadeOut = fadeIn.movedToEndAt (r.getEnd() + 0.0001);
35 if (! (fadeIn.isEmpty() && fadeOut.isEmpty()))
36 input =
new FadeInOutAudioNode (input, fadeIn, fadeOut,
37 AudioFadeCurve::convex,
38 AudioFadeCurve::convex,
false);
44inline AudioNode* createTrackCompAudioNode (AudioNode* input,
47 TimeDuration crossfadeTime)
52 for (
auto t : muteTimes)
53 muteEditTimes.add ({ t.getStart().inSeconds(), t.getEnd().inSeconds() });
55 for (
auto t : nonMuteTimes)
56 nonMuteEditTimes.add ({ t.getStart().inSeconds(), t.getEnd().inSeconds() });
58 return createTrackCompAudioNode (input,
61 crossfadeTime.inSeconds());
64inline AudioNode* createAudioNode (TrackCompManager::TrackComp& trackComp, Track& t, AudioNode* input)
66 auto crossfadeTimeMs = trackComp.edit.engine.getPropertyStorage().getProperty (SettingID::compCrossfadeMs, 20.0);
67 auto crossfadeTime = TimeDuration::fromSeconds (
static_cast<double> (crossfadeTimeMs) / 1000.0);
68 auto nonMuteTimes = trackComp.getNonMuteTimes (t, crossfadeTime);
70 return createTrackCompAudioNode (input, TrackCompManager::TrackComp::getMuteTimes (nonMuteTimes),
71 nonMuteTimes, crossfadeTime);
bool isEmpty() const noexcept