【发布时间】: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 流的规格。我预计会有一些偏差,但我不知道什么是关键的、时间相关的流媒体可接受的行为。