93 bool isMemberChannel (
int midiChannel)
const noexcept;
100 bool isMasterChannel (
int midiChannel)
const noexcept;
108 bool isUsingChannel (
int midiChannel)
const noexcept;
127 void setPressureTrackingMode (TrackingMode modeToUse);
130 void setPitchbendTrackingMode (TrackingMode modeToUse);
133 void setTimbreTrackingMode (TrackingMode modeToUse);
142 virtual void processNextMidiEvent (
const MidiMessage& message);
151 virtual void noteOn (
int midiChannel,
int midiNoteNumber,
MPEValue midiNoteOnVelocity);
159 virtual void noteOff (
int midiChannel,
int midiNoteNumber,
MPEValue midiNoteOffVelocity);
169 virtual void pitchbend (
int midiChannel,
MPEValue pitchbend);
177 virtual void pressure (
int midiChannel,
MPEValue value);
186 virtual void timbre (
int midiChannel,
MPEValue value);
193 virtual void polyAftertouch (
int midiChannel,
int midiNoteNumber,
MPEValue value);
200 virtual void sustainPedal (
int midiChannel,
bool isDown);
207 virtual void sostenutoPedal (
int midiChannel,
bool isDown);
213 void releaseAllNotes();
217 int getNumPlayingNotes() const noexcept;
224 MPENote getNote (
int index) const noexcept;
230 MPENote getNote (
int midiChannel,
int midiNoteNumber) const noexcept;
237 MPENote getMostRecentNote (
int midiChannel) const noexcept;
244 MPENote getMostRecentNoteOtherThan (
MPENote otherThanThisNote) const noexcept;
304 void addListener (Listener* listenerToAdd);
307 void removeListener (Listener* listenerToRemove);
329 void enableLegacyMode (
int pitchbendRange = 2,
333 bool isLegacyModeEnabled() const noexcept;
336 Range<
int> getLegacyModeChannelRange() const noexcept;
339 void setLegacyModeChannelRange (
Range<
int> channelRange);
342 int getLegacyModePitchbendRange() const noexcept;
345 void setLegacyModePitchbendRange (
int pitchbendRange);
357 uint8 lastPressureLowerBitReceivedOnChannel[16];
358 uint8 lastTimbreLowerBitReceivedOnChannel[16];
359 bool isMemberChannelSustained[16];
370 TrackingMode trackingMode = lastNotePlayedOnChannel;
371 MPEValue lastValueReceivedOnChannel[16];
372 MPEValue MPENote::* value;
373 MPEValue& getValue (MPENote& note) noexcept {
return note.*(value); }
376 LegacyMode legacyMode;
377 MPEDimension pitchbendDimension, pressureDimension, timbreDimension;
379 void updateDimension (
int midiChannel, MPEDimension&, MPEValue);
380 void updateDimensionMaster (
bool, MPEDimension&, MPEValue);
381 void updateDimensionForNote (MPENote&, MPEDimension&, MPEValue);
382 void callListenersDimensionChanged (
const MPENote&,
const MPEDimension&);
383 MPEValue getInitialValueForNewNote (
int midiChannel, MPEDimension&)
const;
385 void processMidiNoteOnMessage (
const MidiMessage&);
386 void processMidiNoteOffMessage (
const MidiMessage&);
387 void processMidiPitchWheelMessage (
const MidiMessage&);
388 void processMidiChannelPressureMessage (
const MidiMessage&);
389 void processMidiControllerMessage (
const MidiMessage&);
390 void processMidiResetAllControllersMessage (
const MidiMessage&);
391 void processMidiAfterTouchMessage (
const MidiMessage&);
392 void handlePressureMSB (
int midiChannel,
int value) noexcept;
393 void handlePressureLSB (
int midiChannel,
int value) noexcept;
394 void handleTimbreMSB (
int midiChannel,
int value) noexcept;
395 void handleTimbreLSB (
int midiChannel,
int value) noexcept;
396 void handleSustainOrSostenuto (
int midiChannel,
bool isDown,
bool isSostenuto);
398 const MPENote* getNotePtr (
int midiChannel,
int midiNoteNumber)
const noexcept;
399 MPENote* getNotePtr (
int midiChannel,
int midiNoteNumber) noexcept;
400 const MPENote* getNotePtr (
int midiChannel, TrackingMode)
const noexcept;
401 MPENote* getNotePtr (
int midiChannel, TrackingMode) noexcept;
402 const MPENote* getLastNotePlayedPtr (
int midiChannel)
const noexcept;
403 MPENote* getLastNotePlayedPtr (
int midiChannel) noexcept;
404 const MPENote* getHighestNotePtr (
int midiChannel)
const noexcept;
405 MPENote* getHighestNotePtr (
int midiChannel) noexcept;
406 const MPENote* getLowestNotePtr (
int midiChannel)
const noexcept;
407 MPENote* getLowestNotePtr (
int midiChannel) noexcept;
408 void updateNoteTotalPitchbend (MPENote&);
410 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MPEInstrument)
virtual void notePitchbendChanged(MPENote changedNote)
virtual void noteAdded(MPENote newNote)
virtual void notePressureChanged(MPENote changedNote)
virtual void noteTimbreChanged(MPENote changedNote)
virtual void noteReleased(MPENote finishedNote)
virtual ~Listener()=default
virtual void noteKeyStateChanged(MPENote changedNote)
@ lastNotePlayedOnChannel