我们正在添加支持我们应用程序中各种MIDI控制器设备的支持。从我们使用midiInOpen
的试验中,似乎只有一个应用程序可以使用midiInOpen
访问MIDI输入设备。试图打开MIDI设备的第二个应用程序失败,错误MMSYSERR_NOMEM
。
但是,我有一个商业应用程序(第三方)的示例,该应用程序与我们的应用程序同时访问了MIDI输入流(使用midiInOpen
)。这表明还有另一种访问MIDI流的方法。
我使用API嗅探器查看API调用,并且此应用程序不使用midiInOpen
。它使用midiInMessage
和midiOutMessage
,并且从API文档中,它们似乎直接与驱动程序进行通信。
我从文档中可以看到,Windows 10中提供了对MIDI的新支持;我尚未尝试与使用midiInOpen
的应用程序一起工作,但是如果可能的话,我需要找到一个与Windows 7及更高版本一起使用的解决方案。
我已经联系了第三方应用程序开发人员,以查看他们是否可以提供帮助。现在。我们的应用程序与他们的应用程序一起工作,但是还有其他使用midiInOpen
访问MIDI数据的应用程序,而我们的应用程序无法与它们的应用程序共存。第一个称为midiInOpen
的应用程序获取MIDI流;第二个电话失败。
所有这些测试都是对Windows 7进行的。我们需要支持7及以上。
我们的Mac版本在这方面工作正常。
某些设备具有具有多客户支持的非标准Winmm驱动程序。但这显然不是这样。
当前,微软在Windows中提供了三个MIDI API:
- Winmm Midi功能(
midiInOpen
等), - DirectMusic API和
- Windows 10 UWP MIDI API。
显然,3 rd -party应用程序使用DirectMusic。