97 bool isMemberChannel (
int midiChannel) noexcept;
104 bool isMasterChannel (
int midiChannel)
const noexcept;
123 void setPressureTrackingMode (TrackingMode modeToUse);
126 void setPitchbendTrackingMode (TrackingMode modeToUse);
129 void setTimbreTrackingMode (TrackingMode modeToUse);
138 virtual void processNextMidiEvent (
const MidiMessage& message);
147 virtual void noteOn (
int midiChannel,
int midiNoteNumber,
MPEValue midiNoteOnVelocity);
155 virtual void noteOff (
int midiChannel,
int midiNoteNumber,
MPEValue midiNoteOffVelocity);
165 virtual void pitchbend (
int midiChannel,
MPEValue pitchbend);
173 virtual void pressure (
int midiChannel,
MPEValue value);
182 virtual void timbre (
int midiChannel,
MPEValue value);
189 virtual void sustainPedal (
int midiChannel,
bool isDown);
196 virtual void sostenutoPedal (
int midiChannel,
bool isDown);
202 void releaseAllNotes();
206 int getNumPlayingNotes() const noexcept;
213 MPENote getNote (
int index) const noexcept;
219 MPENote getNote (
int midiChannel,
int midiNoteNumber) const noexcept;
226 MPENote getMostRecentNote (
int midiChannel) const noexcept;
233 MPENote getMostRecentNoteOtherThan (
MPENote otherThanThisNote) const noexcept;
253 virtual void noteAdded (
MPENote newNote) = 0;
258 virtual void notePressureChanged (
MPENote changedNote) = 0;
267 virtual void notePitchbendChanged (
MPENote changedNote) = 0;
272 virtual void noteTimbreChanged (
MPENote changedNote) = 0;
281 virtual void noteKeyStateChanged (
MPENote changedNote) = 0;
288 virtual void noteReleased (
MPENote finishedNote) = 0;
293 void addListener (
Listener* listenerToAdd);
296 void removeListener (
Listener* listenerToRemove);
318 void enableLegacyMode (
int pitchbendRange = 2,
322 bool isLegacyModeEnabled() const noexcept;
325 Range<
int> getLegacyModeChannelRange() const noexcept;
328 void setLegacyModeChannelRange (
Range<
int> channelRange);
331 int getLegacyModePitchbendRange() const noexcept;
334 void setLegacyModePitchbendRange (
int pitchbendRange);
346 uint8 lastPressureLowerBitReceivedOnChannel[16];
347 uint8 lastTimbreLowerBitReceivedOnChannel[16];
348 bool isMemberChannelSustained[16];
359 TrackingMode trackingMode = lastNotePlayedOnChannel;
360 MPEValue lastValueReceivedOnChannel[16];
365 LegacyMode legacyMode;
366 MPEDimension pitchbendDimension, pressureDimension, timbreDimension;
368 void updateDimension (
int midiChannel, MPEDimension&, MPEValue);
369 void updateDimensionMaster (
bool, MPEDimension&, MPEValue);
370 void updateDimensionForNote (MPENote&, MPEDimension&, MPEValue);
371 void callListenersDimensionChanged (
const MPENote&,
const MPEDimension&);
372 MPEValue getInitialValueForNewNote (
int midiChannel, MPEDimension&)
const;
374 void processMidiNoteOnMessage (
const MidiMessage&);
375 void processMidiNoteOffMessage (
const MidiMessage&);
376 void processMidiPitchWheelMessage (
const MidiMessage&);
377 void processMidiChannelPressureMessage (
const MidiMessage&);
378 void processMidiControllerMessage (
const MidiMessage&);
379 void processMidiResetAllControllersMessage (
const MidiMessage&);
380 void handlePressureMSB (
int midiChannel,
int value) noexcept;
381 void handlePressureLSB (
int midiChannel,
int value) noexcept;
382 void handleTimbreMSB (
int midiChannel,
int value) noexcept;
383 void handleTimbreLSB (
int midiChannel,
int value) noexcept;
384 void handleSustainOrSostenuto (
int midiChannel,
bool isDown,
bool isSostenuto);
386 const MPENote* getNotePtr (
int midiChannel,
int midiNoteNumber)
const noexcept;
387 MPENote* getNotePtr (
int midiChannel,
int midiNoteNumber) noexcept;
388 const MPENote* getNotePtr (
int midiChannel, TrackingMode)
const noexcept;
389 MPENote* getNotePtr (
int midiChannel, TrackingMode) noexcept;
390 const MPENote* getLastNotePlayedPtr (
int midiChannel)
const noexcept;
391 MPENote* getLastNotePlayedPtr (
int midiChannel) noexcept;
392 const MPENote* getHighestNotePtr (
int midiChannel)
const noexcept;
393 MPENote* getHighestNotePtr (
int midiChannel) noexcept;
394 const MPENote* getLowestNotePtr (
int midiChannel)
const noexcept;
395 MPENote* getLowestNotePtr (
int midiChannel) noexcept;
396 void updateNoteTotalPitchbend (MPENote&);
398 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MPEInstrument)