コミュニケーション チュートリアル 1:
ヒューマンインターフェイス・デバイス

イントロダクション

このチュートリアルでは、Max のhi オブジェクト、およびコンピュータに接続された HID デバイスによるインターフェイスについて述べます。そして、これらの一般的なデバイスから送られるデータの発見、選択、処理の方法について見ていきます。

HID(ヒューマンインターフェイス・デバイス- Human Interface Device)プロトコルは、デバイス固有のドライバを使用せずに、フィジカルコントローラ(物理的なコントローラ)をコンピュータに接続することを可能にします。コンピュータは、デバイスに対し、デバイス自身に関する情報を問い合わせることができます。そして、ユーザに対してそのインターフェイスを提供することができます。HID 対応コントローラには、ジョイスティック、ゲームパッド、マウスやグラフィックス・タブレット、タッチスクリーン、その他、コンピュータとリアルタイムで通信を行なうために設計された様々な種類のインターフェイスが含まれます。

HID デバイスは、一般的にゲームコミュニティーでの使用のために設計されていますが、これらは比較的安価で柔軟性を持つものであるため、Max のパフォーマにもよく利用されます。最も一般的なHID デバイスはゲームで使用されるジョイスティックです。これは、小さくてポータブルなパッケージの中で、驚異的な数のインターフェイスツールを提供することができます。

hi インターフェイスの理解

チュートリアルを開いて下さい。

チュートリアルを見て下さい。このパッチ全体がhi オブジェクトを中心に作られています。hi オブジェクトは、Max とHID デバイスとの間のインターフェイスです。このオブジェクトは、ジョイスティック、ドローイングパッドなどのコントローラとのインターフェイスに必要な情報をすべて提供します。hi オブジェクトで利用できるデバイスを見るためには、info というメッセージボックスをクリックしてください。hi オブジェクトはこれに応答して、利用できるすべての HID デバイス(および、それらに関する若干の情報)のリストをMax ウィンドウに表示します。

表示されるリストは、バージョン情報と、利用できる HID デバイスの数で始まります。おそらく、コンピュータにはすでに利用できるデバイスが数多くあることを見て驚くでしょう。1つ1つのデバイスの名前がリストとして表示され、その後にそのデバイスのエレメントの数についての表記が続いています。エレメントとは、デバイスで利用できるそれぞれのコントロールパラメータのことです。例えば、シンプルなゲームコントローラには、ジョイスティックによる4つのエレメント(それぞれ2つの座標軸を持った2つのジョイスティック)、6つ以上のボタンエレメント、そして、それ以外の様々なコントロールがあるでしょう。物理的なコントロールより多くのエレメントが存在することも少なくありません。これらは、デバイスのフィードバック、あるいは接続されたコンピュータとの通信を行なうためのものである可能性があります。

それでは、デバイスを1つ使ったhi オブジェクトに焦点をあててみたいと思います(ここでは、Logitech Dual Action ゲームコントローラを使ってテストしています)。hi オブジェクトに HID デバイスの名前をメッセージとして送信し、デバイスを選択することができます。しかし、利用できるデバイス名をhi オブジェクトからumenuに送信させ、そのumenuを使ってコントローラを選ぶほうがより簡単です。menuメッセージはこれを実行するものです。menu と書かれたメッセージボックスをクリックすると、umenu オブジェクトがデバイス名を読み込むために必要なメッセージがhi オブジェクトの右アウトレットから出力されます。umenu の第2アウトレットからの出力を使い、これをhi オブジェクトに送り返すことによって、デバイスを選ぶことができます。メニュー項目を選んだとき、Max ウィンドウに"hi: focusing on [デバイス名]" と表示されることに気づくと思います。

データとポーリング

hi オブジェクトは他のシステムインターフェイスと良く似たものです。このオブジェクトは、メッセージのストリームを生成するのではなく、ポーリングされる(bang メッセージを送信することによって行なわれます)のを待ち受け、変更された値を出力します。チュートリアルパッチの第2のセクションでは、metro が 20ミリ秒間隔で hi オブジェクトに対してポーリングを行なうよう設定してあることがわかるでしょう。すでにデバイスを選択しているのであれば、コントローラを動すと、その結果がhi オブジェクトの下のナンバーボックスに表示されます。出力は2つの数値を組み合わせたものになっていて、最初の数値はエレメントのインデックス、第2の数値はそのエレメントが受信した最新の値です。

hi オブジェクトに対してポーリングを行なうもう1つの方法は、内蔵タイマを使用することです。そのためには、ポーリングを行なう時間間隔をアーギュメントに持つpoll メッセージを送信します。この方法は、必要に応じて僅かなオブジェクトを追加するだけで済むため、hi オブジェクトの設定を行なうには使い勝手の良いものです。metro をオフにして poll 20 というメッセージボックスをクリックして下さい。オブジェクト自身でポーリングを行なう機能によって、metroをオフにしても値が出力され続けていることがわかります。

hi オブジェクトを動作させ、その出力を使って、使用しているデバイスで利用できるエレメントを判定させてみましょう。パッチには、ゲームコントローラで利用できる共通のエレメントをリスト表示したコメントボックスがあります。ここでは、ゲームコントローラとして、2つのジョイスティックと4つのボタンを持つゲームパッドを想定しています。HID デバイスを使った実用的なプログラムを作る場合、まず最初に利用できるエレメントを確認しておく必要があります。使っているHID コントローラを操作してみて、エレメントと値の組み合わせを観察して下さい。コンティニュアスコントローラを操作した場合でも、ボタンを押した場合でも、その都度出力が行なわれるはずです。エレメント/値の出力を見て何らかの問題がある場合には、hi オブジェクトの出力に print オブジェクトを接続して、すべての出力結果を見て下さい。使用しているHIDデバイスが出力する値とチュートリアルパッチにリスト表示されたパラメータがうまく合致しない場合には、どのコントローラが利用でき、有効なのかを見つけ出す必要があります。

アプリケーションのためのデータのルーティング

使用しているHIDデバイスで動作するコントローラが把握できれば、それを使ってアプリケーションの残りの部分をコントロールできます。このチュートリアルパッチでは、route オブジェクトが送信されるリストの最初の項目(ここでは、エレメントのインデックスになっています)によってメッセージをルーティングし、同時に、その最初の項目を取り除いて出力してくれているため好都合です。route オブジェクトはこのような処理を行なう場合の完璧なツールです。

ここでは、2つのエレメント(ジョイスティックコントローラの 20 と 21)を使って、描画を行ない、2つのエレメント(ゲームパッドの上と下のボタン)を使って描画する円の大きさを決定し、さらに2つのエレメント(ゲームパッドの左と右のボタン)を使って画面のクリアと描画色のランダマイズを行なっています。サブパッチの内容を見れば、これまでに描画パッチで使用したプログラムと非常に良く似たものであることがわかるでしょう。hi オブジェクトは複雑なゲームコントローラの動作をシンプルな数値のストリームに変換するため、Max でプログラム可能なあらゆる処理のコントロールに使うことができます。

結び

HID プロトコルは、コンピュータと比較的安価なハードウェアとの間の標準化されたインターフェイスです。hi オブジェクトは、これらのデバイスを使ってパフォーマンスパッチのコントロールや操作を行なう機能をMaxプログラマに与えてくれます。HID デバイスはほとんどすべての処理に使用することができるため、hi オブジェクトは、システムのフィジカルコントロール(物理的なコントロール)との簡単なインターフェイスを提供するものです。

参照

hi ヒューマンインターフェイス(ゲーム)デバイスからの入力。