【问题标题】:Interfacing a midi keyboard or other real-time midi input with javascript?使用 javascript 连接 midi 键盘或其他实时 midi 输入?
【发布时间】:2011-09-24 18:02:28
【问题描述】:

我想创建一个简单的可视化工具,它可以代表我在屏幕上弹奏 MIDI 键盘。我弹的是一种比较新颖的乐器类型,叫做调和表:

http://en.wikipedia.org/wiki/Harmonic_table_note_layout

http://www.soundonsound.com/newspix/image/axis49.jpg

并且想要构建工具来简化它们的使用并教其他人如何使用它们。

但是,我找不到将 midi 放入 javascript 环境(或者,就此而言,Flash 或 Java)的好方法,而没有大量的 jiggery-pokery 帮助,稍微超出我的能力范围,并且使用来自看起来相当陈旧和废弃的开源项目。无论如何,我都不太热衷于为这个项目工作)。

是否有我错过的合适的库或应用程序可以让我做到这一点?

【问题讨论】:

    标签: javascript midi


    【解决方案1】:

    现在的浏览器支持 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;
            }
    

    查看工作示例here

    【讨论】:

      【解决方案2】:

      Web MIDI API 现在在 Google Chrome 43+ 中是真实的。我什至写了一个库来使它更容易使用。如果您仍然感兴趣并且不在乎它目前仅适用于 Chrome,请查看:https://github.com/cotejp/webmidi

      【讨论】:

        【解决方案3】:

        编辑:

        我最近发布了这个模块 https://github.com/hems/midi2funk 这是一个 node.js 模块,它监听 midi 并通过 socket.io 广播它,所以如果你有幸在本地与客户端一起运行 node.js 服务,你可能会得到从中获得一些乐趣...

        ~~~~~

        其他一些方便的链接,我按我认为对您最重要的内容排序:

        编辑:刚刚意识到线程是旧的,希望链接会帮助某人(:

        【讨论】:

          【解决方案4】:

          由于 Web MIDI API 仍处于草案阶段,因此无法在浏览器中直接访问 MIDI 事件。

          一个简单的解决方法是编写一个小型服务器,您可以在其中注册 MIDI 事件并使用 websocket 将它们传送到您的 javascript。这在 Python 中可以很容易地完成。

          【讨论】:

            【解决方案5】:

            我对即将到来的Web MIDI API 感到非常兴奋。据我所知,它只是在讨论中,还没有进入任何浏览器。

            结合已经开始在部分浏览器中实现的Web Audio API,将有可能在浏览器中进行完整的软件合成。激动人心的时刻。

            【讨论】:

              【解决方案6】:

              我制作了一个 NPAPI 浏览器插件,可让您使用 Javascript 与 MIDI 设备进行通信。

              目前它可以在 Chrome 和 Safari 中的 OSX 以及 Chrome 中的 Windows 上运行。

              我正在努力支持其他浏览器(Firefox、Internet Explorer)和其他操作系统(Linux、Android、iOs)

              见:http://abumarkub.net/abublog/?p=754

              【讨论】:

                【解决方案7】:

                在寻找另一种解决方案时(基于 Flash,使用 Red5 开源 Flash 服务器的功能 - 真的很难看,但此时我很绝望)我发现有人用 Java 完成了我需要的接口与硬件。他们从 Flash 解决方案开始,最近移植到 Javascript。耶!

                http://www.abumarkub.net/abublog/?p=505

                不要让关于“概念证明”的警告让您灰心:基本功能看起来很可靠,至少在我所能提供的一切方面。

                所以现在我正在路上,其他任何想要构建基于 javascript 的 midi 接口/合成器/你有什么的人也是如此。

                我可以在javascript中操作实时midi!这比飞行汽车和喷气靴要好得多。

                【讨论】:

                • 天哪。我爱你。请随时将您的项目链接到某个地方,当我开始进入 Abumarkub 时,我很想看看您是如何使用它的。
                • 我一直被其他东西牵着鼻子走,而且还没有走多远。但我已经考虑了很多,并查看了相关的 javax 库。你愿意合作吗?您可以通过 e l b i z r i dot 等的 user233442 与我联系。
                • @Danny:我有一个您可能感兴趣的类似 Reaktor 的 javascript 工具的概念证明:http//midibiz.firebaseapp.com(Fwiw,Windows canary chrome 实现中有一个错误,但它(大部分)在 Mac 上按预期工作。)
                【解决方案8】:

                大多数浏览器不允许访问除键盘和鼠标之外的任何硬件 - 出于明显的安全原因,因此您不太可能访问 midi 设备,除非它作为这些设备之一插入。

                您可以尝试找到一个驱动程序,将 midi 输出转换为按键,然后在浏览器中处理这些,但这只是单机解决方案。

                【讨论】:

                • 感谢您的回复,但这完全不可行。没有速度,没有触后,没有连续的控制器。幸运的是,在我发布这篇文章几个小时后,我偶然发现了一个可以完全解决我遇到的问题的项目 - 请参阅下面的答案。
                猜你喜欢
                • 2016-09-30
                • 2011-10-19
                • 2021-06-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-01-06
                相关资源
                最近更新 更多