在Windows应用商店应用中播放MIDI文件

时间:2014-10-23 12:28:31

标签: windows-runtime windows-store-apps midi naudio

我需要从Windows应用商店应用播放MIDI文件。 (即应用程序本身应该在软件中生成声音 - 我不想将MIDI输出到硬件设备。)

我希望有一些简单的API /库,我可以直接传入文件的位置,也可能传入声音字体,然后调用" play"功能,但我一直无法找到这样的东西。例如FluidSynth看起来像it will do just this,但它没有Windows Store应用的版本。

Microsoft recently introduced一个新的Windows Runtime API for MIDI,但这不包括处理MIDI文件的任何代码。

开源库NAudio 显然包含用于读取MIDI文件的代码,所以我认为我需要实现的是用NAudio打开文件,读入/解析MIDI事件,然后通过新的MIDI预览API通过Microsoft GS Wavetable Synth软件设备播放它们(实现我自己的调度,以便在正确的时间发送消息)。

更新 :用于枚举MIDI端口的Microsoft sample code会在连接时列出USB MIDI设备,但没有连接USB设备报告"没有MIDI端口"。

<子> N.B。示例代码通过将MidiOutPort::GetDeviceSelector的返回值传递到DeviceInformation::FindAllAsync方法来枚举端口。据我所知,这应列出所有可用的MIDI设备。

但是,在同一台计算机上,在桌面应用程序中找到了Microsoft合成器 ,例如通过DirectMusic的EnumPort方法。

这是否意味着Windows应用商店应用没有可用的默认软件合成器?我是否还需要实现自己的合成器?

更新2: 我现在发现来自Microsoft员工的some comments确认WindowsPreview MIDI API不支持默认的软件合成器。

这会有用吗?这是正确的方法吗?是否有一个更简单的方法/ API /第三方库我错过了?

更新3: 看起来NAudio的WinRT版本没有包含MIDI功能,所以我似乎正在构建两个MIDI音序器和合成器从头开始。 (也许在合成器实现中使用NAudio。)

1 个答案:

答案 0 :(得分:2)

这是一个老化问题,但为了完整起见,我想回答有关可用合成器的部分。微软已经通过nuget软件包发布了Microsoft General Midi Wave Table Synth来存储应用程序。它适用于UWP中的新Midi API。您可能还想查看Leslie Sanford的C#Midi Library,以获得基本音序器的良好起点。它通过P / Invoke使用Win32 MM库,但它足以简单地改造新的Midi Api。