零时间 MIDI 事件何时触发?
When does a zero-time MIDI event trigger?
我正在读取 MIDI 文件,但无法确定下一个事件何时触发。
假设我有一个 midi 文件,它有这样的曲目(其中 T=n 是增量时间):
[T=0: Note On, C4] [T=128: Note Off, C4] [T=0: Note On, D4] [T=128: Note Off, D4]
第二个 Note On (D4) 是否与前一个 Note Off (C4) 完全相同 time/tick?还是在下一次报价时触发它?
理论上,这两个事件是同时发生的。
实际上,事件需要一定的时间才能通过 MIDI 发送(三个字节大约需要一毫秒),但是第二个事件会在第一个事件之后尽快发送。
当不涉及实际的 MIDI 电缆时,事件实际上可以同时生效。
所有事件都发生在一个刻度上。但是,由于 MIDI 既是串行协议又是串行硬件,因此一次一个地通过 MIDI 电缆发送它们。这成为发送大量控制器更改消息的设备的问题,最初如 MIDI 吉他控制器。他们只是每秒发送的 MIDI 信息多于电缆可以传输的信息。
在 USB 等替代传输上,这些事件可能会更靠近地发生,但由于它们是连续的,因此它们仍必须一个接一个地发生。那个时间框架可能是无法区分的,(我们希望如此),但总会有微小的滞后。
要让它们在 "same" 时间发生,您必须 a) 缓冲或 b) 让它们发生在不同的地方,就像并行播放器一样,这仍然会导致同步延迟。
我正在读取 MIDI 文件,但无法确定下一个事件何时触发。
假设我有一个 midi 文件,它有这样的曲目(其中 T=n 是增量时间):
[T=0: Note On, C4] [T=128: Note Off, C4] [T=0: Note On, D4] [T=128: Note Off, D4]
第二个 Note On (D4) 是否与前一个 Note Off (C4) 完全相同 time/tick?还是在下一次报价时触发它?
理论上,这两个事件是同时发生的。
实际上,事件需要一定的时间才能通过 MIDI 发送(三个字节大约需要一毫秒),但是第二个事件会在第一个事件之后尽快发送。 当不涉及实际的 MIDI 电缆时,事件实际上可以同时生效。
所有事件都发生在一个刻度上。但是,由于 MIDI 既是串行协议又是串行硬件,因此一次一个地通过 MIDI 电缆发送它们。这成为发送大量控制器更改消息的设备的问题,最初如 MIDI 吉他控制器。他们只是每秒发送的 MIDI 信息多于电缆可以传输的信息。
在 USB 等替代传输上,这些事件可能会更靠近地发生,但由于它们是连续的,因此它们仍必须一个接一个地发生。那个时间框架可能是无法区分的,(我们希望如此),但总会有微小的滞后。
要让它们在 "same" 时间发生,您必须 a) 缓冲或 b) 让它们发生在不同的地方,就像并行播放器一样,这仍然会导致同步延迟。