97 bool isMemberChannel (
int midiChannel)
const noexcept;
104 bool isMasterChannel (
int midiChannel)
const noexcept;
112 bool isUsingChannel (
int midiChannel)
const noexcept;
131 void setPressureTrackingMode (TrackingMode modeToUse);
134 void setPitchbendTrackingMode (TrackingMode modeToUse);
137 void setTimbreTrackingMode (TrackingMode modeToUse);
146 virtual void processNextMidiEvent (
const MidiMessage& message);
155 virtual void noteOn (
int midiChannel,
int midiNoteNumber,
MPEValue midiNoteOnVelocity);
163 virtual void noteOff (
int midiChannel,
int midiNoteNumber,
MPEValue midiNoteOffVelocity);
173 virtual void pitchbend (
int midiChannel,
MPEValue pitchbend);
181 virtual void pressure (
int midiChannel,
MPEValue value);
190 virtual void timbre (
int midiChannel,
MPEValue value);
197 virtual void polyAftertouch (
int midiChannel,
int midiNoteNumber,
MPEValue value);
204 virtual void sustainPedal (
int midiChannel,
bool isDown);
211 virtual void sostenutoPedal (
int midiChannel,
bool isDown);
217 void releaseAllNotes();
221 int getNumPlayingNotes() const noexcept;
228 MPENote getNote (
int index) const noexcept;
234 MPENote getNote (
int midiChannel,
int midiNoteNumber) const noexcept;
241 MPENote getMostRecentNote (
int midiChannel) const noexcept;
248 MPENote getMostRecentNoteOtherThan (
MPENote otherThanThisNote) const noexcept;
308 void addListener (Listener* listenerToAdd);
311 void removeListener (Listener* listenerToRemove);
333 void enableLegacyMode (
int pitchbendRange = 2,
337 bool isLegacyModeEnabled() const noexcept;
340 Range<
int> getLegacyModeChannelRange() const noexcept;
343 void setLegacyModeChannelRange (
Range<
int> channelRange);
346 int getLegacyModePitchbendRange() const noexcept;
349 void setLegacyModePitchbendRange (
int pitchbendRange);
361 uint8 lastPressureLowerBitReceivedOnChannel[16];
362 uint8 lastTimbreLowerBitReceivedOnChannel[16];
363 bool isMemberChannelSustained[16];
374 TrackingMode trackingMode = lastNotePlayedOnChannel;
375 MPEValue lastValueReceivedOnChannel[16];
376 MPEValue MPENote::* value;
377 MPEValue& getValue (MPENote& note) noexcept {
return note.*(value); }
380 LegacyMode legacyMode;
381 MPEDimension pitchbendDimension, pressureDimension, timbreDimension;
383 void updateDimension (
int midiChannel, MPEDimension&, MPEValue);
384 void updateDimensionMaster (
bool, MPEDimension&, MPEValue);
385 void updateDimensionForNote (MPENote&, MPEDimension&, MPEValue);
386 void callListenersDimensionChanged (
const MPENote&,
const MPEDimension&);
387 MPEValue getInitialValueForNewNote (
int midiChannel, MPEDimension&)
const;
389 void processMidiNoteOnMessage (
const MidiMessage&);
390 void processMidiNoteOffMessage (
const MidiMessage&);
391 void processMidiPitchWheelMessage (
const MidiMessage&);
392 void processMidiChannelPressureMessage (
const MidiMessage&);
393 void processMidiControllerMessage (
const MidiMessage&);
394 void processMidiResetAllControllersMessage (
const MidiMessage&);
395 void processMidiAfterTouchMessage (
const MidiMessage&);
396 void handlePressureMSB (
int midiChannel,
int value) noexcept;
397 void handlePressureLSB (
int midiChannel,
int value) noexcept;
398 void handleTimbreMSB (
int midiChannel,
int value) noexcept;
399 void handleTimbreLSB (
int midiChannel,
int value) noexcept;
400 void handleSustainOrSostenuto (
int midiChannel,
bool isDown,
bool isSostenuto);
402 const MPENote* getNotePtr (
int midiChannel,
int midiNoteNumber)
const noexcept;
403 MPENote* getNotePtr (
int midiChannel,
int midiNoteNumber) noexcept;
404 const MPENote* getNotePtr (
int midiChannel, TrackingMode)
const noexcept;
405 MPENote* getNotePtr (
int midiChannel, TrackingMode) noexcept;
406 const MPENote* getLastNotePlayedPtr (
int midiChannel)
const noexcept;
407 MPENote* getLastNotePlayedPtr (
int midiChannel) noexcept;
408 const MPENote* getHighestNotePtr (
int midiChannel)
const noexcept;
409 MPENote* getHighestNotePtr (
int midiChannel) noexcept;
410 const MPENote* getLowestNotePtr (
int midiChannel)
const noexcept;
411 MPENote* getLowestNotePtr (
int midiChannel) noexcept;
412 void updateNoteTotalPitchbend (MPENote&);
414 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MPEInstrument)
Holds a resizable array of primitive or copy-by-value objects.
Holds a set of objects and can invoke a member function callback on each object in the set with a sin...
Derive from this class to be informed about any changes in the expressive MIDI notes played by this i...
virtual void notePitchbendChanged(MPENote changedNote)
Implement this callback to be informed whenever a currently playing MPE note's pitchbend value change...
virtual void noteAdded(MPENote newNote)
Implement this callback to be informed whenever a new expressive MIDI note is triggered.
virtual void notePressureChanged(MPENote changedNote)
Implement this callback to be informed whenever a currently playing MPE note's pressure value changes...
virtual void noteTimbreChanged(MPENote changedNote)
Implement this callback to be informed whenever a currently playing MPE note's timbre value changes.
virtual void noteReleased(MPENote finishedNote)
Implement this callback to be informed whenever an MPE note is released (either by a note-off message...
virtual ~Listener()=default
Destructor.
virtual void noteKeyStateChanged(MPENote changedNote)
Implement this callback to be informed whether a currently playing MPE note's key state (whether the ...
This class represents an instrument handling MPE.
TrackingMode
The MPE note tracking mode.
@ highestNoteOnChannel
The highest note (by initialNote) on the channel with the note key still down.
@ lowestNoteOnChannel
The lowest note (by initialNote) on the channel with the note key still down.
@ lastNotePlayedOnChannel
The most recent note on the channel that is still played (key down and/or sustained).
This class represents a single value for any of the MPE dimensions of control.
This class represents the current MPE zone layout of a device capable of handling MPE.
Encapsulates a MIDI message.
#define JUCE_API
This macro is added to all JUCE public class declarations.
This struct represents a playing MPE note.