问题标签 [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.
javascript - WebMidi.js 输出为空
我正在尝试使用WebMidi.js在浏览器中播放音符。我正在使用下面的代码,该代码主要取自快速入门指南。
当我加载页面时,它说 WebMidi 已启用,但输出数组为空。我怎样才能得到包来检测我的输出?我在 Mac 上使用 Chrome——我的软件是最新的。
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 值,而我想将它们一起应用。
关于如何克服这个问题的任何想法?
javascript - 如何使用 Web MIDI 处理设备插拔?
我正在开发一个在线乐谱阅读培训师,这里有一个原型。我能够实现对以前连接的 MIDI 键盘的访问,但是,我正在努力实现热插拔场景。
我的最后一次拍摄是这样的:
在调试时,所有的 Promise 都会用好看的参数调用,但我无法接收到任何按键消息。此外,console.log( Opened ${midiInput.name}
) 的调用次数也比预期的要多:
(所有这些都是在我刚刚打开控制器后打印出来的)。有什么提示吗?
javascript - 为什么在 Tone.js 中 triggerRelease 没有 note 参数?
我正在使用 web midi 从我的 midi 控制器播放音符。我想要一种听到它们的方式,所以我正在使用 Tone.js。
我看到它有两种实时播放的方法: https ://github.com/Tonejs/Tone.js/wiki/Instruments
但是他们不是忘记了triggerRelease中的note参数吗?它怎么知道要发布什么注释?
我还看到有一个 triggerAttackAndRelease ,但是当我从 MIDI 控制器播放时这对我没有帮助,因为我不知道什么时候会发布。
javascript - 关于数组和按键功能的误解和问题
我的目标是将一个 midi 设备连接到我的计算机上,以便在 p5.js 中创建和操作形状。我还在学习代码,所以有一些关于数组和键的问题。
有没有办法说如果 noteC、noteE 和 noteG 中的任何值被触发然后“发生了什么事”?但是在某种组合中,这是一个和弦,而不是说noteD和noteE,它不是一个和弦。
本质上,我试图通过正在播放的和弦来操纵形状,但我不知道“noteC + noteE + noteG”是否会做任何事情。
例如:
要做到没有和弦,我想它会是这样的:
但是,将形状与任何和弦组合分开手动转换感觉是静态的,如果正在演奏和弦,我希望在操作之间存在关系。
我希望椭圆的比例由正在弹奏的键的速度决定,但如果它是和弦的一部分,则 x 和 y 参数将是相同的。
不要求某人编写代码,但如果有人可以帮助我理解或指出我正确的方向,那就太好了!谢谢!
angular - 使用 RxJS observables 考虑所有输入的 MIDI 设备
我有一种方法可以很好地处理传入的 MIDI 消息。
它监听所有输入设备,而不仅仅是第一个。
我想使用 RxJS observables 来编写它。
这是工作(非 RxJS 可观察)之一:
上述方法工作正常,VMPK 虚拟键盘被视为输入 MIDI 设备并接收其 MIDI 消息。
这是我尝试使用 observables 再次编写它:
使用上述方法,VMPK 虚拟键盘不会被视为输入 MIDI 设备。
此方法包含以下代码行,midiAccess.inputs.values().next().value;
它仅检索第一个输入 MIDI 设备。
如何考虑所有输入 MIDI 设备?
更新:添加一些记录器后,我可以看到VMPK
虚拟键盘被列为输入设备:
我觉得令人费解的是,它的连接在其状态处于连接状态时是关闭的。
这是我记录上述输出的方式:
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
然后构造函数工作正常。
midi - 如何从 MIDI 事件中获取音符及其力度?
我可以使用库解析 MIDI 文件midi-parser-js
并创建一个soundtrack
包含所有轨道及其事件的对象:
我还有一个可以工作的合成器服务,我想向它提供这些 MIDI 音符:
如何过滤作为音符的 MIDI 事件?
如何从这样的 MIDI 事件中获得实际的音符及其力度?