72 void noteOff (
int noteNumber,
int midiChannel = -1);
78 bool isLegacy =
false;
79 std::unique_ptr<MPEZoneLayout::Zone> zone;
80 int channelIncrement, numChannels, firstChannel, lastChannel, midiChannelLastAssigned;
86 int lastNotePlayed = -1;
87 bool isFree()
const noexcept {
return notes.
isEmpty(); }
89 MidiChannel midiChannels[17];
92 int findMidiChannelPlayingClosestNonequalNote (
int noteNumber) noexcept;
106 static const uint32 notMPE = 0;
121 void remapMidiChannelIfNeeded (
MidiMessage& message, uint32 mpeSourceID) noexcept;
125 void reset() noexcept;
128 void clearChannel (
int channel) noexcept;
131 void clearSource (uint32 mpeSourceID);
136 int channelIncrement;
137 int firstChannel, lastChannel;
139 uint32 sourceAndChannel[17];
144 bool applyRemapIfExisting (
int channel, uint32 sourceAndChannelID,
MidiMessage& m) noexcept;
145 int getBestChanToReuse() const noexcept;
150 bool messageIsNoteData (const
MidiMessage& m) {
return (*m.getRawData() & 0xf0) != 0xf0; }
void noteOff(int noteNumber, int midiChannel=-1)
MPEChannelAssigner(MPEZoneLayout::Zone zoneToUse)
bool isEmpty() const noexcept
int findMidiChannelForNewNote(int noteNumber) noexcept