lv2插件开发——如何同时读取MIDI时间和音符
lv2 plugin development - how to read MIDI time and note simultaneously
我正在使用 Moony 为我正在构建的仅限 MIDI 的 lv2 插件制作一些组件的原型。我一直在尝试找出如何从 noteOn 事件中获取某种歌曲位置值,这意味着我需要知道在调用 midiResponder 时音符所属的节拍和小节。即使是总时间或总帧数也可以计算。 Moony 使用 timeResponder 和 midiResponder 回调的方式意味着我可以知道时间位置或音符……但不能同时知道两者。查看 lv2 midi 规范,看起来只有事件类型、音符编号和速度是 noteOn 事件原子的属性...那么当我用 C++ 重写并将这段代码集成到我的 lv2 插件中时,我会面临同样的问题吗?这是正确的吗?有解决办法吗?
您在此处查看的规范描述了 LV2 MIDI 事件的有效负载,即 MIDI。时间戳可用,但它位于包含 MIDI 的(通用)事件中。这样,所有 事件都带有时间戳(在相对于缓冲区的帧中),而不管它们的负载类型如何。
如果您用 C++ 编写此代码,您将获得一个事件缓冲区,其中包括时间更改、MIDI 事件以及插件可能支持的任何其他事件。因此,所有信息都可用,但管理此状态以使其在您需要的地方可用取决于您。
我正在使用 Moony 为我正在构建的仅限 MIDI 的 lv2 插件制作一些组件的原型。我一直在尝试找出如何从 noteOn 事件中获取某种歌曲位置值,这意味着我需要知道在调用 midiResponder 时音符所属的节拍和小节。即使是总时间或总帧数也可以计算。 Moony 使用 timeResponder 和 midiResponder 回调的方式意味着我可以知道时间位置或音符……但不能同时知道两者。查看 lv2 midi 规范,看起来只有事件类型、音符编号和速度是 noteOn 事件原子的属性...那么当我用 C++ 重写并将这段代码集成到我的 lv2 插件中时,我会面临同样的问题吗?这是正确的吗?有解决办法吗?
您在此处查看的规范描述了 LV2 MIDI 事件的有效负载,即 MIDI。时间戳可用,但它位于包含 MIDI 的(通用)事件中。这样,所有 事件都带有时间戳(在相对于缓冲区的帧中),而不管它们的负载类型如何。
如果您用 C++ 编写此代码,您将获得一个事件缓冲区,其中包括时间更改、MIDI 事件以及插件可能支持的任何其他事件。因此,所有信息都可用,但管理此状态以使其在您需要的地方可用取决于您。