11namespace tracktion {
inline namespace engine
14AuxSendPlugin::AuxSendPlugin (PluginCreationInfo info) : Plugin (info)
16 auto um = getUndoManager();
17 busNumber.referTo (state, IDs::busNum, um);
18 gainLevel.referTo (state, IDs::auxSendSliderPos, um, decibelsToVolumeFaderPosition (0.0f));
19 invertPhase.referTo (state, IDs::phase, um,
false);
20 lastVolumeBeforeMute.referTo (state, IDs::lastVolumeBeforeMuteDb, um, 0.0f);
22 gain = addParam (
"send level",
TRANS(
"Send level"), { 0.0f, 1.0f },
24 [] (
const juce::String& s) {
return decibelsToVolumeFaderPosition (dbStringToDb (s)); });
26 gain->attachToCurrentValue (gainLevel);
28 quickParamName =
"send level";
31AuxSendPlugin::~AuxSendPlugin()
33 notifyListenersOfDeletion();
34 gain->detachFromCurrentValue();
37bool AuxSendPlugin::shouldProcess()
41 if (ownerTrack !=
nullptr)
46 if (! ownerTrack->processAudioNodesWhileMuted())
49 return ! ownerTrack->isMuted (
true);
55const char* AuxSendPlugin::xmlTypeName =
"auxsend";
69 auto nm = edit.getAuxBusName (busNumber);
79 lastGain = volumeFaderPositionToGain (gain->getCurrentValue());
81 initialiseWithoutStopping (info);
86 TRACKTION_ASSERT_MESSAGE_THREAD
87 auto newOwnerTrack = getOwnerTrack();
90 ownerTrack = newOwnerTrack;
93void AuxSendPlugin::deinitialise()
103 auto busName = edit.getAuxBusName (busNumber);
105 if (busName.isNotEmpty())
108 return getDefaultBusName (busNumber);
111void AuxSendPlugin::setGainDb (
float newDb)
113 float newPos = decibelsToVolumeFaderPosition (newDb);
115 if (gain->getCurrentValue() != newPos)
122void AuxSendPlugin::setMute (
bool b)
126 lastVolumeBeforeMute = getGainDb();
127 setGainDb (lastVolumeBeforeMute - 0.01f);
132 if (lastVolumeBeforeMute < -100.0f)
133 lastVolumeBeforeMute = 0.0f;
135 setGainDb (getGainDb() + 0.01f);
136 setGainDb (lastVolumeBeforeMute);
140bool AuxSendPlugin::isMute()
142 return getGainDb() <= -90.0f;
145juce::String AuxSendPlugin::getDefaultBusName (
int index)
154 for (
int i = 0; i < maxNumBusses; ++i)
156 auto nm = getDefaultBusName (i);
158 if (ed.getAuxBusName (i).isNotEmpty())
159 nm <<
" (" << ed.getAuxBusName (i) <<
")";
167void AuxSendPlugin::restorePluginStateFromValueTree (
const juce::ValueTree& v)
169 copyPropertiesToCachedValues (v, gainLevel, busNumber, invertPhase);
171 for (
auto p : getAutomatableParameters())
172 p->updateFromAttachedValue();
static String toString(Type decibels, int decimalPlaces=2, Type minusInfinityDb=Type(defaultMinusInfinitydB), bool shouldIncludeSuffix=true, StringRef customMinusInfinityString={})
void add(String stringToAdd)
bool isNotEmpty() const noexcept
#define TRANS(stringLiteral)
Passed into Plugins when they are being initialised, to give them useful contextual information that ...
The context passed to plugin render methods to provide it with buffers to fill.