This document is about: VOICE 1
SWITCH TO

Photon Voice1は、Photon Voiceの最初のバージョンです。        現在では、リファクタリング・拡張された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の"インタレストグループ"を使用して、異なる「ボイス会話」に属する相互に排他的な「ボイスチャネル」を切り離しています。

「聞く相手」を選択する

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

C#

PhotonVoiceNetwork.Client.ChangeAudioGroups(groupsToRemove, groupsToAdd);

「話す相手」を選択する

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

C#

photonVoiceRecorder.AudioGroup = targetGroup;

ユースケース

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

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

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

C#

PhotonVoiceNetwork.Client.GlobalAudioGroup = targetGroup;

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

注:

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

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

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

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

C#

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

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

C#

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

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

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

A. 既存のグループすべてをリッスンする

C#

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

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

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

B. グループのAリストをリッスンする

C#

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

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

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

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

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

C#

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

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

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

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

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人のプレイヤー間(ローカルおよびリモート)でのプライベートボイスチャットの音声グループを取得する方法は、以下のとおりです:

C#

// 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です。

別の変数

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

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

メリット

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

デメリット

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