Windows 秘話ジョイスティックは電子レンジである必要はない

Raymond Chen

最近、 同僚のブログ「The Audio Fool」の投稿を読んでいて、今でも頭を悩ませている数年前の失敗について思い出しました。それは DirectInput® フォース フィードバック ジョイスティック インターフェイスの開発が進められているときで、提案中のインターフェイスの詳細について話し合い、各社のフィードバック (だじゃれではありません) を得るために、ジョイスティック メーカー各社をワシントン州レドモンドにあるマイクロソフトのオフィスに招いたときのことでした。

会議中、さまざまな問題が徹底的な討議によって解決されましたが、今でも私の頭から離れないことが 1 つあります。それは周期的フォースを間隔として表現するか、周波数として表現するかに関する意見の相違でした。あるベンダの代表者は、彼の会社では既に周期的フォースを周波数で指定するドライバを作成しており、このドライバを変更することは受け入れがたいと騒ぎ立てていました。これが、新しいインターフェイスの詳細について討議し、意見をまとめるための会議だったことを考えると、自社のドライバを変更しないでも済む状態で会議を後にできると期待する方が無理な話ではないでしょうか。

しかし、このベンダがあまりに騒ぐので、私たちもついに折れて、周期的フォースの指定単位に間隔ではなく周波数を使用することで同意しました。結局、どちらになっても大きな問題ではなかったのです。周波数で 1 秒間に 10 回と表現されるフォースは、間隔で表現すると 1/10 秒に 1 回となります。つまり、間隔と周波数は単純な反比例の関係にあるということです。

おっと、これは必ずしもそうとは限りません。間隔はミリ秒で表され、ダイナミック レンジは 1 ミリ秒から 50 日までです。人間の時間の尺度からすると 50 日というのは短い期間であり、1 ミリ秒にいたってはあまりに短いため、周期現象としては記録されず、音として知覚されます。

一方、周波数はヘルツで表され、ダイナミック レンジは 1 秒につき 1 ヘルツから 400 億ヘルツまでです。ジョイスティックから音楽が再生されるのは違和感がありますか。電子レンジの周波数帯にまで届くフォースを生成すると考えてください。

問題は、周波数範囲の上限の周波数を表現する事実上使い物にならない力は、下限の周波数を犠牲にすることで実現されているということです。フライト シミュレータでは、比較的長い間隔での周期的フォースがよく使われているそうです。その物理学的な背景はわかりませんが、パイロットが対処しなければならない現象の 1 つは、操縦桿におよそ数分間という長い間隔で周期的にかかる力だと聞いています。飛行機は性質上、非常にゆっくりと垂直方向の正弦波形を描いて飛行する傾向があるため、パイロットは水平飛行を維持できるよう、この傾向に対処する必要があります。周期フォースが間隔で表現されるのであれば、フライト シミュレータ プログラムでは 120,000 ミリ秒と指定できます。しかし、周波数の場合は 0.0083 ヘルツとなり、ドライバ インターフェイスで表現できる最も遅い周波数 (1 ヘルツ) よりも大幅に遅くなります。したがって、フライト シミュレータが要求できる最も遅いフォースは 1 秒間に 1 回発生するフォースであり、フライト シミュレータが再現しようとする物理的な現象と比べると依然としてかなり短い間隔です。

この問題は、ここ数年にわたり私を悩ませ続けているので、フォース フィードバックに関するドキュメントを最近見直してみました。驚いたことに、DIPERIODIC 構造体は、周期的エフェクトの表現に、周波数ではなく間隔を使用しているようなのです (しかも、マイクロ秒を使用していますから、音楽を再生できるだけでなく、飛行機も操縦できることになります)。誤りが修正されたのか、もうろくしてしまい自分の記憶にいたずらされたのでしょう。いずれにしても、この問題について私はもう頭を悩ませる必要はなくなりました。将来、まかり間違ってこんなことが起こったとしても。

Raymond Chen は自分の Web サイト「The Old New Thing」および同じタイトルの書籍 (Addison-Wesley、2007 年) で、Windows の歴史と Win32 プログラミングについて扱っています。あの色は彼に似合っていますね。

© 2008 Microsoft Corporation and CMP Media, LLC. All rights reserved; 許可なしに一部または全体を複製することは禁止されています.