Photon Voice 1 is the original and first major version of Photon Voice. It is now replaced by Photon Voice 2 which is refactored and enhanced. We highly recommend starting new projects with Photon Voice 2 and if possible migrating existing ones from Photon Voice 1 to Photon Voice 2. Photon Voice will be maintained for the coming months. We will fix important bugs and support new Unity versions but new features will be added only to Photon Voice 2.

PUN Voice Push To Talkデモ

Push To Talkデモでは、以下について説明します:

  • Push-to-Talk機能。
  • プライベートボイスチャット。

このドキュメントではこれらの機能について説明し、使用方法を記載します。

PUN Voice PTT Demo Screenshot
実行中のPUN Voice Push-To-Talkデモ

Push-to-Talkモード

オンデマンドで音声を転送するには:

  • PhotonVoiceSettings.AutoTransmitfalseに設定します。
  • 送信を開始するには、PhotonVoiceRecorder.Transmittrueに設定します。
  • 送信を停止するには、PhotonVoiceRecorder.Transmitfalseに設定しなおします。

このデモでは、キーボードキー(ブロードキャストに'v'、参加アクターの番号に対応する数字キー)とUIボタン(ブロードキャストに「TalkToAll」、 参加アクター番号'X'ごとに「TalkToX」)をPush-to-Talkグループにひもづけ、PushToTalkOnメソッドとPushToTalkOffメソッドを使用します。

## インタレストグループの使用法詳細説明

Photon VoiceはPhoton Realtimeの"インタレストグループ"を使用して、異なる「ボイス会話」に属する相互に排他的な「ボイスチャネル」を切り離しています。

Back To Top

「聞く相手」を選択する

各アクターは、興味のあるインタレストグループに登録する必要があります。 デフォルトで、すべてのアクターはボイスのブロードキャストについてグローバルインタレストグループとみなされる、インタレストグループ0をリッスンするようになっています。 他のグループに送信されたボイスを聞くには、送信先のグループに登録する必要があります。 一度登録したグループから登録解除することもできます。 これらすべての操作方法は以下の通りです。:

PhotonVoiceNetwork.Client.ChangeAudioGroups(groupsToRemove, groupsToAdd);

Back To Top

「話す相手」を選択する

各アクターは、どのインタレストグループに音声を送信するか決定する必要があります。 送信先となるインタレストグループは以下のように設定します。

photonVoiceRecorder.AudioGroup = targetGroup;

Back To Top

ユースケース

全てのケースにおいて、常にデフォルトのインタレストグループ0をリッスンしています。同時に PhotonVoiceRecorder コンポーネントごとにボイスを単一のインタレストグループに送信できます。 ユースケースは3つのカテゴリに分類できます:

Back To Top

1. シングルグローバルグループ

同時に単一のグループを1つ使用して、すべてのクライアントとすべての PhotonVoiceRecorderコンポーネントにボイスを送信する場合は、このグローバルグループに設定・切替を行うショートカットがあります。

PhotonVoiceNetwork.Client.GlobalAudioGroup = targetGroup;

この場合、ChangeAudioGroupsを呼び出したりPhotonVoiceRecorder.AudioGroupを設定する必要はありません。システムが行います。

注:

  • targetGroup0と等しい場合は、デフォルトの挙動になります。 変更を加えたり設定をリセットしない限り、グローバルグループとして明示的に設定する必要はありません。
  • targetGroup0 と等しくない場合でも、同グループに送信されたボイスストリームを受信します。
  • すべての PhotonVoiceRecorder コンポーネント送信はグローバルに設定された同じターゲットグループを使用します。

Back To Top

2. シングルグループをリッスンする

これは、以下が許可されている点でひとつ前のカテゴリとは異なります:

  • PhotonVoiceRecorderごとに別のターゲットグループを設定する
  • リッスンするグループは、話すグループとは別の可能性があります。

Back To Top

A. デフォルトグループ
//  全てのグループから登録解除します。グループが変更されていない場合は任意です。
PhotonVoiceNetwork.Client.ChangeAudioGroups(new byte[0], null);

// ターゲットインタレストグループを設定します
photonVoiceRecorder.AudioGroup = targetGroup;

Back To Top

B. 他のグループ
// リッスンするグループに登録します
PhotonVoiceNetwork.Client.ChangeAudioGroups(new byte[0], new byte[1] { groupToListenTo });

// ターゲットインタレストグループを設定します
photonVoiceRecorder.AudioGroup = targetGroup;

Back To Top

3. 複数のグループをリッスンする

A. 既存のグループすべてをリッスンする
// 既存のグループすべてに登録します
PhotonVoiceNetwork.Client.ChangeAudioGroups(null, new byte[0]);

// ターゲットインタレストグループを設定します
photonVoiceRecorder.AudioGroup = targetGroup;

あとで、この呼び出しの後に生成されたグループに登録する必要があります。

Back To Top

B. グループのAリストをリッスンする
// グループのカスタムリストに登録します
PhotonVoiceNetwork.Client.ChangeAudioGroups(new byte[0], groupsToListenTo);

// ターゲットインタレストグループを設定します
photonVoiceRecorder.AudioGroup = targetGroup;

自分がリッスンしているグループ以外のグループに話すことができます。 例 groupsToListenTotargetGroupを含めませんでした。

Back To Top

C. 可能なグループすべてをリッスンする

こちらは慎重に使用してください。使用されることのないグループにクライアントを登録してしまう可能性があります。

using System;
using System.Linq;
// [...]
byte[] allByteValues = Enumerable.Range(1, 255).SelectMany(BitConverter.GetBytes).ToArray(); 

// 可能なグループ全てに登録します
PhotonVoiceNetwork.Client.ChangeAudioGroups(null, allByteValues);

// ターゲットインタレストグループを設定します
photonVoiceRecorder.AudioGroup = targetGroup;

Back To Top

デモでの音声グループの使用方法

Photon VoiceのPush-to-Talkデモでは、ボイスチャットに2つのオプションを提供しています:

  • 「MuteOthers」を有効化: 上記の3.A.に該当します。 PushToTalkScript.MuteOthersWhileTalkingtrueの場合には、PushToTalkScript.KeepOnlyOneGroup((byte)CurrentTargetGroup);を呼び出します。
  • 「MuteOthers」を非有効化: 上記の2に該当します。 PushToTalkScript.MuteOthersWhileTalkingfalseの場合には、 PushToTalkScript.SubscribeToAllPrivateGroups();を呼び出します。

「MuteOthers」モードは、UIトグルボタンを使用すればいつでも変更できます。

デモ内の音声グループは、以下のように設計されています:

  • アクター4人用のルームがあります。
  • ブロードキャスト対象の音声グループとして、デフォルトグループ0を使用します。
  • 6つの custom private 音声グループが必要です:アクターのペアを、固有のグループコードで計算します。
  • ローカルアクターがルームに参加すると、そのアクターは以前参加していた音声グループに登録します。
  • 新しいリモートアクターがルームに参加すると、ローカルアクターは対応する音声グループに登録します。PushToTalkScript.OnPhotonPlayerConnectedを参照してください。
  • リモートアクターがルームを退出すると、ローカルアクターは対応する音声グループから登録解除します。PushToTalkScript.OnPhotonPlayerDisonnectedを参照してください。
  • 2人のプレイヤー間(ローカルおよびリモート)でのプライベートボイスチャットの音声グループを取得する方法は、以下のとおりです:
// snippet from PushToTalkPrivateButton.SetAudioGroup
if (PhotonNetwork.player.ID < TargetActorNr)
{
    // note: actor numbers should not reach 25
    AudioGroup = (byte) (TargetActorNr + PhotonNetwork.player.ID * 10);
}
else if (PhotonNetwork.player.ID > TargetActorNr)
{
    AudioGroup = (byte) (PhotonNetwork.player.ID + TargetActorNr * 10);
}
else
{
    return;
}

例:アクター1とアクター2の音声グループは12です。

Back To Top

別の変数

プライベート音声グループを「計算」する別の方法は、アクター番号を音声グループとして使用する点です:

  • 各アクターは1つの音声グループに、自分のアクター番号と同じコードで登録します。
  • リモートアクターと話したい場合には、対象の音声グループ(PhotonVoiceRecorder.AudioGroupのみを使用)を対象のアクター番号に設定します。

Back To Top

メリット

  • より少ない音声グループ:アクターと同じ数の音声グループが必要です。
  • より少ない音声グループの切替:1つの音声グループに登録し、登録解除はできません。

Back To Top

デメリット

  • 他のアクターをミュートできません。 あなたと話したいユーザーを、個別に聞くこととなります。

To Document Top