1 #ifndef __MidiPolyphonicExpressionProcessor_h__
2 #define __MidiPolyphonicExpressionProcessor_h__
15 template<
class SynthVoice,
int VOICES>
21 static const uint16_t
TAKEN = 0xffff;
51 uint16_t minval = USHRT_MAX;
54 for(
int i=0; i<VOICES; ++i){
70 for(
int i=0; i<VOICES; ++i)
103 for(
int i=0; i<VOICES; ++i)
123 float semitones = msb + lsb/100.0f;
170 for(
int i=0; i<VOICES; ++i)
187 for(
int i=0; i<VOICES; ++i)
202 for(
int i=0; i<VOICES; ++i)
209 for(
int i=0; i<VOICES; ++i){
@ MIDI_RPN_PITCH_BEND_RANGE
@ MIDI_RPN_MPE_CONFIGURATION
int16_t getPitchBend()
Get pitch bend value as a signed integer between -8192 and 8191.
uint8_t getControllerValue()
uint8_t getControllerNumber()
uint8_t getPolyKeyPressure()
uint8_t getChannelPressure()
Implementation of MPE (MIDI Polyphonic Expression) message processing.
virtual ~MidiPolyphonicExpressionProcessor()
uint8_t findFreeVoice(MidiMessage msg)
void take(uint8_t ch, MidiMessage msg)
void controlChange(MidiMessage msg)
void releaseVoicesForNote(MidiMessage msg)
void pitchbend(MidiMessage msg)
void channelPressure(MidiMessage msg)
bool isMasterChannel(MidiMessage msg)
MidiPolyphonicExpressionProcessor()
uint8_t getNoteChannel(MidiMessage msg)
void noteOn(MidiMessage msg)
void noteOff(MidiMessage msg)
void polyKeyPressure(MidiMessage msg)
float note_pitchbend_range
static const uint16_t TAKEN
void rpn(uint16_t id, uint8_t msb, uint8_t lsb, MidiMessage msg)
uint16_t allocation[VOICES]
SynthVoice * voice[VOICES]
void setPitchBendRange(float range)
Set pitch bend range in semitones.
float getPitchBendRange()
void controlChange(MidiMessage msg)
void rpn(uint16_t id, uint8_t msb, uint8_t lsb, MidiMessage msg)