问题标签 [web-midi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2616 浏览

javascript - 在 React 中播放和操作 MIDI

我需要能够在 React 应用程序中播放 MIDI 文件,并且还需要操作某些东西,例如速度、通道、乐器、移调等。

(改变节奏和激活/停用某些通道可能是这里唯一的硬性要求。)

我正在使用 Lilypond 文件来输入数据并生成 MIDI,因为您似乎可以通过一种可以操作的方式将其输入浏览器。我提到这一点是因为这意味着我可以完全控制生成的 MIDI。

我遇到过像MIDI.jsWebMidi这样的项目,它们似乎提供了一些东西,但是我缺乏一个实际的例子来看看我如何以 React 原生的方式使用任何东西。

我可以将自己的 MIDI 文件以可以播放和操作的方式放入 React 应用程序吗?

0 投票
1 回答
221 浏览

javascript - WebMidi.js 输出为空

我正在尝试使用WebMidi.js在浏览器中播放音符。我正在使用下面的代码,该代码主要取自快速入门指南。

当我加载页面时,它说 WebMidi 已启用,但输出数组为空。我怎样才能得到包来检测我的输出?我在 Mac 上使用 Chrome——我的软件是最新的。

0 投票
0 回答
117 浏览

javascript - WEB MIDI + CSS 变量

我正在尝试连接 MIDI 控制器以通过“font-variation-settings”css 属性直接控制 CSS 变量。

MIDI 控制数据以 UInt8 数组的形式出现,例如 [176,0,127],其中第二个值是控制 ID,第三个值是控制值。

元素的 CSS 如下所示:

字体变化设置:'ABC' 99,'DEF 400;

我已经制定了一个基本实现,我可以使用下面的代码更新 ABC。

messageData.data 是 UInt8 数组

问题是,如果我将它扩展为具有两个变量,例如下面的代码。当我移动第二个 MIDI 控件(控制 DEF)时,它会覆盖 ABC 值,而我想将它们一起应用。

关于如何克服这个问题的任何想法?

0 投票
1 回答
250 浏览

javascript - 如何使用 Web MIDI 处理设备插拔?

我正在开发一个在线乐谱阅读培训师,这里有一个原型。我能够实现对以前连接的 MIDI 键盘的访问,但是,我正在努力实现热插拔场景。

我的最后一次拍摄是这样的:

在调试时,所有的 Promise 都会用好看的参数调用,但我无法接收到任何按键消息。此外,console.log( Opened ${midiInput.name}) 的调用次数也比预期的要多:

 (所有这些都是在我刚刚打开控制器后打印出来的)。有什么提示吗?

0 投票
1 回答
497 浏览

javascript - 如何指定 Web MIDI 通道?

如何使用 MIDI Web API 指定发送 MIDI 消息的通道?

官方文档中的这个示例显示了如何在通道 1 上发送消息。但在代码片段中,我没有找到任何参考。

如何在通道 2 上发送相同的消息?

0 投票
1 回答
223 浏览

javascript - 为什么在 Tone.js 中 triggerRelease 没有 note 参数?

我正在使用 web midi 从我的 midi 控制器播放音符。我想要一种听到它们的方式,所以我正在使用 Tone.js。

我看到它有两种实时播放的方法: https ://github.com/Tonejs/Tone.js/wiki/Instruments

但是他们不是忘记了triggerRelease中的note参数吗?它怎么知道要发布什么注释?

我还看到有一个 triggerAttackAndRelease ,但是当我从 MIDI 控制器播放时这对我没有帮助,因为我不知道什么时候会发布。

0 投票
0 回答
37 浏览

javascript - 关于数组和按键功能的误解和问题

我的目标是将一个 midi 设备连接到我的计算机上,以便在 p5.js 中创建和操作形状。我还在学习代码,所以有一些关于数组和键的问题。

有没有办法说如果 noteC、noteE 和 noteG 中的任何值被触发然后“发生了什么事”?但是在某种组合中,这是一个和弦,而不是说noteD和noteE,它不是一个和弦。

本质上,我试图通过正在播放的和弦来操纵形状,但我不知道“noteC + noteE + noteG”是否会做任何事情。

例如:

要做到没有和弦,我想它会是这样的:

但是,将形状与任何和弦组合分开手动转换感觉是静态的,如果正在演奏和弦,我希望在操作之间存在关系。

我希望椭圆的比例由正在弹奏的键的速度决定,但如果它是和弦的一部分,则 x 和 y 参数将是相同的。

不要求某人编写代码,但如果有人可以帮助我理解或指出我正确的方向,那就太好了!谢谢!

0 投票
2 回答
180 浏览

angular - 使用 RxJS observables 考虑所有输入的 MIDI 设备

我有一种方法可以很好地处理传入的 MIDI 消息。

它监听所有输入设备,而不仅仅是第一个。

我想使用 RxJS observables 来编写它。

这是工作(非 RxJS 可观察)之一:

上述方法工作正常,VMPK 虚拟键盘被视为输入 MIDI 设备并接收其 MIDI 消息。

这是我尝试使用 observables 再次编写它:

使用上述方法,VMPK 虚拟键盘不会被视为输入 MIDI 设备。

此方法包含以下代码行,midiAccess.inputs.values().next().value;它仅检索第一个输入 MIDI 设备。

如何考虑所有输入 MIDI 设备?

更新:添加一些记录器后,我可以看到VMPK虚拟键盘被列为输入设备:

我觉得令人费解的是,它的连接在其状态处于连接状态时是关闭的。

这是我记录上述输出的方式:

0 投票
0 回答
177 浏览

angular - 如何解析上传文件的 MIDI 内容?

我正在从浏览器加载一个文件,我可以看到它的内容以MThd大量乱码不可读字符开头。

现在,这是一个 MIDI.mid文件,我想用Tonejs / midi库解析它。

因此,我编写了以下服务方法:

但这给了我错误:ypeError: _tonejs_midi__WEBPACK_IMPORTED_MODULE_2__.Midi is not a constructor

我认为这是因为rawMidiData参数不是构造函数所期望的正确类型。

事实上,该Midi.d.ts文件显示:

这是我的文件上传器:

更新:一点实验。我添加了以下源代码:

显示了第一个记录器,但没有显示第二个记录器,并且出现了相同的错误。

更新:我使用了错误的阅读器readAsText,当切换到readAsArrayBuffer如中时,fileReader.readAsArrayBuffer(file);我可以将数组缓冲区传递给服务方法。但我仍然有不解决构造函数调用的相同问题:Midi is not a constructor

更新:解决 GitHub问题@tonejs/midi@2.0.5后,我可以使用命令升级到,npm install @tonejs/midi然后构造函数工作正常。

0 投票
1 回答
142 浏览

midi - 如何从 MIDI 事件中获取音符及其力度?

我可以使用库解析 MIDI 文件midi-parser-js

并创建一个soundtrack包含所有轨道及其事件的对象:

我还有一个可以工作的合成器服务,我想向它提供这些 MIDI 音符:

如何过滤作为音符的 MIDI 事件?

如何从这样的 MIDI 事件中获得实际的音符及其力度?