The midiStreamOut function plays or queues a stream (buffer) of MIDI data to a MIDI output device.

MMRESULT midiStreamOut(
  HMIDISTRM hMidiStream,  
  LPMIDIHDR lpMidiHdr,    
  UINT cbMidiHdr          



Handle to a MIDI stream. This handle must have been returned by a call to the midiStreamOpen function. This handle identifies the output device.


Pointer to a MIDIHDR structure that identifies the MIDI buffer.


Size, in bytes, of the MIDIHDR structure.

Return Values

Returns MMSYSERR_NOERROR if successful or an error otherwise. Possible error values include the following.

Value Description
MMSYSERR_NOMEM The system is unable to allocate or lock memory.
MIDIERR_STILLPLAYING The output buffer pointed to by lpMidiHdr is still playing or is queued from a previous call to midiStreamOut.
MIDIERR_UNPREPARED The header pointed to by lpMidiHdr has not been prepared.
MMSYSERR_INVALHANDLE The specified device handle is invalid.
MMSYSERR_INVALPARAM The pointer specified by lpMidiHdr is invalid.


Because the midiStreamOpen function opens the output device in paused mode, you must call the midiStreamRestart function before you can use midiStreamOut to start the playback.

For the current implementation of this function, the buffer must be smaller than 64K.

The buffer pointed to by the MIDIHDR structure contains one or more MIDI events, each of which is defined by a MIDIEVENT structure.


**  Windows NT/2000/XP:** Included in Windows NT 3.1 and later.
**  Windows 95/98/Me:** Included in Windows 95 and later.
**  Header:** Declared in Mmsystem.h; include Windows.h.
**  Library:** Use Winmm.lib.

See Also

Musical Instrument Digital Interface (MIDI), MIDI Functions, midiStreamOpen, MIDIHDR, MIDIEVENT