【问题标题】:Midi Stream Accuracy?Midi 流精度?
【发布时间】:2014-04-01 21:33:45
【问题描述】:

我目前正在使用 C# 中的算法来实现 MIDI MTC,使用旧的但仍然很好的 Windows 多媒体 API winmm.dll 从属同步。我的软件实际上是混合使用了 midi 流模式(midistreamopen 等)和更典型的 midioutopen、midiinopen 等模式。虽然流本身不能按时间更改以获得同步,但我可以通过使用 midistreamproperty 调用实时更改速度来实现与传入的 MTC 时钟消息的同步。

但是,在更详细地检查了流模式的准确性之后,我对其行为感到有些困惑。特别是,让我们忘记节奏变化和同步,考虑使用 Midi Machine Control 等大约同时启动两台 PC;两台机器都只是简单地运行预加载的中间流,比如定期和周期性的慢节奏。当然,从一开始,节拍中就会有一些偏移,但您不认为这些偏移会随着时间的推移保持相对恒定吗?我认为,从时间上讲,中流模式在许多硬件平台上都是准确的。我认为这两个平台之间不会有太大的偏差。它肯定比更典型的基于定时器的定序器更准确。

我的调查表明,在两个不同硬件平台上运行的两个 MIDI 流之间存在偏差。这不是很大的漂移,但它已经足够不同了,所以在几分钟内你可以听到节拍靠近并分开。两个流都以相同的速度和划分(时间划分)开始。我尝试过各种更慢和更高的节奏和分区。对于我所期望的更极端的参数,漂移似乎更糟,但我不希望在更规范的操作条件下会有很大的变化。我可以通过实时的小节奏变化来克服这个问题,但我更喜欢这种干预最少。我知道这是一个奇怪的问题,可能不会得到很多回应,但我认为值得一试。

【问题讨论】:

  • 您已经实际观察到漂移。你是在问你是否应该相信你说谎的耳朵?
  • 我想这肯定是一种思考方式,但我真正的问题是关于内核流的规范期望是什么?我认为漂移将是流媒体的一个重要考虑因素,它针对音乐再现等精确的实时应用。如果一首歌曲的快慢取决于硬件平台,我认为这是不可接受的。没有我所知道的流模式或任何类型的 PC 流的规格。我预计会有一些偏差,但我不知道什么是关键的、时间相关的流媒体可接受的行为。

标签: stream midi


【解决方案1】:

MTC 不足以保持系统同步。 MTC 封装了基于秒而不是节拍的 SMPTE 时间码。

MMC用于控制start、top、回到开头等

您缺少的部分是MIDI beat clock。它实际上是每四分音符发送 24 次的脉冲(在大多数系统上)。通过此消息,您可以使多个系统几乎完全同步。

另见:http://www.omegastudios.com/blog/bid/306605/Part-2-MIDI-Beat-Clock-and-the-Three-Dimensions-of-Sync

【讨论】:

  • 感谢您的回复。我已经实现了MTC主从、节拍主从和MMC主从。但是,这个问题与他们中的任何一个都无关。我确实使用 MMC 在每台计算机上相对靠近地启动两个流,并在两个流中加载相同的 midi 数据。然后我听从每个流发出的慢拍之间变化的相对差异,以观察两者之间的漂移。
  • @Mark 如果你真的在使用节拍时钟,你不会注意到任何漂移。
【解决方案2】:

好吧,在进行数据研究之后,答案实际上是没有漂移。这是运行在两台不同 PC 上的两个不同 MIDI 流的抖动和漂移的 .pdf 文件,每台 PC 都运行相同的 midi 节拍文件。漂移是 5 分钟内绘制的黑线。抖动很小,但由于 Windows 消息传递而不是由于内核流。

http://mixermuse.com/blog/wp-content/uploads/2014/04/Jitter-and-Drift-Study.pdf

在 pdf 中向下滚动以查看图表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    相关资源
    最近更新 更多