【问题标题】:Play MIDI on client thru web?通过网络在客户端播放 MIDI?
【发布时间】:2010-06-21 08:20:23
【问题描述】:

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

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

欢迎任何方法。

【问题讨论】:

    标签: .net silverlight midi


    【解决方案1】:

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

    我不确定 silverlight 是否有内置的 MIDI 合成器(就像 QuickTime 一样,如果您将 MIDI 文件拖到它上面),还可以快速搜索一下 seems to confirm this hypothesis

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

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

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

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

    请注意,第 3 步可能是此过程中最难的一步。互联网上有很多关于how to make your own VST host 的指南,包括我写的那个。 ;)

    【讨论】:

    • 别误会,用户不应该提交任何midi,他只会告诉(通过UI)他想要播放什么,服务器的引擎应该生成midi。换句话说,用户甚至不应该知道它是 MIDI,而且,它不必是同步的,即用户做出他的选择然后点击“播放”,然后我必须生成 mid,录制到 mp3 并上传回来给客户。
    • 最好的想法是在服务器上生成可播放的波形(或 mp3 或其他)并在客户端播放。这样我也可以确保声音总是像在服务器中配置的一样,即使用户有一个糟糕的 MIDI 设备。问题是:1)这种转换需要多长时间? 2)我该怎么做,你知道任何转换工具吗?类似于以下内容:数据(音符、速度等)-> 服务器上的 MIDI 播放器-> MIDIWave 引擎-> 在客户端播放生成的波形文件。我也想选择下载中间文件。
    • 我不是说用户直接上传 MIDI 文件;大概您的用户界面正在记笔记并从中生成 MIDI 事件。无论哪种方式,如果您要进行服务器端 MIDI->MP3 转换,您将不得不在某些时候处理 MIDI 文件。 ;)
    • 关于您的其他问题: 1. 这在很大程度上取决于您使用的仪器。我建议您首先尝试在真正的音序器中使用的所有插件,以更好地了解服务器 CPU 要求。 2.这个问题有点超出了这里的范围,但我看到你已经根据你的问题对你需要做什么有了更好的了解:stackoverflow.com/questions/3087277
    • 我做了更多的研究。我不想给用户原始的 MIDI,或者至少这不是我想要给他留下深刻印象的东西。我想拥有我的虚拟 MIDI,它的声音字体非常出色,并且不依赖于客户端 midi kazoo。所以我实际上需要一个 MIDI 服务器,它可以一次播放(必须播放流式音频,因为用户必须能够停止/暂停/恢复/搜索等)许多流。
    猜你喜欢
    • 2013-08-29
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多