Windows 机密操纵杆无需是微波

Raymond Chen

我最近在读 一个同事所写的博客“the Audio Fool”,它使我想起多年前犯下的一个困扰我很久的错误。当年,DirectInput® 力反馈操纵杆接口即将推出,我们邀请操纵杆制造商到华盛顿雷德蒙的 Microsoft 办公室,讨论提议的接口细节并请他们提供自己的一些反馈(这可不是话里有话呀)。

在那些会议中,许多问题经过商讨后得到了解决,但令我印象非常深刻的一个问题是,大家对周期力应以周期表示还是频率表示有所分歧。在场的一位供应商争论个不休,因为他们公司已编写好了以频率指定周期力的驱动程序,他不希望对此进行更改。想想吧,这是商讨全新接口细节的会议,供应商怎能期望会后不必对自己的驱动程序进行任何更改呢?

但由于这位供应商的强烈坚持,最终我们只得屈服了,同意使用频率而非周期来指定周期力的速率。毕竟,使用哪种表示方式实际上没有太大关系。频率为每秒振动 10 次的力与周期为 1/10 秒的力相同。周期和频率是互逆的。

唬!但实际并非完全如此。周期以毫秒表示,其动态范围是从 1 毫秒到 50 天之间的任何时间。50 天的周期对人们来说不算长,而 1 毫秒的周期就更是太快了,以致于未被视为一种周期现象,而被视为乐音。

另一方面,频率以赫兹表示,其动态范围是 1 Hz 到每秒 40 亿个周期。是否觉得使用操纵杆播放音乐非常奇怪?设想一下生成频率属于微波频带内的力是什么样子!

问题在于,这种力表示方法的频率范围上限实际上毫无用处,而频率范围下限却不足以表示最小频率。研究结果表明,模拟飞行游戏就非常热衷于使用周期相对较长的周期力。我不了解这背后的物理原理,但有人告诉我,这样一来,飞行员就必须要处理一种效应 — 每隔几分钟控制杆上就会出现一个慢速周期力。飞机的自然趋势是沿着非常缓慢的垂直正弦波轨迹飞行,因此飞行员必须采取措施来抵消此趋势以保持水平飞行。如果力的速率按周期表示,则模拟飞行程序可指定周期为 120,000 毫秒。但如果用频率表示,对应的频率为 0.0083 赫兹,远远低于驱动程序接口中所能表示的 1 Hz 的最慢频率。因此,模拟飞行所能要求的速率最小的力就是每秒重复一次的力,但这相对于模拟飞行想要模拟的实际效果而言仍然相当快。

因为这些年来这个问题一直困扰着我,所以最近我前去查阅了相关的力反馈文档。令我吃惊的是,文档显示 DIPERIODIC 结构竟然是使用周期而不是使用频率来表示周期效应的。(此外,为了便于测量,它使用的是微秒,这意味着现在既可以播放音乐,也可以驾驶飞机。)也许是错误事后得到了修正?也许是我年高忘事,记忆对我开了个大玩笑?无论如何,我再也不用担心这个错误了 — 不管这个错误曾经是否真正发生过。

Raymond Chen 的网站“The Old New Thing”及同名著作 (Addison-Wesley, 2007) 均讲述了 Windows 的历史发展情况及 Win32 编程。那种风格应该非常适合您。

© 2008 Microsoft Corporation 与 CMP Media, LLC.保留所有权利;不得对全文或部分内容进行复制.