【问题标题】:Play a MIDI file in Windows Store app在 Windows 应用商店应用中播放 MIDI 文件
【发布时间】:2014-12-19 02:54:22
【问题描述】:

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

我希望有一些简单的 API/库,我可以在其中传递文件的位置和可能的声音字体,并调用“播放”函数,但我一直找不到这样的东西。例如FluidSynth 看起来像 it will do just this,但它没有适用于 Windows 应用商店应用的版本。

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

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

更新:Microsoft 用于枚举 MIDI 端口的 sample code 列出了连接 U​​SB MIDI 设备,但没有连接 USB 设备时报告“没有 MIDI 端口” .

注意示例代码通过将MidiOutPort::GetDeviceSelector 的返回值传递给DeviceInformation::FindAllAsync 方法来枚举端口。据我所知,这应该列出所有可用的 MIDI 设备。

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

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

更新 2:我现在从 Microsoft 工作人员那里找到 some comments,确认 WindowsPreview MIDI API 不支持默认的软件合成器。

这行得通吗?这是正确的方法吗?有没有我错过的更简单的方法/API/第三方库?

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

【问题讨论】:

  • 显然,确实没有音序器。
  • 你见过this sample吗?
  • @Alovchin 我没有看过那个样本,这肯定很有帮助。谢谢!
  • @Rich 最重要的是在相当高的分辨率下稳定的计时器事件。如果你有这个,制作音序器就不是那么难了。该代码旨在作为参考,您可以解决它的方法之一。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 2012-10-25
    • 2016-03-31
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多