動的ライティング
このトピックでは、開いている Human Interface Devices (HID)Lighting and Lighting standard を実装する、接続されているデバイス間で Windows アプリで動的な照明効果を提供する方法について説明します。 特に、1 つ以上のランプ (ライト、LED、電球など) を持つデバイスの LampArray 仕様に関するものです。
重要な API
概要
動的ライティングを使用すると、Windows アプリの開発者とエンド ユーザーの両方が、互換性のある周辺機器やその他の接続されたデバイス間で照明効果を制御および同期できます。 これらの機能を使用すると、ユーザーを楽しませ、生産性を高め、Windows 全体のエクスペリエンスをよりアクセスしやすくする、まとまりのあるエクスペリエンスを提供できます。
サポートされているアプリの種類とプラットフォーム
- Win10 バージョン 1809 (2018 年 10 月) 以降。
- フォアグラウンド UWP アプリと Win32 アプリに適用されます。
- Windows 11 ビルド 23466 (プレビュー) 以降。
- フォアグラウンドおよびバックグラウンド (アンビエント) UWP アプリと Win32 アプリに適用されます。
- Xbox GDK の 2023 年 3 月の更新プログラム 1 以降。
- ゲーム開発キット (GDK) のライティング API に関するページを参照してください。
サポートされているデバイスとデバイスの種類
- キーボードまたはキーパッド
- マウス
- ゲーム コントローラー (ゲームパッド、フライトスティック、ステアリング ハンドルなど)。
- 周辺機器 (スピーカー、マウス パッド、マイク、Web カメラなどの一般的なデバイス)。
- シーン (電球、スポットライト、ストロボ ライト、ビルボード、カメラのフラッシュなどの部屋/ステージ/エリア デバイス)。
- 通知 (アラーム、音声アシスタントなどのユーザーの注意を引くデバイス)。
- シャーシ (RAM、マザーボード、ファンなどの内部 PC コンポーネント)。
- ウェアラブル (ヘッドセット、時計、フィットネス トラッカー、靴などのアクセサリ)。
- 家具 (椅子、机、本棚など)。
- 芸術品 (絵画や彫刻など)。
- ヘッドセット (ヘッドフォンやマイクなど、頭部専用に設計されたアクセサリ)。
Windows アプリを使用すると、アプリがフォアグラウンドにある場合 (Windows 10 以降)、およびバックグラウンドにある場合 ("アンビエント照明" とも呼ばれます。Windows 11以降) に HID LampArray デバイスを制御できます。
デバイスの優先順位付け
Windows では、アプリの状態に基づいて動的ライティングが優先順位付けされます。 既定では、ユーザーが [設定] で特に指定していない限り、フォアグラウンド アプリには常に LampArray デバイスの制御が割り当てられます。 2 つ以上のアンビエント バックグラウンド アプリが LampArray デバイスを制御しようとしている場合、システムにより、[設定] で優先順位付けされたアプリに制御が割り当てられます。
バックグラウンド (アンビエント) ライティング
Windows.Devices.Lights の "アンビエント" API を使用すると、バックグラウンド アプリケーションでは、ユーザーがフォアグラウンド にある関連付けられていないアプリ (同期されたライティング効果を使用する音楽アプリなど) を操作する場合に LampArray デバイスを制御できるようになります。
アプリでは、ユーザー設定に応じて LampArray.AvailabilityChanged イベントを受信できます。 DeviceWatcher クラスと組み合わせると、アプリでは、接続または切断されたすべての LampArray デバイスを追跡および管理し、ユーザーがアプリで制御予定のデバイスを確認できます。 使用例の 1 つは、接続されている各デバイスのアイコンを表示し、使用できないデバイスはグレー表示にし、ユーザーがフォアグラウンド/バックグラウンド アプリの設定を変更できる [動的ライティング] 設定ページへのリンクを表示する UI です。
ユーザー設定
ユーザーは、[設定] - >[個人設定] -> [動的ライティング] 画面を使用して、LampArray デバイスエクスペリエンス (フォアグラウンドとバックグラウンドの両方) をカスタマイズできます。
接続されると、互換性のあるデバイスがページの上部にあるデバイス カードに表示され、ユーザーはそこで個々のデバイス設定を変更できます。
[Global Dynamic Lighting] (グローバル動的ライティング) 設定は、デバイス カードの下にあります (これらの設定の変更は、すべての接続デバイスに影響します)。
- ユーザーは [Use Dynamic Lighting on my devices] (デバイスで動的ライティングを使用する) トグルを使用して、動的ライティングのオンとオフを切り替えることができます。 動的ライティングがオフの場合、デバイスは動的ライティングなしの既定の動作で機能します。 動的ライティングには、組み込みの基本効果のセットが含まれています。
- Compatible apps in the foreground always control lighting (フォアグラウンドの互換性のあるアプリで常にライティングを制御する を使用すると、ユーザーは既定の動的ライティング アプリの動作をオンまたはオフにできます。 この機能をオフにすると、制御を必要とするフォアグラウンド アプリがアクティブな場合でも、バックグラウンド アプリは関連付けられているデバイスを制御できます。
- ユーザーは [Background light control] (バックグラウンド ライトの制御) セクションを使用して、アンビエント バックグラウンド コントローラーとして登録されたインストール済みアプリを優先順位付けできます。 アプリを一覧の一番上にドラッグすると、それが優先され、一覧内の他のアプリを超えてデバイスを制御できるようになります。 アンビエント バックグラウンド設定は、デバイスと、それが接続されているポートに関連付けられます。 LampArray を取り外して別の (USB) ポートに接続すると、別のデバイスとして表示されます。
- [明るさ] スライダーを使用すると、ユーザーはデバイスの LED の明るさを設定できます。
- [効果] ドロップダウンを使用すると、ユーザーはデバイス用の色と効果を選択できます。
Note
[バックグラウンド ライト制御] にデバイスが選択されていない場合は、「自律モード」で動作します。
これは、ハードウェアがファームウェアで定義されている既定の動作にフォールバックするモードとして HID 仕様で定義されています。 たとえば、OS によってデバイスがアクティブに制御されていない場合や、ユーザーがデバイスに対する OS の関与をオプトアウトした場合に、デバイスに事前プログラミングされた視覚効果が既定で設定されている場合があります。 デバイスは、自律モードから戻り、ユーザーが期待するスムーズな操作を確実にするために、HID コマンドに応答する必要があります。
パッケージ化とアプリ ID
アンビエント バックグラウンド アプリケーションでは、アプリ マニフェストで "com.microsoft.windows.lighting" AppExtension を宣言する必要があります (これを行う方法の詳細については、アプリ拡張機能の作成とホストに関するページを参照してください)。 この要件は AmbientLightingServer によって適用されます。これは、拡張機能をサポートするパッケージ ID (パッケージ アプリ) を持つプロセス内の AmbientLightingClient からの接続のみを受け入れます。 この要件は、ユーザーがインストール済みアプリのポリシーを定義し、実行時にそのポリシーを関連付けられるようにするために必要です。
アンビエント アプリケーションには アプリ ID が必要です。これは、実行時にユーザー設定を特定できるようにするためです。 アプリケーションがインストールされ、アンビエント API が使用されている場合、システムはアプリの実行中のインスタンスをユーザーの設定に関連付ける必要があります。 さらに、設定でユーザーがアプリを使用できるようにするには、アプリがアンビエント ライティング API の正当なユーザーであることをシステムに示すインストール後の成果物が必要です。
この ID 要件は、MSIX パッケージ化 (以前は APPX と呼ばれていた Microsoft のデプロイおよびパッケージ化テクノロジ) によって実現されます。
パッケージ化とインストールに MSIX パッケージを既に使用している場合は、追加の要件はありません。
パッケージ化されていないアプリがある場合は、アプリケーション ID を取得するために追加の手順が必要です。 インストールを完全な MSIX に移行することも、MSIX の簡略化された [Sparse Packaging and External Location] (スパース パッケージ化と外部の場所) 機能を使用することもできます。 外部の場所を使用したスパース パッケージ化は、セットアップ/インストールを MSIX に完全に変換することなく、既存のアプリのインストールでアプリ ID の利点を得られるよう設計されています。 これは、セットアップ/インストールの新しい手順で、インストールするアプリを表す MSIX パッケージを作成するツールが使用されます。
インストールについて説明する AppXManifest.xml パッケージ マニフェストを定義する必要があります。 MSIX パッケージは、MakeAppXPackage ツールを使用して作成されます。 インストール時に、インストールされている実行可能ファイルの場所を指定するパッケージ マネージャー API を使用して MSIX パッケージをインストールします。 便宜上、add-appxpackage PowerShell スクリプトでは、この API の動作もラップされます。 または、インストール時に AddPackageByUriAsync を使用して MSIX パッケージをインストールすることもできます。
パッケージ化されていないアプリのインストールの場合、実行可能ファイルに対する side-by-side アプリケーション マニフェスト要件もあります。
パッケージ化されたアプリとパッケージ化されていないアプリの詳細については、「デプロイの概要」を参照してください。
例
Windows.Devices.Lights と windows.Devices.Lights.Effects API を使用して周辺機器の RGB 照明を制御する方法を示します。
デスクトップ画面から 1 つの代表的な色を抽出し、それを使用して、接続された RGB デバイス上の LED ランプを点灯させる方法を示します。