11namespace tracktion {
inline namespace engine
14MidiModifierPlugin::MidiModifierPlugin (PluginCreationInfo info) : Plugin (info)
16 semitones = addParam (
"semitones up",
TRANS(
"Semitones"),
17 { -getMaximumSemitones(), getMaximumSemitones() },
18 [] (
float value) {
return std::abs (value) < 0.01f ?
"(" +
TRANS(
"Original pitch") +
")"
19 : getSemitonesAsString (value); },
21 MidiModifierPlugin::getMaximumSemitones(),
22 s.getFloatValue()); });
24 semitonesValue.referTo (state, IDs::semitonesUp, getUndoManager());
25 semitones->attachToCurrentValue (semitonesValue);
28MidiModifierPlugin::~MidiModifierPlugin()
30 notifyListenersOfDeletion();
32 semitones->detachFromCurrentValue();
35const char* MidiModifierPlugin::xmlTypeName (
"midiModifier");
38juce::String MidiModifierPlugin::getPluginType() {
return xmlTypeName; }
39juce::String MidiModifierPlugin::getShortName (
int) {
return TRANS(
"MIDI Modifier"); }
41void MidiModifierPlugin::deinitialise() {}
42double MidiModifierPlugin::getLatencySeconds() {
return 0.0; }
43int MidiModifierPlugin::getNumOutputChannelsGivenInputs (
int) {
return 0; }
45bool MidiModifierPlugin::takesAudioInput() {
return false; }
46bool MidiModifierPlugin::canBeAddedToClip() {
return false; }
47bool MidiModifierPlugin::needsConstantBufferSize() {
return false; }
57 return TRANS(
"MIDI Modifier Plugin");
60void MidiModifierPlugin::restorePluginStateFromValueTree (
const juce::ValueTree& v)
62 copyPropertiesToCachedValues (v, semitonesValue);
64 for (
auto p : getAutomatableParameters())
65 p->updateFromAttachedValue();
#define TRANS(stringLiteral)
Type jlimit(Type lowerLimit, Type upperLimit, Type valueToConstrain) noexcept
int roundToInt(const FloatType value) noexcept
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.
MidiMessageArray * bufferForMidiMessages
A buffer of MIDI events to process.