我自己解决了,俗话说的好啊,靠谁不如靠自己,把解决办法转发在这里,留给需要的朋友吧。
由两个时钟所带来的问题
所有的 MIDI 接口所发送给 Windows 的 MIDI 信号,都会被 Windows 标上时间,然后再提供给应用软件,以避免应用软件不能立即识别输入音符等等问题。软件从 Windows 的记录里提取事件,做一个迅速的运算,然后得出一个“延迟补偿”时间,把所有的 MIDI 数据都提前。
但是,Windows 提供了两种不同的时间记录方式,一个叫做 TimeGetTime(简称TGT),另一个叫 QueryPerformanceCounter(简称QPC)。后者更精确。但是后者只在新的 Windows 里才有。
而 VST 技术和 ASIO 技术却是基于 TGT 的。
很多老的 Windows MIDI 驱动,更喜欢使用 TGT ,而这正是 Nuendo / Cubase 使用的。而新的驱动,尤其是在 DirectMusic 下写的驱动,更喜欢用 QPC 。而 QPC 与 TGT 是不同步的,因此如果你的 MIDI 驱动是使用 QPC 的,那么你的 Nuendo / Cubase 很可能就有时间问题了。
为什么 Sonar 没有这个问题呢?这是因为 Sonar 有一个隐藏选项:忽略所有的 Windows 加上去的时间记录,也就是说 Sonar 是自己标记时间,而不管 Windows 。
解决办法:
Nuendo 和 Cubase 2.2 提供了一个选项在 DirectMusic 设置里,“Use system timestamp”。这个选项仅对你的 MIDI 驱动是 DirectMusic 驱动时才有作用。当你不选时,Nuendo / Cubase 就不理会 Windows 所标记的时间,而是自己标记时间(象 Sonar 那样),选上时,就从 Windows 里读取时间记录。但请注意,这个设置仅对 DirectMusic 驱动才有效。而 Sonar 的这个选项是对 DirectMusic 和 Windows MIDI 都有效。