ゲーム チャット 2 の概要
ゲーム チャット 2 を使用すると、ユーザーのプライバシー設定を考慮し、なおかつボイス チャットとテキスト チャットに関する Xbox コンソール GDK タイトルの要件に準拠しながら、ボイス チャットとテキスト チャットによるコミュニケーションをアプリに追加できます。 ゲーム チャット 2 は、GDK タイトルを利用してネットワーク トランスポートを提供します。 チャットの音声とトランスポートの両方を含むオールインワン ソリューションを探している場合は、Microsoft Azure PlayFab Party をご検討ください。 API 固有のリファレンスの詳細については、「API の内容 (ゲームチャット 2)」をご覧ください。
注意
ゲーム チャット 2 と PlayFab Party API は、同じ内部プラットフォーム機能を使用しているため、タイトル内では同時使用できません。
ゲーム チャット 2 には、ゲームの通信を管理するため、次の表に示す機能が用意されています。
機能 | 説明 |
---|---|
コミュニケーション関係 | ユーザーが相互にコミュニケーションする方法を微調整できます。 ゲーム チャット 2 ではチームまたはチャネルを指定するのではなく、2 人のユーザー間ごとに明確な関係性を定義する必要があります。 ゲーム チャット 2 のコミュニケーション関係では、任意の 2 人のユーザー間での一方向および双方向のコミュニケーションがサポートされます。 音声のコミュニケーション関係とテキストのコミュニケーション関係は相互に独立して設定できます。 |
アクセシビリティ | ユーザーの [ゲーム チャット トランスクリプション] 設定を考慮しながら変換を実行することで、受信音声を表すチャット テキスト メッセージの作成と、送信チャット テキスト メッセージに対する合成された音声の再生をそれぞれ行います。 |
Xbox サービスの統合 | Xbox サービスを使用して、各ユーザーの設定と権限が考慮されるようにします。 |
音声アクティビティ検出 | 音声アクティビティ検出を実行して、オーディオ データに音声アクティビティが含まれるタイミングを判断します。 |
自動ゲイン制御 | 自動ゲイン制御を実行して、ユーザーのマイク出力の差異を最小限に抑えます。 |
コーデック | アプリのリモート インスタンスに配信されるオーディオ データをエンコードします。 Xbox One では、このエンコード (および受信側でのデコード) がハードウェアで高速化されます。 |
chat_manager::start /finish_processing_state_changes |
UI フレームごとのアプリによって非同期操作を実行するために呼び出されたメソッドのペアで、game_chat_state_change 構造の形式で処理する結果を取得します。 完了したら、それに関連付けられたリソースを解放します。 |
chat_manager::start /finish_processing_data_frames |
アプリのトランスポート層に ゲーム チャット 2 を追加するために使用されるメソッドのペア。 これらの方法は、ネットワーク フレームごとのアプリによって呼び出され、リモート デバイス上のアプリのインスタンスに game_chat_data_frame オブジェクトを取得して配布し、完了したら関連するリソースを解放するために行います。 |
chat_manager::process_incoming_data |
ゲーム チャット 2 のリモート インスタンスからアプリのトランスポート層を経由して配信されるデータを ゲーム チャット 2 に渡すために使用されるメソッド。 |
リアルタイム オーディオ操作 | アプリをチャット オーディオ パイプラインに挿入し、チャット オーディオ データを検査または操作します。 詳細については、「リアルタイム オーディオ操作」をご覧ください。 |
アプリは、一緒にチャットすることが予測されるローカル デバイスのユーザーとリモート デバイスのユーザーについて、ライブラリに通知します。 次に、アプリは各ユーザー間の関係性を構成します。
ゲーム チャット 2 はローカル ユーザーのマイクの音声をポーリングし、自動ゲイン制御をと音声アクティビティ検出を実行して、データをエンコードします。その後、chat_manager::start
/finish_processing_data_frames
経由で ゲーム チャット 2 のリモート インスタンスに配信するオーディオ データを公開します。
アプリは、game_chat_state_change オブジェクトに格納されているデータを、同じオブジェクトに指定されているゲーム チャット 2 のリモート インスタンスに 配信します。
アプリのリモート インスタンスは、データを受け取ったら、固有の ゲーム チャット 2 のインスタンスに chat_manager::process_incoming_data
経由でそのデータを送信します。 ゲーム チャット 2 は、受信データをデコードし、ローカル ユーザーのオーディオ デバイスにそのデータを渡します。
コミュニケーションの権限とプライバシー
ゲーム チャット 2 によって、Xbox サービスの権限とプライバシー要件が強制されます。 コミュニケーションの権限を持たないユーザーのオーディオ データは生成されません。 プライバシー設定によりブロックされているユーザーのオーディオ データは渡されません。
ネットワークの初期化
ゲーム チャット 2 ライブラリを初期化する前に、ネットワークの初期化を待つ必要はありません。 ただし、ゲーム チャット 2 パケットを送受信するソケットを作成する前に、ネットワークの初期化を待つ必要があります。 ゲーム チャット 2 は、ネットワークが初期化されるまで、送信するパケットを生成しません。 ネットワークの初期化の詳細については、「ネットワークの初期化と接続」を参照してください。
一時停止/再開
RegisterAppStateChangeNotification
を使用して、一時停止および再開のイベントに登録する必要があります。 一時停止時には、chat_manager::cleanup()
を呼び出してゲーム チャット 2 をクリーンアップする必要があります。 この呼び出しは完了するまでに数百ミリ秒かかる可能性があるため、中断ハンドラーのタイムアウトを避けるために、他の中断ロジックと並行または非同期で行う必要があります。
cleanup
呼び出しは、中断ハンドラーが戻る前に完了する必要はありません。
再開時に、cleanup
呼び出しが完了したら、chat_manager::singleton_instance().initialize(...)
を呼び出してゲーム チャット 2 を再初期化する必要があります。 サスペンド/レジューム状態の変更時に cleanup
と initialize
を呼び出さないと、ゲーム チャット 2 を引き続き使用しようとしたときにタイトルがクラッシュします。
ユニバーサル Windows プラットフォーム (UWP) と Xbox One ERA から GDK への API の変更
ゲーム チャット 2 をサポートするために API に対して次の変更が行われました。
-
game_chat_audio_encoding_type_and_bitrate
は game_chat_audio_encoding_bitrate に更新されました。 -
set_audio_encoding_type_and_bitrate
はset_audio_encoding_bitrate
に更新されました。 -
audio_encoding_type_and_bitrate
はaudio_encoding_bitrate
に更新されました。 -
game_chat_communication_relationship_adjuster::privilege
は、タイトルによって解決できる権限の問題を示すように更新され、 -
game_chat_communication_relationship_adjuster::privilege_check_failed
が追加されました。 - chat_manager::set_legacy_era_uwp_compat_mode_enabled() API は、UWP バージョンと ERA バージョンのゲーム チャット 2 と相互利用できるように、許容される GDK バージョンのゲーム チャット 2 に追加されました。
注意
- ゲーム チャット 2 は、XGameRuntimeIsFeatureAvailable で示されるように
XGameRuntimeFeature::XNetworking
機能が利用可能である場合にのみ使用できます。 - ユーザーは、ゲーム チャット 2 インスタンスに追加される前に、XUserAddAsync を使用して Microsoft Game Development Kit に追加されます。
- 音声フォーカス検出のサポートは、将来のプレビュー GSDK で提供されます。
UWP と ERA から GDK への機能の変更
- ゲーム チャット 2 の代わりにパケットを送るには、タイトルの起動時、および再開後のネットワークの初期化を待ちます。 ネットワークが初期化される前に、ゲームチャット 2 が初期化されます。
-
RegisterAppStateChangeNotification
を使用して、一時停止および再開のイベントに登録します。 一時停止後に、chat_manager::cleanup() を使用してゲーム チャット 2 をクリーンアップします。 再開後に、ゲーム チャット 2 を再初期化します。 一時停止と再開のサイクルを通してゲーム チャット 2 を使用すると、クラッシュすることがあります。