グループ化パラメーター

グループ化パラメーターは、システム ボリューム制御プログラム Sndvol の単一ボリューム コントロールによってすべて制御されるオーディオ セッションのコレクションを識別します。 グループ化パラメーターは、コンピューターのスコープ内でコレクションを一意に識別する GUID です。

グループ化パラメーターの目的は、プロセス間セッションのセッション GUID の目的と似ています。 つまり、グループ化パラメーターを使用すると、ユーザーは任意の数のプロセスからのストリームのコレクションを 1 つの単位として制御することができます。 ただし、グループ化パラメーターは、プロセス間セッションがソリューションを提供できない状況において、この目的に役立ちます。

複数のクライアントがそれぞれのストリームを別個のセッションに割り当て、すべてのセッションに同じグループ化パラメーターを割り当てる場合、Sndvol はこれらのセッションに対して 1 つのボリューム コントロールを表示します。 グループ化パラメーターをサポートするには、Sndvol または同様のボリューム制御アプリケーションで次の操作を行う必要があります。

  • ボリューム コントロールを表示する前に、すべてのアクティブ セッションのグループ化パラメーターを確認する。 同じグループ化パラメーターを持つすべてのセッションを 1 つのボリューム制御でグループ化する。
  • ユーザーが特定のグループ化パラメーターのボリューム コントロールの設定を変更した場合、そのグループ化パラメーターを共有するすべてのセッションのボリューム レベルを更新する。

グループ化パラメーターは、Sndvol によって表示されるボリューム コントロールの数を減らすのに役立ちます。 Sndvol によって表示されるコントロールの数が多すぎると、ユーザーが混乱する可能性があります。 グループ化パラメーターをサポートしない場合、Sndvol は常にセッションごとに別個のボリューム制御を表示します。これは、すべての状況で適切とは限りません。 さらに、グループ化パラメーターを使用すると、便利な方法を使って、同様の種類のオーディオ コンテンツを含むセッションを同じボリューム レベルに簡単に設定できます。

前述のように、上位レベルのオーディオ API は通常、ストリームを既定のプロセス固有のセッション (セッション GUID 値 GUID_NULL によって識別) に割り当てます。 この既定値により、Sndvol はクライアント アプリケーション プロセスごとに別個のボリューム コントロールを表示できます。これは、多くの場合に理想的な動作です。 さらに、同じクライアントの複数のインスタンスが別々のプロセスで実行されているが、単一の共有ボリューム制御が必要な場合、クライアントは単にストリームを同じプロセス間セッションに割り当てることができます。 どちらの場合も、グループ化パラメーターを使用する必要はありません。 ただし、Microsoft Internet Explorer によって例示されている 1 つの重要なケースでは、目的の動作を実現するためにグループ化パラメーターを使用する必要があります。

Internet Explorer を使用すると、ユーザーは複数のブラウザー ウィンドウを開くことができます。これらのウィンドウは、すべて同じプロセスで実行されるとは限りません。 Sndvol がアプリケーション インスタンスごとに別個のボリューム コントロールを表示した場合、そのすべてに同じラベル "Internet Explorer" が付けられるため、ユーザーが混乱する可能性があります。この場合、プロセス間セッションは実現可能なソリューションではありません。Internet Explorer の複数のインスタンスが異なるプロセスで実行される場合、すべてのオーディオ ストリームを 1 つのプロセス間セッションに割り当てることができない可能性があります。 その理由は、Internet Explorer ウィンドウで、Windows メディア プレーヤーのインスタンスや、上位レベルのオーディオ API を使用してオーディオ ストリームを再生する他のマルチメディア プラグインが実行されている可能性があるためです。 これらの API は通常、プロセス内のストリームを既定のプロセス固有のセッションに割り当てます。 Internet Explorer では、セッションへのこれらのストリームの割り当てを制御することはできません。

WASAPI は、Internet Explorer の各インスタンスが既定のプロセス固有のセッションにおけるセッション制御にアクセスし、そのセッションにグループ化パラメーターを割り当てることにより、この問題を解決します。 Internet Explorer のすべてのインスタンスがすべてのオーディオ セッションに同じグループ化パラメーターを割り当てる場合、Sndvol はこれらのセッションの単一のボリューム コントロールを表示します。

既定では、セッションはどのグループにも属していません。 クライアントがセッションをグループ化に明示的に割り当てない場合、Sndvol はそのセッションの専用ボリューム コントロールを表示します。 グループ化パラメーター値 GUID_NULL は、セッションがグループ化に属していないことを示します。 クライアントがセッションにグループ化パラメーターを明示的に割り当てなかった場合、そのセッションのグループ化パラメーター値は既定で GUID_NULL になります。

クライアントは、セッションが割り当てられるグループを動的に変更することができます。

グループ化には、オーディオ エンドポイント デバイス上のプロセス間セッションとプロセス固有のセッションの任意の組み合わせを含めることができます。

Sndvol ユーザー インターフェイスを使用すると、ユーザーは一度に 1 つのオーディオ エンドポイント デバイスに対してのみボリューム コントロールを表示できます。 ユーザーが特定のデバイスのボリューム コントロールを調整しても、他のデバイスに接続するセッションのボリューム レベルは影響を受けません。 特に、特定のグループ化パラメーターのボリューム コントロールは、グループ化パラメーターを共有して、現在選択されているデバイスに接続されているセッションにのみ影響を与えます。 同じグループ化パラメーターを持っているが、別のデバイスに接続されているセッションは影響を受けません。

前述のように、Sndvol は、表示する各ボリューム コントロールに、表示名とアイコンでラベル付けします。 グループ化用のボリューム コントロールの場合、Sndvol はグループ化におけるセッションの 1 つを、ボリューム コントロールと共に表示される表示名およびアイコンのソースとして任意に選択します。 したがって、Sndvol がグループ化に対して常に同じ表示名とアイコンを表示可能にするため、そのグループにセッションを割り当てるすべてのアプリケーション インスタンスで、それぞれのセッションの表示名とアイコンが同じであることを確認する必要があります。 表示名とアイコンについて詳しくは、「オーディオ セッション」をご覧ください。

Sndvol などのアプリケーションは、セッションのグループ化パラメーターが変更されたときに通知を受け取るよう自身を登録できます。 このような通知は、アプリケーションがグループ化パラメーターへのセッションの割り当てに関する情報をキャッシュする場合に役立ちます。 通知は、キャッシュされた情報が無効になった可能性があることをアプリケーションに知らせます。

グループ化パラメーターをセッションに割り当てるには、IAudioSessionControl::SetGroupingParam メソッドを呼び出します。 セッションに割り当てられたグループ化パラメーターを取得するには、IAudioSessionControl::GetGroupingParam メソッドを呼び出します。

オーディオ セッション