internal void OnRemoteVoiceInfo(VoiceInfo voiceInfo, ref RemoteVoiceOptions options) { options.OnDecodedFrameFloatAction += this.OnAudioFrame; options.OnRemoteVoiceRemoveAction += this.OnRemoteVoiceRemove; this.audioOutput.Start(voiceInfo.SamplingRate, voiceInfo.Channels, voiceInfo.FrameDurationSamples, this.PlayDelayMs); }
public RemoteVoiceLink(VoiceInfo info, int playerId, int voiceId, int channelId, ref RemoteVoiceOptions options) { this.Info = info; this.PlayerId = playerId; this.VoiceId = voiceId; this.ChannelId = channelId; options.SetOutput(this.OnDecodedFrameFloatAction); options.OnRemoteVoiceRemoveAction = this.OnRemoteVoiceRemoveAction; }
private void OnRemoteVoiceInfo(int channelId, int playerId, byte voiceId, VoiceInfo voiceInfo, ref RemoteVoiceOptions options) { if (this.Logger.IsInfoEnabled) { this.Logger.LogInfo("OnRemoteVoiceInfo channel {0} player {1} voice #{2} userData {3}", channelId, playerId, voiceId, voiceInfo.UserData); } bool duplicate = false; for (int i = 0; i < cachedRemoteVoices.Count; i++) { RemoteVoiceLink remoteVoiceLink = cachedRemoteVoices[i]; if (remoteVoiceLink.PlayerId == playerId && remoteVoiceLink.VoiceId == voiceId) { if (this.Logger.IsWarningEnabled) { this.Logger.LogWarning("Duplicate remote voice info event channel {0} player {1} voice #{2} userData {3}", channelId, playerId, voiceId, voiceInfo.UserData); } duplicate = true; cachedRemoteVoices.RemoveAt(i); break; } } RemoteVoiceLink remoteVoice = new RemoteVoiceLink(voiceInfo, playerId, voiceId, channelId, ref options); cachedRemoteVoices.Add(remoteVoice); if (RemoteVoiceAdded != null) { RemoteVoiceAdded(remoteVoice); } remoteVoice.RemoteVoiceRemoved += delegate { if (this.Logger.IsInfoEnabled) { this.Logger.LogInfo("RemoteVoiceRemoved channel {0} player {1} voice #{2} userData {3}", channelId, playerId, voiceId, voiceInfo.UserData); } if (!cachedRemoteVoices.Remove(remoteVoice) && this.Logger.IsWarningEnabled) { this.Logger.LogWarning("Cached remote voice info not removed for channel {0} player {1} voice #{2} userData {3}", channelId, playerId, voiceId, voiceInfo.UserData); } }; if (SpeakerFactory != null) { Speaker speaker = SpeakerFactory(playerId, voiceId, voiceInfo.UserData); if (speaker != null && duplicate && speaker.IsLinked) { if (this.Logger.IsWarningEnabled) { this.Logger.LogWarning("Overriding speaker link for channel {0} player {1} voice #{2} userData {3}", channelId, playerId, voiceId, voiceInfo.UserData); } speaker.OnRemoteVoiceRemove(); } LinkSpeaker(speaker, remoteVoice); } }
// Token: 0x06000058 RID: 88 RVA: 0x00003460 File Offset: 0x00001660 public void OnRemoteVoiceInfo(int channelId, int playerId, byte voiceId, VoiceInfo voiceInfo, ref RemoteVoiceOptions options) { options.OnDecodedFrameFloatAction = (Action <float[]>) Delegate.Combine(options.OnDecodedFrameFloatAction, new Action <float[]>(delegate(float[] frame) { this.OnAudioFrame(playerId, voiceId, frame); })); options.OnRemoteVoiceRemoveAction = (Action)Delegate.Combine(options.OnRemoteVoiceRemoveAction, new Action(delegate() { this.OnRemoteVoiceRemove(playerId, voiceId); })); KeyValuePair <int, byte> key = new KeyValuePair <int, byte>(playerId, voiceId); if (this.voiceSpeakers.ContainsKey(key)) { Debug.LogWarningFormat("PUNVoice: Info duplicate for voice #{0} of player {1}", new object[] { voiceId, playerId }); } PhotonVoiceSpeaker photonVoiceSpeaker = null; foreach (PhotonVoiceSpeaker photonVoiceSpeaker2 in Object.FindObjectsOfType <PhotonVoiceSpeaker>()) { if (photonVoiceSpeaker2.photonView.viewID == (int)voiceInfo.UserData) { photonVoiceSpeaker = photonVoiceSpeaker2; break; } } if (!(photonVoiceSpeaker == null)) { this.linkVoice(playerId, voiceId, voiceInfo, photonVoiceSpeaker); } if (this.OnRemoteVoiceInfoAction != null) { this.OnRemoteVoiceInfoAction(playerId, voiceId, voiceInfo); } }
} // Dummy constructor public RemoteVoiceLink(VoiceInfo info, int playerId, int voiceId, int channelId, ref RemoteVoiceOptions options) { } // 0x0000000180F44050-0x0000000180F44150
private void OnRemoteVoiceInfo(int channelId, int playerId, byte voiceId, VoiceInfo voiceInfo, ref RemoteVoiceOptions options) { if (this.Logger.IsInfoEnabled) { this.Logger.LogInfo("PhotonVoice: OnRemoteVoiceInfo channel {0} player {1} voice #{2} userData {3}", channelId, playerId, voiceId, voiceInfo.UserData); } if (SpeakerFactory != null) { Speaker speaker = SpeakerFactory(playerId, voiceId, voiceInfo.UserData); if (speaker != null) { speaker.OnRemoteVoiceInfo(voiceInfo, ref options); if (speaker.Actor == null && this.Client.CurrentRoom != null) { speaker.Actor = this.Client.CurrentRoom.GetPlayer(playerId); } if (SpeakerLinked != null) { SpeakerLinked.Invoke(speaker); } } } }