home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / MAGAZINE / MISC / MNFEB91.ZIP / MIDIEX2 < prev    next >
Encoding:
Text File  |  1991-01-26  |  12.6 KB  |  303 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10. The "parameters" may also be usurped by a manufacturer for mode control, 
  11. since their purposes are undefined.
  12.  
  13. Another HUGE problem with the "daisy-chain" mental set of MIDI is that most 
  14. devices ALWAYS shovel whatever they play to their MIDI outs, whether they got 
  15. it from the keyboard or MIDI in. This means that you have to cope with the 
  16. instrument echoing input back at you if you're trying to do an interactive 
  17. session with the synthesizer.  There is DRASTIC need for some MIDI flag which 
  18. specifically means that only locally generated data is to go to MIDI out.  
  19. From device to device there are ways of coping with this, none of them good.
  20.  
  21. <<
  22.  
  23.  
  24.  
  25. SYSTEM MESSAGES
  26.  
  27. The status bytes 0x80 - 0x8f do not have channel numbers in the lower nibble.  
  28. These bytes are used as follows:
  29.  
  30. byte    purpose              data bytes
  31.  
  32. 0xf0    system exclusive     variable length
  33. 0xf1    undefined
  34. 0xf2    song position        2 - 14 bit value, least significant byte
  35.                                  first
  36. 0xf3    song select          1 - song number
  37. 0xf4    undefined
  38. 0xf5    undefined
  39. 0xf6    tune request         0
  40. 0xf7    EOX (terminator)     0
  41.  
  42. The status bytes 0xf8 - 0xff are the so-called "real-time" messages. I will 
  43. discuss these after the accumulated notes concerning the first bunch.
  44.  
  45. Song position / song select are for control of sequencers.  The song position 
  46. is in beats, which are to be interpreted as every 6 MIDI clock pulses.  These 
  47. messages determine what is to be played upon receipt of a "start" real-time 
  48. message (see below).
  49. The "tune request" is a command to analog synthesizers to tune their 
  50. oscillators.
  51.  
  52. The system exclusive message is intended for manufacturers to use to insert 
  53. any specific messages they want to which apply to their own product.  The 
  54. following data bytes are all to be "data" bytes, that is they are all to be 
  55. in the range 0 - 127.  The system exclusive is to be terminated by the 0xf7 
  56. terminator byte.  The first data byte is also supposed to be a 
  57. "manufacturer's id", assigned by a MIDI standards committee.  THE TERMINATOR 
  58. BYTE IS OPTIONAL - a system exclusive may also be "terminated" by the status 
  59. byte of the next message.
  60.  
  61. >>
  62.  
  63. Yamaha, in particular, caused problems by not sending terminator bytes.  As I 
  64. understand it, the DX-7 sends a system exclusive at something like 80 msec. 
  65. intervals when it has nothing better to do, just so you know it's still 
  66. there, I guess.  The messages aren't explicitly terminated, so if you want to 
  67. handle the protocol (esp. in hardware), you should be aware that a DX-7 will 
  68. leave you in "waiting for EOX" state a lot, and be sending data even when it 
  69. isn't doing anything.  This is all word of mouth, since I've never personally 
  70. played with a DX-7.
  71.  
  72. <<
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80. some MIDI ID's:
  81.  
  82.         Sequential Circuits   1      Bon Tempi     0x20     Kawai     0x40
  83.         Big Briar             2      S.I.E.L.      0x21     Roland    0x41
  84.         Octave / Plateau      3                             Korg      0x42
  85.         Moog                  4      SyntheAxe     0x23     Yamaha    0x43
  86.         Passport Designs      5
  87.         Lexicon               6
  88.  
  89.     PAIA                  0x11
  90.     Simmons               0x12
  91.     Gentle Electric       0x13
  92.     Fairlight             0x14
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99. >>
  100.  
  101. Note the USA / Europe / Japan grouping of codes.  Also note that Sequential 
  102. Circuits snarfed id number 1 - Sequential Circuits was one of the earliest 
  103. participators in MIDI, some people claim its originator.
  104.  
  105. Two large makers missing from the original lineup were Casio and Oberheim.  I 
  106. know Oberheim is on the bandwagon now, and Casio also, I believe.  Oberheim 
  107. had their own protocol previous to MIDI, and when MIDI first came out they 
  108. were reluctant to go along with it.  I wonder what we'd be looking at if 
  109. Oberheim had pushed their ideas and made them the standard.  From what I 
  110. understand they thought THEIRS was better, and kind of sulked for a while 
  111. until the market forced them to go MIDI.
  112.  
  113. Nobody seems to care much about these ID numbers.  I can only imagine them 
  114. becoming useful if additions to the standard message set are placed into 
  115. system exclusives, with the ID byte to let you know what added protocol is 
  116. being used.  Are any groups of manufacturers considering consolidating their 
  117. efforts in a standard extension set via system exclusives?
  118.  
  119. <<
  120.  
  121. REAL TIME MESSAGES.
  122.  
  123. This is the final group of status bytes, 0xf8 - 0xff.  These bytes are 
  124. reserved for messages which are called "real-time" messages because they are 
  125. allowed to be sent ANYPLACE.  This includes in between data bytes of other 
  126. messages.  A receiver is supposed to be able to receive and process (or 
  127. ignore) these messages and resume collection of the remaining data bytes for 
  128. the message which was in progress.  Realtime messages do not affect the 
  129. "running status byte" which might be in effect.
  130.  
  131. Do any devices REALLY insert these things in the middle of other messages?
  132.  
  133. All of these messages have no data bytes following (or they could get 
  134. interrupted themselves, obviously).  The messages:
  135.  
  136. 0xf8   timing clock
  137. 0xf9   undefined
  138. 0xfa   start
  139. 0xfb   continue
  140. 0xfc   stop
  141. 0xfd   undefined
  142. 0xfe   active sensing
  143. 0xff   system reset
  144.  
  145. The timing clock message is to be sent at the rate of 24 clocks per quarter 
  146. note, and is used to sync. devices, especially drum machines.
  147.  
  148. Start / continue / stop are for control of sequencers and drum machines.  The 
  149. continue message causes a device to pick up at the next clock mark.
  150.  
  151. >>
  152.  
  153. These things are also designed for performance, allowing control of 
  154. sequencers and drum machines from a "master" unit which sends the messages 
  155. down the line when its buttons are pushed.
  156.  
  157. I can't tell you much about the trials and tribulations of drum machines.  
  158. Other folks can, I am sure.
  159.  
  160. <<
  161.  
  162. The active sensing byte is to be sent every 300 ms. or more often, if it is 
  163. used.  Its purpose is to implement a timeout mechanism for a receiver to 
  164. revert to a default state.  A receiver is to operate normally if it never 
  165. gets one of these, activating the timeout mechanism from the receipt of the 
  166. first one.
  167.  
  168. >>
  169.  
  170. My impression is that active sensing is largely unused. <<
  171.  
  172. The system reset initializes to power up conditions.  The spec. says that it 
  173. should be used "sparingly" and in particular not sent automatically on power 
  174. up.
  175.  
  176.  
  177.  
  178.  
  179.                       AND NOW, CLIMBING TO THE PULPIT ....
  180.  
  181.  
  182.  
  183. >> - from here on out.
  184.  
  185. There are many deficiencies with MIDI, but it IS a standard.  As such, it 
  186. will have to be grappled with.
  187.  
  188. The electrical specification leaves me with only one question - WHY? What was 
  189. wanted was a serial interface, and a perfectly good RS232 specification was 
  190. to be had.  WHY wasn't it used?  The baud rate is too fast to simply convert 
  191. into something you can feed directly to
  192.  
  193. your serial port via fairly dumb hardware, also.  The "standard" baud rate 
  194. step you would have to use would be 38.4 Kbaud which very few hardware 
  195. interfaces accept.  The other alternative is to buffer messages and send them 
  196. out a slower baud rate - in fact buffering of characters by some kind of I/O 
  197. processor is very helpful.  Hence units like the MPU-401, which does a lot of 
  198. other stuff, too of course.
  199.  
  200. The fast baud rate with MIDI was set for two reasons I believe:
  201.  
  202.         1) to allow daisy-chaining of a few devices with no noticeable
  203.                 end to end lag.
  204.  
  205.         2) to allow chords to be played by just sending all the notes down
  206.                 the pipe, the baud rate being fast enough that they will
  207.                 sound simultaneous.
  208.  
  209. It doesn't exactly work - I've heard gripes concerning end to end lag on 
  210. three instrument chains.  And consider chords - at two bytes (running status 
  211. byte being used) per note, there will be a ten character lag between the 
  212. trailing edges of the first and last notes of a six note chord.  That's 3.2 
  213. ms., assuming no "dead air" between characters.  It's still pretty fast, but 
  214. on large chords with voices possessing distinctive attack characteristics, 
  215. you may hear separate note beginnings.
  216.  
  217.  
  218.  
  219.  
  220. I think MIDI could have used some means of packetizing chords, or having 
  221. transaction markers.  If a "chord" message were specified, you could easily 
  222. break even on byte count with a few notes, given that we assume all notes of 
  223. a chord at the same velocity.  Transaction markers might be useful in any 
  224. case, although I don't know if it would be worth taking over the remaining 
  225. system message space for them.  I would say yes.  I would see having "start" 
  226. and "end" transaction bytes.  On receipt of a "start" a receiver buffers up 
  227. but does not act on messages until receipt of the "end" byte.  You could then 
  228. do chords by sending the notes ahead of time, and precisely timing the "end" 
  229. marker.  Of course, the job of the hardware in the receiver has been 
  230. complicated considerably.
  231.  
  232. The protocol is VERY keyboard oriented - take a look at the use of TWO of the 
  233. opcodes in the limited opcode space for "pressure" messages, and the 
  234. inability to specify semitones or glissando effects except through the pitch 
  235. wheel (which took up yet ANOTHER of the opcodes). All keyboards I know of 
  236. modify ALL playing notes when they receive pitch wheel data.  Also, you have 
  237. to use a continuous stream of pitch wheel messages to effect a slide, the 
  238. pitch wheel step isn't standardized, and on a slide of a large number of 
  239. tones you will overrun the range of the wheel.
  240.  
  241. Some of these problems would be addressed by a device which allowed its pitch 
  242. wheel to have selective control - say modifying only the notes playing on the 
  243. channel the pitch wheel message is received in, for instance.  The thing for 
  244. a guitar synthesizer to do, then, would be to use mode 4, one channel per 
  245. string, and bends would only affect the one note.  You could play a chord on 
  246. a voice with a lot of release, then bend a note and not have the entire still 
  247. sounding chord bend.  Any such devices?
  248.  
  249. I think some of the deficiencies in MIDI might be addressed by different 
  250. communities of interest developing a standard set of system exclusives which 
  251. answer the problem.  One perfect area for this, I think, is a standard set 
  252. for representation of "non- keyboard / drum machine" instruments which have 
  253. continuous pitch capabilities.  Like a pedal steel, for instance.  Or 
  254. non-western intervals.  Like a sitar.
  255.  
  256. There is a crying need to do SOMETHING about the "loopback" problem. I would 
  257. even vote for usurping a few more bytes in the mode messages to allow you to 
  258. TURN OFF input echo by the receiver.  With the local control message, you 
  259. could then at least deal with something that would act precisely like a half 
  260. or full duplex terminal. .More..Several patchwork solutions exist to this 
  261. problem, but there OUGHT to be a standard way of doing it within the 
  262. protocol.  Another thought is to allow data bytes of other than 0 or 127 to 
  263. control echo on the existing local control message.
  264.  
  265. The lack of acknowledgement is a problem.  Another candidate for a standard 
  266. system exclusive set would be a series of messages for mode setting with 
  267. acknowledgement.  This set could then also take care of the loopback problem.
  268.  
  269. The complete lack of ability to specify standardized waveforms is probably 
  270. another source of intense disappointment to many readers. Trouble is, the 
  271. standard lingo used by the synthesizer industry and most working musicians is 
  272. something which hails back to the first days of synthesizer design, deals 
  273. with envelope generators and filters and VCO / LFO hardware parameters, and 
  274. is very damn difficult to relate to Fourier series expressing the harmonic 
  275. content or any other abstractions some people interested in doing computer 
  276. composition would like.  The parameter set used by the average synthesizer 
  277. manufacturer isn't anyplace close to orthogonal in any sense, and is bound to 
  278. vary wildly n comparison to anybody elses.  Ther are essentially no 
  279. abstractions made by most of the industry from underlyin hardwre prameers.  
  280. hat tandarizaton exits refects only the similarity in hardware.  This is one 
  281. quagmire that we have a long way to go to get out of, I think.  It might be 
  282. possible, eventually, to come up with translation tables describing the best 
  283. way to approximate a desired sound on a given device in terms of its 
  284. parameter set, but the difficulties are enormous.  MIDI has chosen to punt on 
  285. this one, foks.
  286.  
  287. Well that's abot it.  Good luck with talking to your synthesizer.
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.                                Written by Bob McQueer       <MCQUEER>
  303.