使用JavaScript生成MIDI

9
我想在JavaScript中生成一系列MIDI音符并播放它。许多插件都支持MIDI,但我不知道有任何插件支持"data:" URL。生成MIDI内容并不是什么大问题,但将此内容提供给播放器却很困难。是否有人知道如何做到这一点 - 如果不是普遍的话,至少对于像QuickTime这样的特定插件?

WebMIDI 有帮助吗?https://developer.mozilla.org/zh-CN/docs/Web/API/MIDIAccess - Martynas Jusevičius
5个回答

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开始可能是可行的。这是一个起点。


2

Sergi,你的解决方案似乎没有解决主要问题。如果使用“embed”或“object”,则无法控制播放。QuickTime界面解决了这个问题。您可以从JavaScript完全控制它,甚至可以动态生成和添加内容。而且它可以使用数据URL。这是原始问题的全部重点。 - shurik

1

听起来最简单的方法是将MIDI数据传递给一个PHP脚本,然后返回输入。 然后你可以使用"yourscript.php?your-midi-data"代替"data:your-mini-data"。


1

使用数据URL的QuickTime可以在Firefox和Chrome(最近版本,没有测试版)中使用。您必须按照quicktime网站的说明进行操作:通过调用QT_WriteOBJECT函数初始化QuickTime(我不得不提供指向贝多芬mp3文件的初始有效src,只是为了防止它抱怨 - 也许这不是必要的),根据所述参考注册侦听器,并在获取回调qt_load后调用document.movie1.SetURL(myDataURL)方法。我在数据URL中使用了base64编码:"data:audio/midi;base64,..."。(内容由JavaScript生成)。一切都运行得非常出色:Play(),Stop()等。最困难的部分是阅读他们的巨大文档(请注意,它还有“HTML”部分)


1
链接无效。 - milesaron

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接