89 bool isLowerZone()
const noexcept {
return lowerZone; }
90 bool isUpperZone()
const noexcept {
return ! lowerZone; }
92 bool isActive()
const noexcept {
return numMemberChannels > 0; }
94 int getMasterChannel()
const noexcept {
return lowerZone ? 1 : 16; }
95 int getFirstMemberChannel()
const noexcept {
return lowerZone ? 2 : 15; }
96 int getLastMemberChannel()
const noexcept {
return lowerZone ? (1 + numMemberChannels)
97 : (16 - numMemberChannels); }
99 bool isUsingChannelAsMemberChannel (
int channel)
const noexcept
101 return lowerZone ? (channel > 1 && channel <= 1 + numMemberChannels)
106 && numMemberChannels ==
other.numMemberChannels
107 && perNotePitchbendRange ==
other.perNotePitchbendRange
108 && masterPitchbendRange ==
other.masterPitchbendRange; }
112 int numMemberChannels;
113 int perNotePitchbendRange;
114 int masterPitchbendRange;
131 void setLowerZone (
int numMemberChannels = 0,
132 int perNotePitchbendRange = 48,
133 int masterPitchbendRange = 2)
noexcept;
136 void setUpperZone (
int numMemberChannels = 0,
137 int perNotePitchbendRange = 48,
138 int masterPitchbendRange = 2)
noexcept;
149 void clearAllZones();
163 void processNextMidiEvent (
const MidiMessage& message);
176 void processNextMidiBuffer (
const MidiBuffer& buffer);
204 Zone lowerZone {
true, 0 };
205 Zone upperZone {
false, 0 };
207 MidiRPNDetector rpnDetector;
208 ListenerList<Listener> listeners;
211 void setZone (
bool,
int,
int,
int)
noexcept;
213 void processRpnMessage (MidiRPNMessage);
214 void processZoneLayoutRpnMessage (MidiRPNMessage);
215 void processPitchbendRangeRpnMessage (MidiRPNMessage);
217 void updateMasterPitchbend (Zone&,
int);
218 void updatePerNotePitchbendRange (Zone&,
int);
220 void sendLayoutChangeMessage();
221 void checkAndLimitZoneParameters (
int,
int,
int&)
noexcept;