从Javascript生成实时MIDI

从Javascript生成实时MIDI,javascript,midi,Javascript,Midi,我做了一些研究,现在Javascript和MIDI似乎不太合拍。至少谷歌是这么说的 如本专题所述: ,可以用Javascript或服务器端创建文件,并像播放普通文件一样播放 但是,我真的希望能够发送单独的midi事件,“现场”,因为这将是一个持续的用户交互。 我想我的计划B是创建一个Java小程序来实现这一点,但这样我的应用程序就不再是纯HTML5了 我还听说HTML5的音频支持现在还不出名,所以我也想知道,如果现在没有解决方案,未来可能的结果是什么 谢谢。如果html5是一个选项,您可以尝试使

我做了一些研究,现在Javascript和MIDI似乎不太合拍。至少谷歌是这么说的

如本专题所述: ,可以用Javascript或服务器端创建文件,并像播放普通文件一样播放

但是,我真的希望能够发送单独的midi事件,“现场”,因为这将是一个持续的用户交互。 我想我的计划B是创建一个Java小程序来实现这一点,但这样我的应用程序就不再是纯HTML5了

我还听说HTML5的音频支持现在还不出名,所以我也想知道,如果现在没有解决方案,未来可能的结果是什么


谢谢。

如果html5是一个选项,您可以尝试使用WebSocket生成osc事件,并使用服务器代理将其转换为midi信号


我不知道javascript中的计时器是否足够稳定以生成准确的计时

我认为目前最好的选择是通过xhr或websockets从HTML应用程序与运行在服务器上的后端系统进行通信,该系统可以实际转换为midi事件。您可能会发现,现有的众多comet服务器中有一台可以让您的生活更轻松,但是许多midi应用程序需要相对较低的延迟,您将很难将comet技术降低到100ms以下。

请参阅本教程的音乐嵌入部分。(出于某种原因,Resig链接到的Mario游戏在Firefox中为我播放声音,而不是Chrome或Safari;值得研究原因)


其思想是,您可以使用将base64编码版本的数据嵌入到HTML文件本身中。那么您可以编写Javascript在中连续生成数据,然后将其注入HTML5
元素

等待,这样我就必须将音乐流式传输到客户端?以这种速度,我不明白为什么我会使用OSC。或者,一旦我在客户端的机器上获得midi信号,我应该将它们发送到哪里:^?osc事件不是流式传输到用户的现场音乐,而是通过udp或tcp传输的控制信号。在桌面上,您可以运行一个小型代理,将osc事件转换为midi信号,然后发送到要控制的midi设备,因此我必须在客户机上安装该代理?我想我不能用Javascript来实现这一点。我不认为用Javascript可以实现这一点-代理必须是在本地机器上运行的应用程序。这并没有真正的帮助,我仍然需要找到一种方法将MIDI事件发送到客户端的操作系统。这就是我已经在做的,以生成整个序列,我想我必须坚持演奏单音符。问题是延迟有点明显,即使它没有那么大。但是我想除了使用Java小程序之外,这是目前最好的解决方案。你能给你的代码贴一个链接吗?可以通过在背景中连续生成音调并创建多个音频元素来填充它们来减少延迟。