59. How is pitch bend data transmitted and interpreted by a MIDI synth?
A Pitch bend message is encoded with two 7-bit data bytes (as per the MIDI spec). All MIDI data bytes have a range of 0 thru 127. The MIDI status bytes all have values between 128 and 255, so it is illegal to send data bytes bigger than 127, or they will be misinterpreted as status bytes (note on, note off, controller, etc). So if you want to encode values bigger than 127, the MIDI spec uses two or more data bytes. Pitch Bend uses two data bytes. The 7 bits of the MSB (most significant byte) and the 7 bits of the LSB (least significant byte) are combined to make a 14 bit possible range of values. Fourteen bytes can count from 0 thru 16383. A Pitch Bend of zero is considered to be halfway up in that range, so most software subtracts 8192 from the 'true 14 bit value' to display the pitch end value. That's why most programs, including Band-in-a-Box® and PowerTrack Pro Audio, display the pitch bend range -8192 thru +8191.
There is a pitch bend range controller message that tells a synth how far to stretch a note in response to pitch bend messages. Many synths have a front-panel setting for that if you push enough buttons. The most common setting is +/- 2 semitones, which is the GM standard, but some synths have a default of +/- 3 semitones, and some guitar controllers/synths use +/- 12 semitones. You should probably set the synth to a pitch bend range of +/-2 if you want to play third party files. The pitch bend data is the same number range in all cases (0 thru 16383), but the synth just stretches its pitch a different interval in response to the pitch bend data.
Some synthesizers may ignore the LSB in Pitch Bend messages, and only have 256 actual pitch bend locations. Even if a synth doesn't transmit or receive the LSB, that data value is just treated like it is zero. So if you had a controller that only sends 128 pitch values, the received numbers (if you slowly move the pitch bend wheel up) would be 0, 128, 256... on up to 8191. If you slowly move the pitch bend wheel down, the received numbers would be 0, -128, -256, on down to -8192. A synth which ignores the LSB would pretend that the LSB is always zero, regardless of what value the sequencer is actually transmitting.
Both Pitch Bend data bytes are encoded in each single Pitch Bend message. The MIDI spec also provides for higher-resolution of other controllers if you send two consecutive messages. It is questionable how many synths can respond to hi-res information. The first 32 controllers are MSB's, and the next 32 controllers are LSB equivalents. For instance, in theory you could transmit continuous values 0 thru 16383 for controller 1, if sending message pairs of controller 1 for the MSB, and controller 33 for the LSB. The trick would be finding a synth that does something other than ignore controller 33.