Decimal/Hexadecimal Table (hexadecimal values

are indicated by a following “H”)

MIDI uses 7-bit hexadecimal values to indicate data values and the address and size of exclusive messages. The following table shows the correspondence between decimal and hexadecimal numbers.

+——————+——————++——————+——————++——————+——————++——————+——————+ D H D H D H D H +——————+——————++——————+——————++——————+——————++——————+——————+

0

00H

32

20H

64

40H

96

60H

1

01H

33

21H

65

41H

97

61H

2

02H

34

22H

66

42H

98

62H

3

03H

35

23H

67

43H

99

63H

4

04H

36

24H

68

44H

100

64H

5

05H

37

25H

69

45H

101

65H

6

06H

38

26H

70

46H

102

66H

7

07H

39

27H

71

47H

103

67H

8

08H

40

28H

72

48H

104

68H

9

09H

41

29H

73

49H

105

69H

10

0AH

42

2AH

74

4AH

106

6AH

11

0BH

43

2BH

75

4BH

107

6BH

12

0CH

44

2CH

76

4CH

108

6CH

13

0DH

45

2DH

77

4DH

109

6DH

14

0EH

46

2EH

78

4EH

110

6EH

15

0FH

47

2FH

79

4FH

111

6FH

16

10H

48

30H

80

50H

112

70H

17

11H

49

31H

81

51H

113

71H

18

12H

50

32H

82

52H

114

72H

19

13H

51

33H

83

53H

115

73H

20

14H

52

34H

84

54H

116

74H

21

15H

53

35H

85

55H

117

75H

22

16H

54

36H

86

56H

118

76H

23

17H

55

37H

87

57H

119

77H

24

18H

56

38H

88

58H

120

78H

25

19H

57

39H

89

59H

121

79H

26

1AH

58

3AH

90

5AH

122

7AH

27

1BH

59

3BH

91

5BH

123

7BH

28

1CH

60

3CH

92

5CH

124

7CH

29

1DH

61

3DH

93

5DH

125

7DH

30

1EH

62

3EH

94

5EH

126

7EH

31

1FH

63

3FH

95

5FH

127

7FH

+——————+——————++——————+——————++——————+——————++——————+——————+

D: decimal

H: hexadecimal

*Decimal expressions such as used for MIDI channel, Bank Select, and Program Change will be the value 1 greater than the decimal value given in the above table.

*Since each MIDI byte carries 7 significant data bits, each byte can express a maximum of 128 different values. Data for which higher resolution is required must be transmitted using two or more bytes. For example a value indicated as a two-byte value of aa bbH would have a value of aa x 128 + bb.

*For a signed number (+/-), 00H = -64, 40H = +/-0, and 7FH = +63. I.e., the decimal equivalent will be 64 less than the decimal value given in the above table. For a two-byte signed number, 00 00H = -8192, 40 00H = +/-0, and 7F 7FH = +8191. For example the decimal expression of aa bbH would be aa bbH - 40 00H = (aa x 128 + bb - 64 x 128.

*Hexadecimal notation in two 4-bit units is used for data indicated as “nibbled”. The nibbled two-byte value of 0a 0b H would be a x 16 + b.

<Example 1> What is the decimal equivalent of 5AH?

From the above table, 5AH = 90.

<Example 2> What is the decimal equivalent of the 7-bit hexadecimal values 12 34H?

From the above table, 12H = 18 and 34H = 52

Thus, 18 x 128 + 52 = 2356

<Example 3> What is the decimal equivalent of the nibbled expression 0A 03 09 0DH?

From the above table, 0AH = 10, 03H = 3, 09H = 9, 0DH = 13

Thus, the result is ((10 x 16 + 3) x 16 + 9) x 16 + 13 = 41885

<Example 4> What is the nibbled equivalent of the decimal number 1258?

16 ) 1258

16 ) 78...10

16 ) 4...14

0... 4

From the above table, 0=00H, 4=04H, 14=0EH, 10=0AH

Thus the result is 00 04 0E 0AH

MIDI Implementation

Examples of Actual MIDI Messages

<Example 1> 92 3E 5F

9n is the Note On status and `n' is the MIDI channel number. Since 2H = 2, 3EH = 62, and 5FH = 95, this is a Note On message of MIDI CH = 3, note number 62 (note name D4) and velocity 95.

<Example 2> CE 49

CnH is the Program Change status and `n' is the MIDI channel number. Since EH = 14, and 49H = 73, this is a Program Change message of MIDI CH = 15, Program number 74 (in the GS sound map, Flute).

<Example 3> EA 00 28

EnH is the Pitch Bend Change status and `n' is the MIDI channel number. The 2nd byte (00H=0) is the LSB of the Pitch Bend value, and the 3rd byte (28H=40) is the MSB. However since the Pitch Bend is a signed number with 0 at 40 00H ( = 64 x 128 + 0 = 8192), the Pitch Bend value in this case is

28 00H - 40 00H = 40 x 128 + 0 - (64 x 128 + 0) = 5120 - 8192 = -3072

If we assume that the Pitch Bend Sensitivity is set to two semitones, the pitch will change only -200 cents for a Pitch Bend value of -8192 (00 00H). Thus, this message is specifying a Pitch Bend of -200 x (-3072) / (-8192) = -75 cents on MIDI CH = 11.

<Example 4> B3 64 00 65 00 06 0C 26 00 64 7F 65 7F

BnH is the Control Change status, and `n' is the MIDI channel number. In Control Change messages, the 2nd byte is the controller number, and the 3rd byte is the parameter value. MIDI allows what is known as “running status,” when if messages of the the same status follow each other, it is permitted to omit the second and following status bytes. In the message above, running status is being used, meaning that the message has the following content.

B3 64 00

MIDI CH = 4, RPN parameter number LSB: 00H

(B3)

65

00

MIDI CH = 4, RPN parameter number MSB: 00H

(B3)

06

0C

MIDI CH = 4, parameter value MSB: 0CH

(B3)

26

00

MIDI CH = 4, parameter value LSB: 00H

(B3)

64

7F

MIDI CH = 4, RPN parameter number LSB: 7FH

(B3)

65

7F

MIDI CH = 4, RPN parameter number MSB: 7FH

Thus, this message transmits a parameter value of 0C 00H to RPN parameter number 00 00H on MIDI CH = 4, and then sets the RPN parameter number to 7F 7FH.

The function assigned to RPN parameter number 00 00H is Pitch Bend Sensitivity, and the MSB of the parameter value indicates semitone steps. Since the MSB of this parameter value is 0CH = 12, the maximum width of pitch bend is being set to [+-]12 semitones (1 octave) (GS sound sources ignore the LSB of Pitch Bend Sensitivity, but it is best to transmit the LSB (parameter value 0) as well, so that the message can be correctly received by any device.

Once the parameter number has been set for RPN or NRPN, all subsequent Data Entry messages on that channel will be effective. Thus, it is recommended that after you have made the change you want, you set the parameter number to 7F 7FH (an “unset” or “null” setting). The final (B3) 64 7F (B3) 65 7F is for this purpose.

It is not a good idea to store many events within the data of a song (e.g., a Standard MIDI File song) using running status as shown in <Example 4>. When the song is paused, fast- forwarded or rewound, the sequencer may not be able to transmit the proper status, causing the sound source to misinterpret the data. It is best to attach the proper status byte to all events.

It is also important to transmit RPN or NRPN parameter number settings and parameter

 

values in the correct order. In some sequencers, data events recorded in the same clock (or a

 

nearby clock) can sometimes be transmitted in an order other than the order in which they

 

were recorded. It is best to record such events at an appropriate interval (1 tick at TPQN=96,

Appendices

or 5 ticks at TPQN=480).

 

* TPQN: Ticks Per Quarter Note (i.e., the time resolution of the sequencer)

 

 

 

203

Page 203
Image 203
Roland XP-30 owner manual 203, Examples of Actual Midi Messages