前回までで、Kinectセンターから関節の情報を取り込むアプリケーションは完成しました。今回は、Kinectセンサーが内蔵する4個のマイク(マイクロフォンアレイ)も使ってみましょう。

内蔵するマイクロフォンアレイを使う

図11●音源の方向とビームフォーミングの方向を表示するアプリ「Kinect Audio Positioning」。
図11●音源の方向とビームフォーミングの方向を表示するアプリ「Kinect Audio Positioning」。
オレンジの線が音源の方向、青い線がビームフォーミングの方向。プロジェクトはhttp://kinectaudioposition.codeplex.com/から入手できる
[画像のクリックで拡大表示]

 図11は筆者が作成したアプリ「Kinect Audio Positioning」です。このプロジェクトもCodePlexからダウンロードできます。

 Kinect Audio Positioningは、音源の方向と「ビームフォーミング」の方向をそれぞれ線で描画します。ビームフォーミングは各マイクに到達する音の位相差から、特定の方向(ビーム)の音だけを選択的に抽出するノイズキャンセル手法で、Kinectが内蔵する機能です。

 音源の方向は「Microsoft.Research.Kinect.Audio.KinectAudioSourceクラス」のSoundSourcePositionメンバーで取得できます。一方、ビームフォーミングの方向はイベントハンドラを定義して、そのイベントハンドラの引数から取得します。

別スレッドで方向を取得

図12●別スレッドで音源およびビームフォーミングの方向を取得し、UIスレッドに通知する
図12●別スレッドで音源およびビームフォーミングの方向を取得し、UIスレッドに通知する
[画像のクリックで拡大表示]

 これらの方向の取得は、アプリのメインスレッド(「UIスレッド」と言います)とは別のスレッドで非同期処理で実行します。音源の方向は一定間隔で、ビームフォーミングの方向は変化が生じたらUIスレッドにその内容を通知します(図12)。Kinect Audio Positioningでは、この処理のためにKinectMicArrayクラスを作りました(リスト3その1その2)。

 同クラスは.NET Frameworkの「INotifyPropertyChangedインタフェース」を実装することで、プロパティ値の変更の通知を実現しています。このインタフェースでは簡単に言えば、音源の方向とビームフォーミングの方向をプロパティ値とし、それらに変化が生じたら画面を描画しているUIスレッドに自動的に通知する、という処理を行っています。

☆     ☆     ☆

 駆け足でしたが、Kinect for Windows SDKの概要と基本的なプログラミングを解説しました。

 スマートフォンではGPSや加速度センサー、電子コンパスなどを活用した拡張現実(Augmented Reality、AR)アプリが注目を集めています。Kinectでも、仮想空間と現実空間が相互作用するようなARアプリを作成できるでしょう。Kinect for Windows SDKを使って、新しいアプリ、新しいユーザーインタフェース、新しいジェスチャー、新しいビジネスのアイデアを生み出してください。