清空MIDI输出缓冲区

6
使用Web MIDI API,我可以发送一些消息:
// Note on
output.send([0x90, 0x20, 0x50]);

我还可以安排一些消息在未来的时间发出,使其更加适时。
// Note off, 1 second later
output.send([0x80, 0x20, 0x40], performance.now() + 1000);

现在,假设我已经安排了许多消息在未来的几秒钟内发送,现在我想取消发送这些消息。根据规范,我应该能够在输出上调用clear

output.clear();

然而,在Chrome浏览器上这是未定义的(至少在v79版本中是这样)。

Uncaught TypeError: output.clear不是一个函数

我猜这部分功能还没有实现。是这样吗?如果是,是否有一些替代方法可以使用?


你是如何初始化 output 变量的?如果您能发布相关代码将会很有帮助。您还应该指定您正在测试的 Chrome 版本。 - Asesh
@Asesh output 只是一个 MIDIOutput。这可以通过类似于const midi = await navigator.requestMIDIAccess(),然后使用 midi.outputs.values().next().value 这样的方式获得。我没有进行任何特殊处理,也没有使用任何库。这就是Web MIDI API,直截了当。Chrome v79。 - Brad
@Kaiido 就是这个!谢谢你找到它。 :-) 你能把这个回答发一下吗?我会在几天内把赏金转给你......现在先把问题保持开放状态,以防有人知道可行的解决办法。 - Brad
2
发布了一个 CW,请不要把赏金给这个答案,它只回答了问题的一小半。 - Kaiido
1个回答

6

目前尚不可用。您可以关注此问题以获取最新进展。

请注意,Firefox有一个允许Web Midi API的标志,值得一试看他们是否能够处理它。


谢谢!我之前不知道 Firefox 里有 Web MIDI 标志。 - Brad
3
更新:在Firefox中,Web MIDI完全无法使用。 :-( 该标志可能会有一天启用它,但目前似乎只是模拟出来的。更糟糕的是,它可能会被删除。关于此问题的问题跟踪器上存在许多不正确的信息和安全问题。 - Brad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接