前提条件
このウォークスルーでは、PlayFab Party のボイス チャット に関する基本的な理解を前提としています。プラットフォームのサポート
リアルタイム オーディオ操作はすべてのプラットフォームで利用できるわけではありません。リアルタイム オーディオ操作に関連するメソッドは、統一されたクロスプラットフォームのヘッダーに存在しますが、現在は Windows、XBOX、および PlayStation® 5 でのみ実装されています。他のプラットフォームではメソッドはエラーを返します。オーディオ ストリーム
リアルタイム オーディオ操作では、ライブラリからオーディオを取得または送信するためのオーディオ ストリームの概念が導入されます。オーディオ ストリームには 2 種類あります。1 つ目は ソース ストリーム です。ソース ストリームは、チャット コントロールからオーディオを取得するために使用されます。各チャット コントロールは、ボイス ストリーム と呼ばれるソース ストリームを 1 つだけ持つことができます。ローカル チャット コントロールの場合、これはマイク入力を取得するために使用されます。リモート チャット コントロールの場合、これは着信ボイス オーディオを取得するために使用されます。チャット コントロールにボイス ストリームが存在する場合、ライブラリは自動的にオーディオを処理する代わりに、そのチャット コントロールのソース オーディオをそのボイス ストリームにリダイレクトします。ローカル チャット コントロールの場合、これはマイク オーディオを自動的にエンコードして送信する代わりにボイス ストリームにリダイレクトすることを意味します。リモート チャット コントロールの場合、これは着信ボイス オーディオを自動的に各ローカル チャット コントロールに送信して再生する代わりに、ボイス ストリームにリダイレクトすることを意味します。ソース ストリームはPartyAudioManipulationSourceStream で表されます。
2 つ目の種類のストリームは シンク ストリーム です。シンク ストリームは、チャット コントロールにオーディオを送信するために使用されます。ローカル チャット コントロールのみがシンク ストリームを持つことができ、それぞれ 2 つのシンク ストリームを持つことができます。これらは キャプチャ ストリーム と レンダー ストリーム と呼ばれます。チャット コントロールにキャプチャ ストリームが存在する場合、ライブラリはマイクの代わりにキャプチャ ストリームからオーディオを取得して、他のチャット コントロールにエンコードして送信します。チャット コントロールにレンダー ストリームが存在する場合、ライブラリはレンダー ストリームからオーディオを取得し、リモート チャット コントロールから自動的に再生されるボイス チャット オーディオに 加えて 再生します。キャプチャ ストリームに送信されたオーディオは、ローカル チャット コントロールのマイク入力として使用されます。レンダー ストリームに送信されたオーディオは、ローカル チャット コントロールのオーディオ出力デバイスで再生 (「レンダリング」) されます。シンク ストリームは PartyAudioManipulationSinkStream で表されます。
オーディオ ストリームの構成
デフォルトでは、ライブラリはオーディオの取得、転送、再生を処理します。したがって、チャット コントロールはオーディオ ストリームなしで作成されます。ストリーム構成メソッド (PartyLocalChatControl::ConfigureAudioManipulationCaptureStream()、PartyLocalChatControl::ConfigureAudioManipulationRenderStream()、PartyChatControl::ConfigureAudioManipulationVoiceStream()) を使用して、チャット コントロールに 1 つ以上のストリームを作成できます。構成されると、ストリームは PartyLocalChatControl::GetAudioManipulationCaptureStream()、PartyLocalChatControl::GetAudioManipulationRenderStream()、PartyChatControl::GetAudioManipulationVoiceStream() を介して取得できます。
各ストリーム構成メソッドを使用すると、ストリームから取得またはストリームに送信するオーディオのフォーマットを指定できます。サポートされているフォーマットの詳細については、各ストリーム構成メソッドのリファレンス ドキュメントを参照してください。
ソース ストリームからオーディオを取得する
PartyAudioManipulationSourceStream::GetNextBuffer() を介してソース ストリームからオーディオを取得できます。音声アクティビティが検出されると、約 40 ms ごとに新しいバッファーが利用可能になります。利用可能なバッファーがない場合、呼び出しは成功し、長さゼロのバッファーが提供されます。瞬間的に利用可能なバッファーの総数は、PartyAudioManipulationSourceStream::GetAvailableBufferCount() を介して取得できます。
効率のため、GetNextBuffer() はバッファー全体をコピーする代わりに、ライブラリのメモリを指すバッファーを提供します。オプションで、その場で変更できます。バッファーの処理が完了したら、PartyAudioManipulationSourceStream::ReturnBuffer() を介してバッファーを解放して、ライブラリがそのメモリを再利用できるようにする必要があります。返却する前に複数のバッファーを取得でき、バッファーは取得した順序で返却する必要はありません。
シンク ストリームにオーディオを送信する
PartyAudioManipulationSinkStream::SubmitBuffer() を介してシンク ストリームにオーディオを送信できます。バッファーはライブラリによってコピーされ、呼び出しの完了後にすぐに解放できます。
40 ms ごとに、ライブラリはシンク ストリームに送信されたオーディオの 40 ms を消費します。オーディオの途切れを防ぐため、オーディオは一定のレートで送信する必要があります。
