Sending MIDI Messages with Stream Buffers
When your application works with stream buffers, it uses the midiStreamOut function to send all (short and long) MIDI messages to the device. To specify stream data blocks, use the MIDIHDR and MIDIEVENT structures. The MIDIHDR structure contains an address of a locked data block, the data-block length, and some assorted flags. The data is stored in the form of MIDIEVENT structures. The system imposes a size limit of 64K on stream buffers.
After you use midiStreamOut to send a stream buffer of data, you must wait until the device driver is finished with the data block before freeing it. If you are sending multiple data blocks, you must monitor the completion of each data block so you know when to send additional blocks. For information about different techniques for monitoring data-block completion, see Managing MIDI Data Blocks.