Recorderコンポーネント

Recorderは、オーディオストリームの通信を行うコンポーネントです。 このコンポーネントを使用して、何をストリーミングするか(入力オーディオソース)、どのようにストリーミングするか(オーディオ品質)、いつ通信を開始および停止するか(通信の切り替え)、そして誰に通信するか(受信ターゲット)を選択します。 また、Recorderは初期化が必要です。

Contents

入力オーディオソース

Recorderは、ストリーミングするためのさまざまなタイプの入力オーディオフィードに対応しています。 最も典型的なものは、ボイスチャットに使用されるマイクです。 ただし、Recorderは他の2つのタイプの入力ソースに対応しています。

Back To Top

マイク

Recorderで転送される音声ストリーム用の入力ソースタイプとしてマイクを使用するには、Recorder.SourceTypeRecorder.InputSourceType.Microphoneに設定します。

Back To Top

マイクの選択

Photonには、マイクAPIが使用する2つのオプションがあります。 Recorder.MicrophoneTypeを使用すると、各レコーダー固有のマイク入力デバイスの種類を設定できます。 2つの異なる値は以下のとおりです。

Unity:

デフォルトでは、すべてのプラットフォームでUnityのマイクAPIを利用しています。 UnityはMicrophone.devices配列の文字列を使用して利用可能なすべてのオーディオ入力デバイスを公開します。 マイクデバイスは、その文字列名またはその配列内のインデックスを使用して識別することができます。 デフォルトではその配列の最初の要素が使用されています。 別のデバイスを明示的に設定したい場合は、Recorder.UnityMicrophoneDeviceを使用してください。

UnityのマイクAPIを使用するには、Recorder.MicrophoneTypeRecorder.MicType.Unityに設定します。

Photon:

Unityは、ほぼ同じコードベースを使用して複数のプラットフォームを簡単にターゲットにするのに最適です。 しかし、場合によってはUnityのマイクAPIには制限があり、いくつかの問題があります。 そのため、弊社はオーディオ入力デバイスと直接通信して、UnityのマイクAPIをバイパスする独自の方法を導入しました。 主な理由の1つは、デバイスのハードウェアに内蔵されたエコーキャンセレーションを利用することです。 Android、iOS、Windows、macOSの4つの主要プラットフォーム用にネイティブプラグインを実装しました。

ただし、利用可能なマイクの一覧の列挙は、macOSとWindowsでのみ利用可能です。 AndroidとiOSでは、システムで使用されているデフォルトのオーディオ入力デバイスを使用します。 次のように、Recorder.PhotonMicrophoneEnumeratorを使用して、利用可能な「Photonマイク」のリストを確認できます。

var enumerator = Recorder.PhotonMicrophoneEnumerator;
if (enumerator.IsSupported)
{
    for (int i = 0; i < enumerator.Count; i++)
    {
        Debug.LogFormat("PhotonMicrophone Index={0} ID={1} Name={2}", i, enumerator.IDAtIndex(i),
            enumerator.NameAtIndex(i));
    }
}

Recorder.PhotonMicrophoneDeviceIdを使用してマイクを設定することができます。

PhotonのマイクAPIを使用するには、Recorder.MicrophoneTypeRecorder.MicType.Photonに設定してください。

Back To Top

Unityエディターの検討

マイクAPIの選択(UnityもしくはPhoton)については、Unityエディターと出力ビルド間で存続しますが、実際のデバイスについては選択の余地がありません。 Unityエディターで使用できるマイクデバイスのリストは、ビルドが実行されるマシン上では同一ではない可能性があります。 ビルドは、異なるプラットフォーム上で、異なるシステム、異なる音声入力デバイスを使用して実行できます。 このため、必要に応じてデフォルトのマイクから別のマイクへの切り替えが可能です。利用できる場合には、ランタイム時にビルドクライアントから明示的にコードで 切り替えをおこなうこともできます。

Back To Top

マイクアクセス:録音とミュート

設計上、Recorderコンポーネントは初期化されると自動的に記録を開始します。

Photon Voiceバージョン2.5以降、新しいプロパティRecorder.IsRecordingが導入されました。 この値は、レコーダーが初期化されると、実行時に設定できます(再生モード)。

したがって、録音を停止してマイクを「リリース」する場合は、Recorder.IsRecordingfalseに設定します。 記録を再開するには、trueに戻します。

設計上、録音が無効になっている場合に音声ストリームは完全に無くなります。

マイクを「ローカル」にミュートするオプション(「セルフミュート」)を行いたい場合は、Recorder.TransmitEnabledまたはRecorder.IsRecordingを使用します。

Back To Top

オーディオクリップのストリーミング

このオプションは、Photon Voiceの通信をテストするために導入されました。 ただし、他の目的で使用することもできます。 同じルームに参加している他のプレーヤーにオーディオクリップをブロードキャストするには、Unityでサポートされているオーディオメディアファイルを Recorder.AudioClipに割り当てる必要があります。 これは、Unity Editorからインスペクターにドラッグアンドドロップすることで実行できます。 オーディオクリップを毎回再生する場合は、Recorder.LoopAudioCliptrueに設定されていることを確認するか、RecorderのインスペクターのUnityエディターから 「Loop」にチェックマークを付けます。

Back To Top

カスタムファクトリー

Photon Recorderを使用すると、どのようなユースケースでも、独自のカスタムオーディオソースを使用できます。 詳細はこちらをご確認ください:「カスタムの音声ソースを使用する方法は?

Back To Top

オーディオ品質

コーデックパラメータが主な要因です:

  • SamplingRate: オーディオが1秒間に何回測定されるかの頻度。基本的に、これは希望するオーディオ品質を定義します。 設定可能な値は、8、12、16、24、および48 kHzです。デフォルトは24 kHzです。
  • FrameDuration: ミリ秒単位の発信オーディオストリームエンコーダーの遅延(時間単位のバッファサイズ)。設定可能な値は5、10、20、40、80、および120ミリ秒です。デフォルトは20ミリ秒です。
  • Bitrate: 一定時間(秒)にわたって処理されたデータ量(ビット数)。基本的に、これは圧縮品質を定義します。デフォルト値は30000 b/秒です。

Back To Top

その他のストリーム設定

  • Encrypt: trueの場合、すべての発信ボイスストリームは暗号化されます。デフォルトはfalseです。 詳細は暗号化を参照してください。
  • ReliableMode: trueの場合、すべての発信ボイスストリームは信頼できるモードになります。デフォルトはfalseです。

Back To Top

通信の切り替え

Recorder.TransmitEnabledを使用して通信を切り替えることができます。 無用なバックグラウンドノイズの送信を防ぐために使用できるVoiceDetectionもあります。

Back To Top

Push-to-Talk

Photon Voiceを使ってpush-to-talk機能を使うのは簡単です。 ボイスの録音と通信を手動で切り替える必要があります。 マイクのミュートをオン/オフするようなものです。 push-to-talkを開始するには、Recorder.TransmitEnabledtrueに設定するだけです。 停止するには、値をfalseに戻します。 これを実現するには、プロパティをユーザー入力(UIボタンまたはキーボードショートカット)にバインドします。

Back To Top

ボイスの検出

ボイス検出は、録音された音声をフィルタリングし、事前定義された信号レベルのしきい値を超えた場合にのみ通信を行う任意の機能です。 つまり、発話を停止するとボイス通信は自動的に一時停止され、通話を開始するとボイス通信は再開されます。 無駄なノイズの送信を防ぎ、トラフィックを減らすのにも役立ちます。

VoiceDetectionThresholdのデフォルト値は0,01です。 これは、ボイス検出キャリブレーションとノイズレベル測定を使った実験の結果として、一般的な環境に推奨される値です。

Back To Top

ボイスキャリブレーション

ボイス検出がオンになっていても音声を録音するときに問題が解決しない場合は、ボイスキャリブレーションが必要かもしれません。 Photon Voiceには、時間が限られている自動キャリブレーションモードがあります。 キャリブレーションモードを開始するには、 Recorder.VoiceDetectorCalibrate(period)を呼び出す必要があります。 デフォルトのキャリブレーション期間は2000ミリ秒ですが、も変更可能です。 キャリブレーションを使用して、Photon Voiceは無音とラウドネスのしきい値を自動的に調整します。

Back To Top

受信ターゲット

これはオーディオグルー​​プを介して行われます。 DebugEchoModeが有効になっていれば、必要に応じて独自のストリームを受け取ることができます。

Back To Top

インタレストグループ

Photon Voiceはブロードキャスト専用ではありません。 お互いに干渉することなく同時に複数の会話を続けさせる機能をプレイヤーに提供することができます。 これは「インタレストグループ」を使用することで実現できます。 「インタエレストグループ」は番号によって識別されます (byte)。 複数のグループから購読および購読解除することができます。 しかしながら、一度に1つのグループにしかオーディオを通信できません。

デフォルトでは、レコーダーのインタレストグループは0に設定されています。各プレーヤーは他の全員と会話できます。 ターゲットのインタレストグループを設定するには、Recorder.InterestGroupを設定します。

リッスンしたいグループを複数選択できます。 デフォルトでは、すべての音声クライアントはグループ0のみにサブスクライブされます。 登録しているグループのリストを更新するには、次の方法を使用できます。

VoiceConnection.Client.OpChangeGroups(byte[] groupsToRemove, byte[] groupsToAdd);

オーディオグルー​​プを変更する際は、次の点に注意してください。

  • 「ボイスルーム」に参加したときにのみ行うことができます。
  • グループを追加または削除しない場合は、それぞれのパラメータにnullを渡します。
  • 既存のすべてのグループを追加または削除する場合は、それぞれのパラメータに空の配列(byte[0])を渡します。
  • デフォルトのオーディオグルー​​プ(0)からは購読解除することはできません。

オーディオグルー​​プとPush-to-Talk を組み合わせることにより、ゲームに素晴らしい機能を追加することができます。

Back To Top

デバッグエコーモード

このモードを有効にすると、ローカルのRecorderによって通信されたオーディオストリームを同じボイスクライアントで受信することができます。 これはデバッグ目的のいくつかのユースケースに役立ちます:

  • ルームに一人のアクターのみが参加している状態でオーディオの品質、遅延、設定のテストを行う場合(特に開発の初期段階で)。
  • 自分のマイクやスピーカーのテストを行う場合。
  • 独自のエコーまたは実際のブロードキャストが必要なその他のケース。

デバッグエコーモードは、インタレストグループ0でのみ機能します。

Back To Top

Primary Recorder

ほとんどの場合、単一のRecorderコンポーネントが使用されるため、VoiceConnection.PrimaryRecorder (or PhotonVoiceNetwork.PrimaryRecorder)からアクセスできる「Primary Recorder」という単一のデフォルトRecorderのショートカットを提供しています。 Unity Editorまたはコードを使用して設定できます。

Back To Top

初期化

作動させるには、Recorderを初期化する必要があります。 PrimaryRecorderは自動的に初期化されます。 PUNインテグレーションでは、レコーダーはPhotonVoiceViewを使用して自動的に初期化されます。 その他の使用例、または自動初期化が何らかの原因で失敗した場合には、以下の2つの方法のいずれかを使用して手動でRecorderを初期化することができます:

  • VoiceConnection.InitRecorder(Recorder) (または PhotonVoiceNetwork.InitRecorder(Recorder))
  • Recorder.Init(VoiceConnection)

デフォルトでは、初期化されるとRecorderは自動的に記録を開始します。 この挙動を無効化するには、初期化の後にRecorder.StartRecording()を使用して手動で記録を開始し、Recorder.AutoStartfalseに設定します。 記録を停止するには、Recorder.StopRecording()を使用します。

Back To Top

再起動

記録を開始する前に必要なRecorder設定を設定する必要があります。設定しない場合は、 Recorder.RestartRecording()を使用して再起動する必要があります。

Recorderを再起動する必要があるかどうかを把握するには、フラグRecorder.RequiresRestartのような'IsDirty'を確認します。

以下を有効化するには、変更後に初期化が必要です:

  • Recorder.UserData
  • Recorder.AudioSourceFactory
  • Recorder.UnityMicrophoneDevice
  • Recorder.PhotonMicrophoneDeviceId
  • Recorder.Source
  • Recorder.MicrophoneType
  • Recorder.TypeConvert
  • Recorder.AudioClip
  • Recorder.SamplingRate
  • Recorder.FrameDuration
  • Recorder.Bitrate

以下は送信が有効の場合にすぐに有効となるため、再起動は不要です:

  • Recorder.TransmitEnabled
  • Recorder.Encrypt
  • Recorder.ReliableMode
  • Recorder.DebugEchoMode
  • Recorder.VoiceDetection
  • Recorder.VoiceDetectionThreshold
  • Recorder.VoiceDetectionDelayMs
  • Recorder.AudioGroup
  • Recorder.LoopAudioClip (if conditions are met)

Back To Top

システム変更に対応

システム設定に入力または出力オーディオデバイスを追加または削除したり、デフォルトのデバイスを切り替えたりすると、Photon Voiceが正常に動作しなくなることがあります。 Photon Voice 2.5以降、新しいプロパティRecorder.ReactOnSystemChangesを導入しました。これを有効にするとRecorderが自動的に再初期化され、そういったシステムの変更から回復します。 下位互換性のため、デフォルト値はfalseです。 この値は、編集モードまたは再生モードで設定できます。

ドキュメントのトップへ戻る