- PI.
さん 【2008/03/07(Fri) 00:31:00】
上記の現象、私もVista (Business Edition, RTM)で確認しています。
簡単に調査したところ、DirectX10での勝手な仕様変更(下位互換性が十分でない)が、原因のように思われます。XM7ではDirectX3、XM6ではDirectX5の規格に基づいてキーボード入力まわりを開発しており、実際にDirectX9.0c(Windows XP)までは、WindowsにインストールしているDirectXのバージョンを上げたところで、問題が出ることはありませんでした。
簡単なテストプログラムを利用してテストしたところ、私の環境では右シフトキーを押した場合、次のようなキーコードが発生します。
Vista (DirectX10) 右シフトキーで コード0x00(キーシンボル未定義)が発生
XP (DirectX9.0c) 右シフトキーで コード0x36(DIK_RSHIFT)が発生
現状のXM7,XM6ではDirectX3およびDirectX5の公式ドキュメントを参照して、コード0x36が発生したときに右シフトキーが押されたと解釈するようになっています。またDirectXの基本的設計として、WindowsにインストールしているPCのDirectXバージョンを上げたところで、古いアプリケーションは無変更で動作する"建前"になっています。
他のVista関係のトラブルとして(XM7)
(1)メニューが2行に渡ってしまう
(2)動作中に"逆アセンブル"ウィンドウを開くとハングアップする
この2点を確認しています。もし"ウチのVista環境では、上記3点の問題は発生していない、または一部しか発生していない"という方がいれば、このスレッドでお知らせください。
- 中年初心者
さん 【2008/03/08(Sat) 00:20:46】
ていねいな回答ありがとうございます。
私の設定が間違ってるわけではなさそうなので、ひとまず安心(?)しました。
開発者の方がきちんと作っていても、OS側に互換性の不備があると
不具合が発生するという例だったんですね。もうすぐ Vista の SP1 が
出るそうだし、もしかしたらDirectXの更新でいつのまにか改善されるかも…と
淡い期待を抱きつつ、しばらくは様子見でとりあえずこのまま我慢して使ってみます。
Vista (Home Premium 32bitのOEM版) で、XM7 V3.4 L22 (2008/2/23最新版)を
使い始めて日が浅いので、まだ F-BASIC のマシン語解析とか、他の人の
音楽作品を聞くぐらいしか試してませんが、右シフトキーの件以外では
今のところ何も問題は起きてません。デバッグ関連を色々表示させたり
ブレークポイントで止めてステップ実行したりしてもフリーズせず、
メニューが二行になるようなこともないようです。
余談ですが、PSG音をFM音に重ねたり、FM音同士を微妙にユニゾンさせて音色に
厚みを持たせたりする使い方をしてる曲を試聴してる時に、OPNミュートで
その効果をOn/Offで確認できたりするので、これはとても便利かつ
面白い機能だと思いました。
(でも、どんなに解析を頑張っても、TeamAB に近付くことはムリ…
と、自分のセンスの無さを悟るのであった)
- よ〜かい
さん 【2008/03/10(Mon) 12:39:57】
MSのmsdnサイトから「The November 2007 DirectX SDK」をダウンロードして検証してみました。
アーカイブの中にあるサンプルプログラム(/Samples/C++/DirectInput/Bin/x86/keyboard.exe)では
ME, 2000 Professional(SP4), XP (SP2), Vista Ultimate いずれも
右シフトキー:コード0x36 (DIK_RSHIFT)
が返ってきています。
入力周りでなんらかの不具合の可能性もあるかもしれません。
- PI.
さん 【2008/03/11(Tue) 06:48:25】
情報ありがとうございます。時間に余裕ができたときに、検証してみたいと思います。
ただし、The November 2007 DirectX SDKのリリースノートを見ると、次のように注意書きがあります:
[この DirectX SDK には次のコンポーネントは含まれていません]
* Direct3D8 およびそれ以前の全てのバージョン
* Direct3D RM
* DirectAnimation
* DirectMusic
* DirectInput7 およびそれ以前の全てのバージョン
* DirectPlay
* DirectPlayVoice
* DirectX8 時代の HRESULT 変換ルーチン
* Managed DirectX サンプルとドキュメント
ネックになっているのはDirectInput7以前のAPIに準拠したコードがビルドできないという点です。つまり、現状DirectInput3(XM7)とDirectInput5(XM6)に準拠しているキーボード周りのコードをDirectInput8準拠に書き直せば、この問題が解消できる可能性があります。
また、MicrosoftはDirectInputでゲームなどのリアルタイムアプリケーション向けキーボード・マウス・ジョイスティックなどのセンスAPIを統合的に提供する、というDirectX5(1999年)以来の方針を、ここに来て大きく転換しようとしています。具体的にはキーボード・マウスはWindows XPで新しくサポートされた(=Windows 2000では利用不可)WM_INPUTなるWindowsメッセージを使ってハンドリングし、ジョイスティックデバイスはXBox360互換の新しいAPIを利用する方向を推奨しています。これらの動向も見つつ、XM6自体の対応プラットフォームをより新しいOSに限定し、Microsoftの方針に従った実装に、一部をスクラップ&ビルドして差し替えていくことも検討しています。