midikeys

 


Вчера вечером засел за поиски инфы о программировании MIDI. В блоге SizeCoding уже была размещена инфа и примеры, но для меня непонятно. Гугл вывел на сборники архивов, где нашелся удобный пример - midikeys.com, но без исходника. Скормил файл IDA и начал гонять отладчиком от опроса клавиатуры int 16h. Получил данные, которые отправляются в порт, от этих данных стал искать дальше. Наткнулся на статью и стал искать описание данных.

При нажатии клавиш:

Q: 90 24 3F

W: 90 2B 3F

A: 90 24 5F

M: 90 48 7F

в статье описано:
Note On and Off are each comprised of three bytes
0xnc, 0xkk, 0xvv
Where
n is the command (note on (0x9) or off(0x8))
c is the channel (1 to 16)
kk is the key number (0 to 127, where middle C is key number 60)
vv is the striking velocity (0 to 127)

Значения key number такие:

Далее, при нажатии клавиш "-" и "+" меняется Program Number. Отладчик вывел на байты  C0 24
Описание говорит:

Program Change (0xC0)
Most synthesizers have patch storage memory, and can be told to change patches using the following command:
0xnc, 0xpp
n is the status (0xc)
c is the channel
pp is the patch number (0-127)
This allows for 128 sounds to be selected, but modern instruments contain many more than 128 patches. Controller #0 is used as an additional layer of addressing, interpreted as a "bank select" command. Selecting a sound on such an instrument might involve two messages: a bank select controller message, then a program change.

patch number нашел в спецификации:

Или попадробнее

Prog # Instrument
1. Acoustic Grand Piano
2. Bright Acoustic Piano
3. Electric Grand Piano
4. Honky-tonk Piano
5. Electric Piano 1
6. Electric Piano 2
7. Harpsichord
8. Clavi
9. Celesta
10. Glockenspiel
11. Music Box
12. Vibraphone
13. Marimba
14. Xylophone
15. Tubular Bells
16. Dulcimer
17. Drawbar Organ
18. Percussive Organ
19. Rock Organ
20. Church Organ
21. Reed Organ
22. Accordion
23. Harmonica
24. Tango Accordion
25. Acoustic Guitar (nylon
26. Acoustic Guitar (steel)
27. Electric Guitar (jazz)
28. Electric Guitar (clean)
29. Electric Guitar (muted
30. Overdriven Guitar
31. Distortion Guitar
32. Guitar harmonics
33. Acoustic Bass
34. Electric Bass (finger)
35. Electric Bass (pick)
36. Fretless Bass
37. Slap Bass 1
38. Slap Bass 2
39. Synth Bass 1
40. Synth Bass 2
41. Violin
42. Viola
43. Cello
44. Contrabass
45. Tremolo Strings
46. Pizzicato Strings
47. Orchestral Harp
48. Timpani
49. String Ensemble 1
50. String Ensemble 2
51. SynthStrings 1
52. SynthStrings 2
53. Choir Aahs
54. Voice Oohs
55. Synth Voice
56. Orchestra Hit
57. Trumpet
58. Trombone
59. Tuba
60. Muted Trumpet
61. French Horn
62. Brass Section
63. SynthBrass 1
64. SynthBrass 2
65. Soprano Sax
66. Alto Sax
67. Tenor Sax
68. Baritone Sax
69. Oboe
70. English Horn
71. Bassoon
72. Clarinet
73. Piccolo
74. Flute
75. Recorder
76. Pan Flute
77. Blown Bottle
78. Shakuhachi
79. Whistle
80. Ocarina
81. Lead 1 (square)
82. Lead 2 (sawtooth)
83. Lead 3 (calliope)
84. Lead 4 (chiff)
85. Lead 5 (charang)
86. Lead 6 (voice)
87. Lead 7 (fifths)
88. Lead 8 (bass + lead)
89. Pad 1 (new age)
90. Pad 2 (warm)
91. Pad 3 (polysynth)
92. Pad 4 (choir)
93. Pad 5 (bowed)
94. Pad 6 (metallic)
95. Pad 7 (halo)
96. Pad 8 (sweep)
97. FX 1 (rain)
98. FX 2 (soundtrack)
99. FX 3 (crystal)
100. FX 4 (atmosphere)
101. FX 5 (brightness)
102. FX 6 (goblins)
103. FX 7 (echoes)
104. FX 8 (sci-fi)
105. Sitar
106. Banjo
107. Shamisen
108. Koto
109. Kalimba
110. Bag pipe
111. Fiddle
112. Shanai
113. Tinkle Bell
114. Agogo
115. Steel Drums
116. Woodblock
117. Taiko Drum
118. Melodic Tom
119. Synth Drum
120. Reverse Cymbal
121. Guitar Fret Noise
122. Breath Noise
123. Seashore
124. Bird Tweet
125. Telephone Ring
126. Helicopter
127. Applause
128. Gunshot


И на сладкое: нажатие пробела отключает звук Отладчик говорит, что используются байты
B0 7B 00

из описания(мало что понятно):
Control Change (0xB0)
These controls send the following message format:
0xnc, 0xcc, 0xvv
n is the status (0xB)
c is the MIDI channel
cc is the controller number (0-127)
vv is the controller value (0-127)

Попробую насинтезировать что-нибудь. Оставлю еще ссылку. Прога тут

Комментарии