用javascript连接midi键盘或其他实时midi输入

Interfacing a midi keyboard or other real-time midi input with javascript?

本文关键字:midi 其他 实时 输入 键盘 javascript 连接      更新时间:2023-09-26

我想创建一个简单的可视化工具,它可以表示我在屏幕上玩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中可以很容易地完成。