[openbeos-midi] Re: Greetings!

  • From: "Martijn Sipkema" <msipkema@xxxxxxxxxxxxxxxxxxx>
  • To: <openbeos-midi@xxxxxxxxxxxxx>
  • Date: Fri, 18 Oct 2002 11:16:02 +0100

> Also note that you don't need a port for each
> BMidiConsumer, and that in some cases you can forego
> IPC altogether! See my reply to Jerome for details.

About not needing a port for each BMidiConsumer.. When I
used to be working on some small MIDI utilities for BeOS
( http://www.bebits.com/devprofile/2011 , note that I've GPLed
the keyboard application, but since the OBOS team doesn't like the
GPL it probably not that interesting... ) I more than once asked
how the midi2 kit is supposed to work. The callbacks for receiving
MIDI are only called when the data is sent atomically IIRC. Thus
sending system exclusive data in several packets does not result
in the callback function for sysex being called. I never was able to
figure out how to handle this, so if you happen to know I'd love to
hear it :).

I've been thinking about doing a "midi kit" for UNIX (as in POSIX
compliant) and I would use message queues for IPC but then I won't
be able to handle arbitrarily large sysex messages. I'm not sure BeOS
ports are able to handle messages of any size, probably not. I'm not
sure how well the midi2 kit handles very large sysex dumps and how
error handling is done.

Another thing about the midi2 kit is the handling of timestamps. Are
timestamps supposed to be monotonically increasing? I suppose not
since more than one producer can connect to a single consumer so the
consumer in general doesn't receive the messages with time ordered
stamps. But in general two kinds of stamps exist. The one where the
message is late and the stamp indicates when it was received (e.g. on a
physical input). And the one where the stamp is in the future indicating
when it is to be transmitted (e.g. on a physical output).

There is nothing in the articles on how timestamps are to be used, but in
practice they should be time ordered, i.e. the application that outputs MIDI
should schedule the messages itself. Should it send them just ahead of time?
or late? Does this mean that the midi2 kit isn't meant to handle 'smart'
interfaces that support some sort of scheduling in hardware?
Also a software synthesizer might want to receive MIDI ahead of time when
getting input from a sequencer so latency can be avoided in that case. I
think the midi2 kit supports this, but maybe it could.


Other related posts: