サウンド

hero image

サウンドを使ってアプリを向上させるには、さまざまな方法があります。 ユーザーがイベントを音声で認識できるように、サウンドを使って他の UI 要素を補完できます。 視覚障碍のあるユーザーにとって、サウンドは効果的なユーザー インターフェイスの要素となる可能性があります。 サウンドを使ってユーザーを釘づけにするような雰囲気を作ることができます。たとえば、パズル ゲームのバックグラウンドで風変わりなサウンドトラックを再生したり、ホラー ゲームやサバイバル ゲームで不気味なサウンド効果を使用したりすることが考えられます。

WinUI 2 ギャラリー
WinUI Gallery

WinUI 2 ギャラリー アプリがインストールされている場合は、ここをクリックしてアプリを開き、サウンドの動作を確認してください

Sound Global API

UWP には使いやすいサウンド システムが用意されていて、"スイッチを切り替える" だけで、アプリ全体にイマーシブなオーディオ エクスペリエンスを実装することができます。

ElementSoundPlayer は、XAML 内の統合的なサウンド システムで、オンにすると、すべての既定のコントロールで自動的にサウンドが再生されます。

ElementSoundPlayer.State = ElementSoundPlayerState.On;

ElementSoundPlayer には、3 つの異なる状態、OnOffAuto があります。

Off に設定すると、アプリの実行環境にかかわらず、サウンドが再生されることはありません。 On に設定すると、すべてのプラットフォームで、アプリのサウンドが再生されます。

ElementSoundPlayer を有効にすると、空間オーディオ (3D サウンド) も自動的に有効になります。 サウンドをオンにしたまま 3D サウンドを無効にするには、ElementSoundPlayer の SpatialAudioMode を無効にします。

ElementSoundPlayer.SpatialAudioMode = ElementSpatialAudioMode.Off

SpatialAudioMode プロパティの有効な値は以下のとおりです。

  • Auto: サウンドがオンのときに、空間オーディオがオンになります。
  • Off: サウンドがオンでも、空間オーディオは常にオフです。
  • On: 空間オーディオが常に再生されます。

空間オーディオと XAML による空間オーディオの処理方法について詳しくは、「オーディオ グラフ」の「空間オーディオ」をご覧ください。

テレビや Xbox のサウンド

サウンドは 10 フィート エクスペリエンスの重要なパーツであるため、既定では、ElementSoundPlayer の状態が Auto、つまり、アプリが Xbox で実行されているときにのみサウンドが再生されます。 Xbox やテレビ向けの設計について詳しくは、「Xbox およびテレビ向け設計」の記事をご覧ください。

音量設定のオーバーライド

アプリ内のすべてのサウンドは、Volume コントロールで小さくすることができます。 しかし、アプリ内のサウンドをシステムの音量より大きくすることができません。

アプリの音量レベルを設定するには、次のように呼び出します。

ElementSoundPlayer.Volume = 0.5;

ここで、最大の音量はシステムの音量に相対的に1.0、最小は 0.0 (本質的にサイレント)です。

コントロール レベルの状態

コントロールの既定のサウンドが望ましくない場合は、これを無効にできます。 サウンドを無効にするには、コントロールで ElementSoundMode を使います。

ElementSoundMode には、OffDefault の 2 つの状態があります。 設定しないと、Default になります。 Off に設定すると、コントロールが再生するすべてのサウンドはミュートされます (フォーカスを除く)。

<Button Name="ButtonName" Content="More Info" ElementSoundMode="Off"/>
ButtonName.ElementSoundState = ElementSoundMode.Off;

適切なサウンドの選択

カスタム コントロールを作成したり、既にあるコントロールのサウンドを変更したりするときには、システムが提供するすべてのサウンドの使用法を理解することが重要です。

各サウンドは特定の基本的なユーザー操作に関連付けられています。すべての対話式操作で再生するサウンドをカスタマイズできますが、このセクションでは、すべての UWP アプリで一貫したエクスペリエンスを維持するためにサウンドを使う必要がある、というシナリオを説明します。

要素の呼び出し

現在のシステムで最も一般的な、コントロールにトリガーされるサウンドは、Invoke サウンドです。 このサウンドは、ユーザーがタップ、クリック、入力、スペース、または、ゲームパッドの [A] ボタンを押すことでコントロールを呼び出したときに、再生されます。

通常このサウンドは、ユーザーが入力デバイスを介して明示的に単純なコントロールまたはコントロールの一部を対象としたときにのみ再生されます。

任意のコントロール イベントからこのサウンドを再生するには、シンプルに ElementSoundPlayer から Play メソッドを呼び出し、ElementSound.Invoke に渡します。

ElementSoundPlayer.Play(ElementSoundKind.Invoke);

コンテンツの表示と非表示

XAML には多くのポップアップやダイアログ、閉じることができる UI があり、これらのオーバーレイのいずれかをトリガーするすべての操作で Show または Hide サウンドを呼び出す必要があります、

オーバーレイのコンテンツ ウィンドウをビューに読み込むときに、Show サウンドを呼び出す必要があります。

ElementSoundPlayer.Play(ElementSoundKind.Show);

逆に、オーバーレイのコンテンツ ウィンドウを閉じる (または簡易非表示にする) ときに、Hide サウンドを呼び出す必要があります。

ElementSoundPlayer.Play(ElementSoundKind.Hide);

アプリのページ内でパネルまたはビューの間を移動する場合 (「NavigationView」を参照)、通常は双方向の移動になります。 つまり、現在表示しているアプリのページを離れずに、次のビュー/パネルまたは前のビュー/パネルに移動できます。

このナビゲーションの概念に関するオーディオ エクスペリエンスは、MovePrevious サウンドと MoveNext サウンドに包含されています。

リストの次の項目と考えられるビュー/パネルに移動するときは、次のように呼び出します。

ElementSoundPlayer.Play(ElementSoundKind.MoveNext);

リストの前の項目と考えられるビュー/パネルに移動するときは、次のように呼び出します。

ElementSoundPlayer.Play(ElementSoundKind.MovePrevious);

戻るナビゲーション

アプリ内で現在のページから前のページにナビゲーションするときは、GoBack サウンドを呼び出す必要があります。

ElementSoundPlayer.Play(ElementSoundKind.GoBack);

要素へのフォーカス

マイクロソフトのシステムの Focus サウンドは、唯一の暗黙的なサウンドです。 つまり、ユーザーは、何かを直接操作していなくてもサウンドが聞こえます。

フォーカスは、ユーザーがアプリをナビゲーションしたときに発生します。これは、ゲームパッド、キーボード、リモコン、または Kinect で実行できます。 通常、Focus サウンドは、PointerEntered またはマウス ホバー イベント時には再生されません

コントロールがフォーカスされたときに Focus サウンドを再生するように設定するには、次のように呼び出します。

ElementSoundPlayer.Play(ElementSoundKind.Focus);

フォーカス サウンドの循環

ElementSound.Focus 呼び出しの追加機能として、サウンド システムでは、既定で、ナビゲーション トリガーごとに 4 つの異なるサウンドを循環させます。 つまり、2 つの同じフォーカス サウンドが前後して再生されることはありません。

この循環機能の目的は、フォーカス サウンドが単調になることを防ぎ、ユーザーの注意をひかない状態を保つことです。フォーカス サウンドは、最もよく再生されるため、最も繊細なサウンドにする必要があります。

サンプル コードの入手