我想在 javascript 中生成一系列 MIDI 音符,然后播放它。许多插件支持 MIDI,但我不知道任何支持“数据:”URL。生成 MIDI 内容没什么大不了的——但是将这些内容输入播放器才是。任何人都知道如何做到这一点 - 如果不是一般情况下,那么至少对于 QuickTime 这样的特定插件?
5 回答
非常整洁的问题。我最近一直在使用 base64 编码的图像,并且经常使用http://www.greywyvern.com/code/php/binary2base64进行图像编码。我只是尝试转换一个 MIDI 文件并将 base64 文本流转换为 HTML,它在 Firefox 中播放得很好(这让我很惊讶)。这是代码(为简洁起见,删除了 Base64 流):
<embed
autostart="true"
loop="false"
volume="100"
hidden="false"
src="data:audio/x-midi;base64,abc...."
></embed>
我不确定是否可以在 JS 中从二进制图像转换为 base64,但我怀疑可能是从 MIDI 转换。这是一个开始。
您可能想看看我的以下博客文章。它是关于一个库,它可以在客户端完成您正在尝试做的事情。但请注意,浏览器中的跨浏览器 MIDI 再现性并不是真正一致的。
http://sergimansilla.com/blog/dinamically-generating-midi-in-javascript/
听起来最简单的方法是将 MIDI 数据传递给例如 PHP 脚本,然后返回输入。然后你可以使用“yourscript.php?your-midi-data”而不是“data:your-mini-data”。
除了使用 Javascript(参见 Sergi 的帖子)之外,您还可以使用 Java 作为我的 Javascript 到 Java 桥的后备方法,它公开了 MIDI 框架的部分:http: //mudcube7.blogspot.com/2010/08/dynamic-midi -generation-in-browser.html
带有数据 url 的 QuickTime 适用于 Firefox 和 Chrome(最新版本,无测试版)您必须遵循quicktime 网站的说明:通过调用函数初始化 QuickTime QT_WriteOBJECT
(我必须提供指向贝多芬的 mp3 文件的初始有效 src,只是为了防止它抱怨-也许没有必要),按照上述参考中的详细说明注册侦听器,并在获得回调 qt_load 后,调用document.movie1.SetURL(myDataURL)
方法。我在数据 url: 中使用了 base64 编码"data:audio/midi;base64,..."
。(内容由 javascript 生成)。一切都运行得非常好:Play()、Stop() 等。最困难的部分是阅读他们不朽的文档(请注意,它也有“HTML”部分)