3

我读了这篇文章,它解释了如何播放 MIDI。我需要制作一个可以根据用户需求播放 MIDI 序列的 Web 应用程序。这该怎么做?我应该简单地制作一个播放 MIDI 文件的 Silverlight 播放器吗?那么如何将文件传输到播放器呢?或者,也许有一种方法可以与客户端的 MIDI 系统进行交互。

注意:我需要创建 MIDI 序列,它不是来自我的服务器的准备好的文件(或者应该先创建它们)。

任何方法都将受到欢迎。

4

1 回答 1

2

首先,应该非常清楚的是,MIDI 文件本身并不是以与 MP3 相同的方式“播放”的。MIDI 文件中没有实际的音乐;相反,它们只包含应由合成乐器演奏的音符。

我不确定 silverlight 是否有内置的 MIDI 合成器(就像 QuickTime 一样,如果您将 MIDI 文件拖到它上面),并且一些快速的谷歌搜索似乎证实了这个假设

因此,如果您要对任意 MIDI 数据进行排序,并且没有能力首先将其反弹到 MP3,那么您应该在服务器端生成声音。如果您有权访问 .NET 后端服务器,则可以使用VST.NET 框架创建 VST 主机,通过乐器发送 MIDI,并将生成的音频输出压缩为 MP3。如果您正在使用 Java,那么您可以使用jVSTwRapper,一个类似的库。

在最坏的情况下,您可以将某些东西与 C/C++ 粘合在一起以加载将处理您的声音的 VST 插件。然后可以通过您使用的任何服务器技术将其作为外部进程启动。

但在所有这些方法中,策略基本相同:

  1. 从用户那里获取 MIDI 文件并将其发送到服务器。
  2. 打开将处理声音的VST 插件。
  3. 解析 MIDI 文件中的事件,使用适当的 MIDI 消息将浮点数据块发送到插件。
  4. 从插件中获取输出并将其保存到磁盘的某个地方。
  5. 完成所有这些后,获取输出并通过LAME或其他一些编码框架将其从原始 PCM 转换为 MP3(或其他)。
  6. 将此文件发回给用户。

Note that step 3 is probably the hardest one in this process. There are lots of guides out on the internet about how to make your own VST host, including that one which I wrote. ;)

于 2010-06-21T10:21:02.017 回答