I'm working on a new low level MIDI API and would like some comments on the ideas I have for it.
- In contrast to the ALSA RawMidi API, it should not provide writing/reading raw (unchanged) MIDI data to an interface. Some interfaces might not support this, e.g MWPP. - It would allow only one application to have an input or output open at a time since merging is nontrivial. - For output there should be 3 modes: * immediate - Used to send a MIDI command immediately. * scheduled - Used for having a MIDI command transmitted in the near future. Events should be scheduled in time order. Not for long term scheduling. Both modes should be non-blocking and allow a minimum number of commands to be queued (128). A command has a maximum length of 8 bytes (for realtime sysex). Drop/drain functionality as in ALSA RawMidi is not available since it might not be supported by all interfaces. * sysex - For sending large, time uncritical system exclusive messages. System exclusive messages are sent in segments of a maximum size. Two functions, one (non-blocking) for adding a segment to the queue, one for waiting until completion of a segment. This allows for streaming sysex. - Input of MIDI messages would be done from a high priority callback function. - This should be implemented using IPC. I'd appreciate any comments on this. --martijn
