Generate live MIDI from Javascript [closed]

跟風遠走 提交于 2020-01-12 14:13:07

问题


I made some research and it seems that Javascript and MIDI are not going well together these days. At least so Google says.

As stated in this topic: generating MIDI in javascript, it is possible to create a file, either in Javascript or server-side, and play it like one would play a usual file.

But, I really would like to be able to send individual midi events, "live", as it would be a constant user interaction. I guess my plan B would be to create a Java applet that does this, but then my app wouldn't be pure HTML5 anymore.

I also heard HTML5's audio support isn't famous right now, so I also wondered, if no solution is available now, what are the possible future outcomes?

Thanks.


回答1:


See the music embedding portion of this blog post by John Resig. (For some reason, the Mario game that Resig links to plays sound for me in Firefox but not Chrome or Safari; it'd be worth investigating why).

The idea is that you use a data URI to embed a base64 encoded version of your data within the HTML file itself. So you could write Javascript to continuously generate data in the MIDI format, then encode it in base64, and then inject it into an HTML5 <audio> element




回答2:


I believe your best option at the moment is to communicate from your HTML application via an xhr or websockets to a backend system running on your server that can do the actual translation into midi events. You might find that one of the many comet servers that are already available can make this part of your life easier, however many midi applications require relatively low latency, and you'll struggle to get comet techniques down much below 100ms.




回答3:


if html5 is an option, you could try to generate osc events using websockets and convert them to midi signals using a server proxy.

What i don't know is if the timers in javascript are stable enough for generating accurate timings.



来源:https://stackoverflow.com/questions/3390708/generate-live-midi-from-javascript

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!