プレイヤー間のボイス コミュニケーション (音声通信) は、他のプレイヤーと簡単かつ迅速にやり取りするための一般的な機能です。しかし、ボイス チャットの具体的な実装は、さまざまなオンライン サービスとプラットフォームによって異なります。Voice Chat インターフェース を使用すれば、Epic Online Services (EOS) や Vivox、最新のゲーミング コンソールを含むさまざまなサービス間で、それぞれに向けてカスタム コードを作成することなく、ボイス コミュニケーションを容易に操作できます。Voice Chat インターフェースにより、ボイス チャットを製品に統合するために必要なすべての機能をサポートする中立的な API が提供されます。このような機能には、ボイス チャンネルへの参加、入出力デバイスの選択、他のユーザーのミュート/ブロック、オーディオ データの送受信があります。
ボイス コミュニケーション プロバイダーとして EOS を使用する予定の場合、製品と動作するための設定の詳細について「EOS Voice Chat Plugin」をご一読ください。
ユーザー管理
Voice Chat インターフェースでは、それぞれのユーザーに対して 1 つの Voice Chat User Interface をインスタンス化することで個々のユーザーを識別します。このように分離することでシステムで複数のローカル ユーザーをサポートし、システム全体の動作と設定と、ユーザーごとの動作と設定を区別できるようになります。
作成と破棄
ボイス コミュニケーションはユーザー間で発生するため、CreateUser
関数を使って少なくとも 1 つのローカル Voice Chat User (ボイス チャット ユーザー) を作成する必要があります。同じシステム上で複数のユーザーをサポートするサービスまたはプラットフォームを使用している場合は、CreateUser
を複数回呼び出して、それぞれの呼び出しで新しい IVoiceChatUser
インターフェースを返すことができます。個々のユーザーに特有なボイス チャット インタラクションは、Voice Chat User Interface インスタンスによってすべて実行されます。Voice Chat User Interface が不要になった場合は、その Voice Chat User Interface で ReleaseUser
を呼び出してください。詳細については、次のリファレンス サブセクションを参照してください。
コード フローのリファレンス
独自の IVoiceChat and IVoiceChatUser インスタンスを作成する際は、次のライフサイクルに従います。最初に単一の IVoiceChat インスタンスを作成してインスタンス化し、それを使って各ローカル ユーザー (プレイヤー) に向けて 1 つの IVoiceChatUser インスタンスを作成します。ユーザーはその IVoiceChatUser インスタンスを使用して、信頼済みサーバーのチャンネルに対して参加/退出を手動で自由に行い、他のユーザーとコミュニケーションを取ることができます。ボイス コミュニケーションを終了する準備ができたら、通常はアプリケーションをシャットダウンする際に、作成したインスタンスの初期化を解除する必要があります。このフローでは次の関数を使用します。これらの関数は以下に記載されている順で呼び出す必要があります。
関数 | 使用方法 |
---|---|
IVoiceChat::Initialize |
IVoiceChat インスタンスを初期化します。作成したすべてのインスタンスを使用する前に、これを呼び出す必要があります。 |
IVoiceChat::Connect |
構成済みのボイス サーバーに接続します。 |
IVoiceChat::CreateUser |
IVoiceChatUser インターフェース インスタンスを作成します。チャンネルに参加しようとしている各ローカル ユーザーがログインするためには、独自のインスタンスが必要です。CreateUser は、このフローで使用する他の関数とは異なり、いつでも呼び出すことができます。 |
IVoiceChatUser::Login |
ボイス チャット サーバーにローカル ユーザーをログインさせます。PlayerName パラメータはユーザーに対する EOS 製品 ID であり、これは EOS_ProductUserId_ToString API で文字列化してから、UTF8_TO_TCHAR などで FString に変換します。当該の EOS 製品 ID は有効な EOS 製品 ID の必要があるというだけであり、プラットフォーム インスタンスの Connect インターフェース経由で実際にログインする必要はありません。必要な認証は、信頼できるサーバーによってチャネル参加資格情報の形で提供され、その後 IVoiceChatUser :: JoinChannel に渡されます。 |
IVoiceChatUser::JoinChannel |
サーバーにログインしてからチャンネルに参加します。ユーザーは同時に複数のチャンネルに参加でき、チャンネルからの退出や再参加も可能です。各チャネルは、それ以降、継続的に個別のフローに従います。このプロセスには資格情報が必要です。資格情報を取得する方法については、以下の「[チャンネルに参加する]」セクションを参照してください。 |
IVoiceChatUser::LeaveChannel |
(オプション) 以前に JoinChannel を使用して参加したチャンネルから、ローカル ユーザーを退出させます。 |
IVoiceChatUser::Logout |
(オプション) ボイス チャット サーバーからローカル ユーザーをログアウトさせます。これを実行すると、結果的にユーザーはすべてのチャンネルから退出します。ログアウトしても Login を呼び出すことで、新しいインターフェース インスタンスを作成する必要なく、再ログインできます。 |
IVoiceChat::Disconnect |
(オプション) ボイス サーバーとの接続を解除します。この方法でも効率的にログアウトし、参加していたすべてのチャンネルからユーザーを退出させることができます。 |
IVoiceChat::Uninitialize |
IVoiceChat インターフェース インスタンスをシャットダウンします。また、この関数を呼び出すと、ユーザーが参加、ログアウト、接続解除したボイス チャット サーバーのすべてのチャンネルから退出します。通常、これはアプリケーションのシャットダウン時に呼び出されます。 |
ユーザー設定を構成する
ボイス チャット サービスには、ユーザーごとに構成可能な設定が含まれている場合があります。このような特定の設定と許容される値はサービスによって異なりますが、Voice Chat インターフェースでは SetSetting
と GetSetting
関数を使ってこの機能をラップします。これらの関数の両方では、キーと値のタイプとして FString
を使用します。
ブロックとミュート
プレイヤー名のリストを BlockPlayers
と UnblockPlayers
で使用し、そのリストに含まれるすべてのユーザーのブロックとブロック解除をそれぞれ行います。プレイヤーをミュートまたはミュート解除するには SetPlayerMuted
を使用します。特定のユーザーがミュートされているかどうかを調べるには、IsPlayerMuted
を使用できます。
オーディオ デバイスを管理する
ユーザーのオーディオ入出力デバイスの管理はシンプルです。使用するデバイスに関するオプションをユーザーに提供する、またはデフォルトとは異なる入出力デバイスを選択する場合は、ユーザーのシステムのデバイスに対してクエリを実行できます。また、デバイスのボリュームを調整することもできます (ミュートするオプションも含む)。
デバイスを識別して選択する
現在の入力デバイスおよび出力デバイスを識別するには、それぞれ GetInputDeviceInfo
と GetOutputDeviceInfo
を使用します。また、GetDefaultInputDeviceInfo
と GetDefaultOutputDeviceInfo
を使ってデフォルトの各デバイスを識別したり、GetAvailableInputDeviceInfos
と GetAvailableOutputDeviceInfos
を使って利用可能なデバイスのリストを取得したりすることもできます。使用するデバイスを特定したら、SetInputDeviceId
または SetOutputDeviceId
を呼び出してそれを選択します。
ボリュームを調整またはミュートする
SetAudioInputVolume
と SetAudioOutputVolume
を使ってデバイスのボリュームを調整したり、GetAudioInputVolume
と GetAudioOutputVolume
を使って現在の値を確認したりできます。同様に、SetAudioInputDeviceMuted
と SetAudioOutputDeviceMuted
を使ってデバイスをミュート (またはミュート解除) でき、GetAudioInputDeviceMuted
と GetAudioOutputDeviceMuted
を使ってデバイスが現在ミュートされているかどうかを確認できます。
他のユーザーと通信する
ユーザー間のボイス コミュニケーションを可能にするには、当該のユーザーがすべてログインしており、Voice Chat インターフェース自体がボイス チャット サーバーに接続されている必要があります。
参加と退出
他のユーザーとのコミュニケーションには 3 つの接続レイヤーがかかわっています。Voice Chat インターフェースがボイス コミュニケーション サーバーに接続されて、Voice Chat User Interface がログインし、Voice Chat User Interface が他のユーザーがいるチャンネルに参加する必要があります。
まず Voice Chat User で Login
を呼び出して、続けて Voice Chat Interface Connect
関数を呼び出し、FOnVoiceChatConnectCompleteDelegate
コールバック関数による適切な接続の確認を待ちます。また、IsConnected
を呼び出すことで接続の状態をいつでも確認できます。現在接続されていない場合、IsConnecting
はそのときに接続しようとしているのかどうかを示します。
接続している状態では、GetChannels
を使ってサーバーのチャンネル リストに対するクエリを実行したり、JoinChannel
および LeaveChannel
関数を使ってさまざまなグループ会話に参加したりできます。
終了したら、Disconnect
を呼び出してサーバーから接続解除します。これによって Voice Chat インターフェースがサーバーから接続解除されて、すべてのローカル ユーザーのコミュニケーションが停止します。特定のユーザーのみをログアウトさせたい場合は、そのユーザーの Voice Chat User Interface で Logout
関数を呼び出します。シャットダウンの前には、それぞれのユーザーの接続を解除してログアウトさせてください。
サーバーとの接続や接続解除など、ローカル システム全体に影響を及ぼす関数は Voice Chat インターフェース上で動作します。チャンネルへの参加や退出、またはオーディオ ハードウェアとのインタラクションなど、一人のローカル プレイヤーのみに関連する処理は Voice Chat User Interface の一部として扱われます。
送信
システムでは、ユーザーが参加しているチャンネルを通じて、ユーザーのオーディオ入力を他のユーザーに送信します。TransmitToAllChannels
を使用して、ユーザーが参加しているすべてのチャンネルに送信させるか、TransmitToSpecificChannel
を使って特定のチャンネルのみに送信させるかを設定できます。すべてのチャンネル送信を停止するには TransmitToNoChannels
を使用します。