[comp.sys.mac.programmer] Apple MIDI Driver

saf@floyd.ATT.COM (Steve Falco,14D-327,4865,ATTBL) (02/22/90)

I have looked at the requirements for useing Apple's MIDI driver
and there is one annoying item: all outgoing data packets
must be "sanitized."  Thus an application cannot use optimizations
like "running status" nor can system exclusives be mixed with
other data.

This might be fine for new programs built from the ground up but is a
pain for existing programs which must be converted.

Has anyone found a "raw" mode whereby arbitrary data can be written?

Also, since Apple can sanitize data coming in from a synthesizer, there
should be a way to force the same clean-up routines to filter data from
an application, relieving the application of the hassles of doing its
own sanitizing.

Steven A. Falco   AT&T Bell Labs   (201) 386-4865   saf@floyd.att.com

nick@lfcs.ed.ac.uk (Nick Rothwell) (02/26/90)

In article <4260@cbnewsl.ATT.COM>, saf@floyd (Steve Falco,14D-327,4865,ATTBL) writes:
>all outgoing data packets
>must be "sanitized."  Thus an application cannot use optimizations
>like "running status" nor can system exclusives be mixed with
>other data.
>
>This might be fine for new programs built from the ground up but is a
>pain for existing programs which must be converted.

I don't see why this is any problem (I converted my code quite
easily). Could you elaborate?

>Steven A. Falco   AT&T Bell Labs   (201) 386-4865   saf@floyd.att.com

		Nick.
--
Nick Rothwell,	Laboratory for Foundations of Computer Science, Edinburgh.
		nick@lfcs.ed.ac.uk    <Atlantic Ocean>!mcvax!ukc!lfcs!nick
~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~
      A prop?   ...or wings?      A prop?   ...or wings?      A prop?

rich@sendai.sendai.ann-arbor.mi.us (K. Richard Magill) (02/27/90)

In article <2477@castle.ed.ac.uk> nick@lfcs.ed.ac.uk (Nick Rothwell) writes:

   In article <4260@cbnewsl.ATT.COM>, saf@floyd (Steve Falco,14D-327,4865,ATTBL) writes:
   >all outgoing data packets
   >must be "sanitized."  Thus an application cannot use optimizations
   >like "running status" nor can system exclusives be mixed with
   >other data.
   >
   >This might be fine for new programs built from the ground up but is a
   >pain for existing programs which must be converted.

   I don't see why this is any problem (I converted my code quite
   easily). Could you elaborate?

It's a pain because existing mac software expects a byte stream
driver.  Guessing that the only reason midi manager guaranteed
sanitization was because it required sanitization on input, I just
converted tjt's keynote2 (with saf's midi driver hacked for
multifinder) to simply queue each byte into midi manager as received
(if midi manager is available, otherwise I default to the hacked
saf's driver).  My guess was that midi manager didn't enforce
sanitization, and that few applications were generating unsanitized
streams.

The result is that output is fine, but input doesn't arrive in a
timely enough manner to be useful.  ie, I get all the bytes but not
with useful (locally generated) timestamps.  I'll have to hack into a
higher level such that keynote uses the timestamps on the midi manager
packets.  Sanitization is still an outstanding question in my mind.

rich@dante.sendai.ann-arbor.mi.us (K. Richard Magill) (02/27/90)

In article <4260@cbnewsl.ATT.COM> saf@floyd.ATT.COM (Steve Falco,14D-327,4865,ATTBL) writes:

   Has anyone found a "raw" mode whereby arbitrary data can be written?

Just do it.  ie, send one byte packets.  Seems to work on output.  My
guess is that the sanitization guarantee comes from requesting all
input to be sanitized.  that is, midi manager doesn't *enforce*
sanitization.  If your application isn't producing sanitized, this
approach will probably break other midi manager clients.  It may break
them anyway.

   Also, since Apple can sanitize data coming in from a synthesizer,
   there should be a way to force the same clean-up routines to filter
   data from an application, relieving the application of the hassles
   of doing its own sanitizing.

Looks like this is only done in the apple midi driver and thus isn't
exactly a midi manager function.  Still, you have a point.