Removed pitchBend method using unsigned interface, as it conflicted with the signed. Added macros for min and max, so that it's easier to use.

This commit is contained in:
Francois Best 2012-05-25 14:32:55 +02:00
parent 65b5db2362
commit cfe39e04aa
2 changed files with 9 additions and 20 deletions

View File

@ -299,31 +299,17 @@ void MIDI_Class::sendAfterTouch(byte Pressure,
/*! \brief Send a Pitch Bend message using a signed integer value. /*! \brief Send a Pitch Bend message using a signed integer value.
\param PitchValue The amount of bend to send (in a signed integer format), \param PitchValue The amount of bend to send (in a signed integer format),
between -8192 (maximum downwards bend) between MIDI_PITCHBEND_MIN and MIDI_PITCHBEND_MAX,
and 8191 (max upwards bend), center value is 0. center value is 0.
\param Channel The channel on which the message will be sent (1 to 16). \param Channel The channel on which the message will be sent (1 to 16).
*/ */
void MIDI_Class::sendPitchBend(int PitchValue, void MIDI_Class::sendPitchBend(int PitchValue,
byte Channel) byte Channel)
{ {
unsigned int bend = PitchValue + 8192; unsigned int bend = PitchValue - MIDI_PITCHBEND_MIN;
sendPitchBend(bend,Channel);
} send(PitchBend,(bend & 0x7F),(bend >> 7) & 0x7F,Channel);
/*! \brief Send a Pitch Bend message using an unsigned integer value.
\param PitchValue The amount of bend to send (in a signed integer format),
between 0 (maximum downwards bend)
and 16383 (max upwards bend), center value is 8192.
\param Channel The channel on which the message will be sent (1 to 16).
*/
void MIDI_Class::sendPitchBend(unsigned int PitchValue,
byte Channel)
{
send(PitchBend,(PitchValue & 0x7F),(PitchValue >> 7) & 0x7F,Channel);
} }
@ -1047,7 +1033,7 @@ void MIDI_Class::launchCallback()
// Continuous controllers // Continuous controllers
case ControlChange: if (mControlChangeCallback != NULL) mControlChangeCallback(mMessage.channel,mMessage.data1,mMessage.data2); break; case ControlChange: if (mControlChangeCallback != NULL) mControlChangeCallback(mMessage.channel,mMessage.data1,mMessage.data2); break;
case PitchBend: if (mPitchBendCallback != NULL) mPitchBendCallback(mMessage.channel,(int)((mMessage.data1 & 0x7F) | ((mMessage.data2 & 0x7F)<< 7)) - 8192); break; // TODO: check this case PitchBend: if (mPitchBendCallback != NULL) mPitchBendCallback(mMessage.channel,(int)((mMessage.data1 & 0x7F) | ((mMessage.data2 & 0x7F)<< 7)) + MIDI_PITCHBEND_MIN); break; // TODO: check this
case AfterTouchPoly: if (mAfterTouchPolyCallback != NULL) mAfterTouchPolyCallback(mMessage.channel,mMessage.data1,mMessage.data2); break; case AfterTouchPoly: if (mAfterTouchPolyCallback != NULL) mAfterTouchPolyCallback(mMessage.channel,mMessage.data1,mMessage.data2); break;
case AfterTouchChannel: if (mAfterTouchChannelCallback != NULL) mAfterTouchChannelCallback(mMessage.channel,mMessage.data1); break; case AfterTouchChannel: if (mAfterTouchChannelCallback != NULL) mAfterTouchChannelCallback(mMessage.channel,mMessage.data1); break;

View File

@ -63,6 +63,10 @@
#define MIDI_SYSEX_ARRAY_SIZE 255 // Maximum size is 65535 bytes. #define MIDI_SYSEX_ARRAY_SIZE 255 // Maximum size is 65535 bytes.
#define MIDI_PITCHBEND_MIN -8192
#define MIDI_PITCHBEND_MAX 8191
/*! Type definition for practical use /*! Type definition for practical use
(because "unsigned char" is a bit long to write.. ) (because "unsigned char" is a bit long to write.. )
@ -179,7 +183,6 @@ public:
void sendProgramChange(byte ProgramNumber,byte Channel); void sendProgramChange(byte ProgramNumber,byte Channel);
void sendControlChange(byte ControlNumber, byte ControlValue,byte Channel); void sendControlChange(byte ControlNumber, byte ControlValue,byte Channel);
void sendPitchBend(int PitchValue,byte Channel); void sendPitchBend(int PitchValue,byte Channel);
void sendPitchBend(unsigned int PitchValue,byte Channel);
void sendPitchBend(double PitchValue,byte Channel); void sendPitchBend(double PitchValue,byte Channel);
void sendPolyPressure(byte NoteNumber,byte Pressure,byte Channel); void sendPolyPressure(byte NoteNumber,byte Pressure,byte Channel);
void sendAfterTouch(byte Pressure,byte Channel); void sendAfterTouch(byte Pressure,byte Channel);