It explicitly avoids selecting an MPU-401 device to be the default device.
However, the midiOut API prefers wavetable synthesizer devices (with technology GUID KSMUSIC_TECHNOLOGY_WAVETABLE) when selecting the default (preferred) MIDI playback device. In the absence of an external synthesizer, they are able to play a raw MIDI byte stream through the wavetable synthesizer. Some wavetable synthesizer devices expose themselves to applications as MPU-401 devices (with technology GUID KSMUSIC_TECHNOLOGY_PORT).
#WHAT IS MICROSOFT MIDI MAPPER? DRIVER#
For example, the FmSynth miniport driver assigns the technology GUID KSMUSIC_TECHNOLOGY_FMSYNTH to its pins. The right column of the preceding table indicates the technology GUID that the corresponding miniport driver specifies in its pins' data ranges. The caller specifies one of the driver GUIDs in the following table to specify which miniport driver to instantiate.
#WHAT IS MICROSOFT MIDI MAPPER? DRIVERS#
For examples of data ranges for MIDI and DirectMusic pins, see MIDI Stream Data Range and DirectMusic Stream Data Range.Īs explained in MIDI and DirectMusic Filters, an adapter driver calls the PcNewMiniport function to create an instance of one of the system-supplied miniport drivers in Portcls.sys. A DMus miniport driver identifies a DirectMusic pin by setting the subtype GUID to KSDATAFORMAT_SUBTYPE_DIRECTMUSIC. A MIDI or DMus miniport driver identifies a MIDI pin by setting the subtype GUID in the pin's data ranges to KSDATAFORMAT_SUBTYPE_MIDI. A DirectMusic application can see both MIDI and DirectMusic pins. When enumerating devices, a MIDI application that uses the Windows multimedia midiOut or midiIn API can see MIDI pins, but not DirectMusic pins. For more information about midiOutGetDevCaps and MIDIOUTCAPS, see the Microsoft Windows SDK documentation. The preceding table shows the wTechnology value (center column) corresponding to each technology GUID. The midiOutGetDevCaps function translates the technology GUID that it receives from the driver to an index that it writes to the wTechnology member of the MIDIOUTCAPS structure that it outputs to the caller. The device is a hardware wavetable synthesizer. A miniport driver can set the Technology member to one of the GUID values shown in the following table (left column). This structure's Technology member indicates what type of synthesizer technology the MIDI or DirectMusic device uses.
As described in Pin Factories, the driver specifies this information as an array of one or more data range descriptors, each of which is a structure of type KSDATARANGE_MUSIC.
A MIDI or DMus miniport driver must specify the range of stream formats that each of its pins is capable of handling.