用javascript连接midi键盘或其他实时midi输入
Interfacing a midi keyboard or other real-time midi input with javascript?
我想创建一个简单的可视化工具,它可以表示我在屏幕上玩midi键盘。我演奏一种相对新颖的乐器类型,称为谐波表:
http://en.wikipedia.org/wiki/Harmonic_table_note_layout
http://www.soundonsound.com/newspix/image/axis49.jpg
并希望构建工具来简化它们的使用,并教会他人如何使用它们。
然而,我找不到一个好的方法让midi进入javascript环境(或者,就这一点而言,如果没有我力所能及的大量技巧,以及使用看起来相当陈旧和废弃的开源项目中的代码,Flash或Java(。无论如何,这两种语言我都不太热衷于为这个项目工作(。
是否有我错过的合适的库或应用程序,使我能够做到这一点?
在四处寻找另一个解决方案(基于Flash,使用Red5开源闪存服务器的功能-真的很难看,但我现在很绝望(时,我发现有人使用Java与硬件接口做了我需要的事情。他们从flash解决方案开始,最近移植到了Javascript。耶!
http://www.abumarkub.net/abublog/?p=505
不要让关于"概念验证"的警告让你气馁:基本功能看起来很扎实,至少我能做到的一切都很扎实。
所以现在我正在路上,其他想要构建基于javascript的midi接口/synths/what的人也在路上。
我可以用javascript操作实时midi!这比飞行汽车和喷气靴要好得多。
我制作了一个NPAPI浏览器插件,可以让你用Javascript与MIDI设备进行通信。
目前,它在Chrome和Safari的OSX上运行,在Chrome的Windows上运行。
我正在为其他浏览器(Firefox、Internet Explorer(和其他操作系统(Linux、Android、iOs(提供支持
请参阅:http://abumarkub.net/abublog/?p=754
编辑:
我最近发布了此模块https://github.com/hems/midi2funk它是一个node.js模块,可以监听midi并通过socket.io进行广播,所以如果你有幸与客户端一起在本地运行node.js服务,你可能会从中获得一些乐趣…
~~~~
其他一些方便的链接,我订购了我认为对你来说最重要的东西:
-
midibridge.js-用于与MIDI设备交互的Javascript API
-
javascript 中的midi.js排序
-
jasmid-一个Javascript MIDI文件读取器和合成器
-
第二个网页midi-api工作草案公布-11/12/2012
-
Jazz Soft-用于浏览器的MIDI输入/输出PLUGIN
edit:刚刚意识到这个线程很旧,希望这些链接能帮助到一些人(:
Web MIDI API现在在Google Chrome 43+中是真实的。我甚至写了一个库,让它更容易使用。如果你仍然感兴趣,并且不在乎它目前只在Chrome中工作,请查看:https://github.com/cotejp/webmidi
如今浏览器支持MIDI监听。你只需要
navigator.requestMIDIAccess().then(requestMIDIAccessSuccess, requestMIDIAccessFailure);
和监听键
function requestMIDIAccessSuccess(midi) {
var inputs = midi.inputs.values();
for (var input = inputs.next(); input && !input.done; input = inputs.next()) {
console.log('midi input', input);
input.value.onmidimessage = midiOnMIDImessage;
}
midi.onstatechange = midiOnStateChange;
}
请参阅此处的工作示例
出于明显的安全原因,大多数浏览器都不允许访问除键盘和鼠标之外的任何硬件,因此除非将midi设备作为这些设备之一插入,否则您不太可能访问它。
你可以尝试找到一个驱动程序,将midi输出转换为按键,然后在浏览器中处理这些问题,但这只是一个单一的计算机解决方案。
我对即将推出的WebMIDI API感到非常兴奋。据我所知,它只是在讨论中,还没有进入任何浏览器。
结合已经开始在某些浏览器中实现的Web Audio API,将有可能在浏览器中进行完整的软件合成。激动人心的时刻。
由于Web MIDI API仍然是一个草案,因此无法在浏览器中直接访问MIDI事件。
一个简单的解决方法可以是编写一个小型服务器,在其中注册MIDI事件,并使用websocket将它们与javascript通信。这在Python中可以很容易地完成。
- 如何添加浮动和非浮动,其他
- 与其他库的jQuery.noConflict()
- 播放当前视频时如何停止其他视频?JavaScript
- 剑道UI内联编辑:如何在点击其他按钮时隐藏按钮
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- 除修剪外的其他功能
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- Array.length似乎不起作用;console.log则显示其他情况
- 如何消除代码中的未定义和其他问题
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- Jquery未定义函数正在停止其他操作
- 如何将我的javascript库公开给其他客户端使用
- Javascript阻止其他Javascript代码
- chart.series[id].remove()无法刷新高位图表/高位股票中其他系列的图例属性
- 如何“;过滤器”;或者以其他方式重构该数据
- java脚本在Chrome和其他浏览器中对LocaleTimeString的不同行为
- jQuery:暂停按钮可以暂停所有其他操作
- 用javascript连接midi键盘或其他实时midi输入