void SendVoiceIfReady() { int currentPosition = Microphone.GetPosition(_currentMic); //Debug.Log(currentPosition + " " + Microphone.IsRecording(_currentMic)); if (currentPosition < _previousPosition) { _numTimesLooped++; } //int numSourceSamples = !_mumbleClient.UseSyntheticSource ? NumSamplesInMicBuffer : TestingClipToUse.samples; int totalSamples = currentPosition + _numTimesLooped * NumSamplesInMicBuffer; //int totalSamples = currentPosition + _numTimesLooped * numSourceSamples; _previousPosition = currentPosition; while (totalSamples - _totalNumSamplesSent >= NumSamplesPerOutgoingPacket) { PcmArray newData = _mumbleClient.GetAvailablePcmArray(); if (!_mumbleClient.UseSyntheticSource) { SendAudioClip.GetData(newData.Pcm, _totalNumSamplesSent % NumSamplesInMicBuffer); } else { TestingClipToUse.GetData(newData.Pcm, _totalNumSamplesSent % TestingClipToUse.samples); } //Debug.Log(Time.frameCount + " " + currentPosition); _totalNumSamplesSent += NumSamplesPerOutgoingPacket; if (VoiceSendingType == MicType.Amplitude) { if (AmplitudeHigherThan(MinAmplitude, newData.Pcm)) { _sampleNumberOfLastMinAmplitudeVoice = _totalNumSamplesSent; _mumbleClient.SendVoicePacket(newData); } else { if (_totalNumSamplesSent > _sampleNumberOfLastMinAmplitudeVoice + _voiceHoldSamples) { _mumbleClient.ReleasePcmArray(newData); continue; } _mumbleClient.SendVoicePacket(newData); // If this is the sample before the hold turns off, stop sending after it's sent if (_totalNumSamplesSent + NumSamplesPerOutgoingPacket > _sampleNumberOfLastMinAmplitudeVoice + _voiceHoldSamples) { _mumbleClient.StopSendingVoice(); } } } else { _mumbleClient.SendVoicePacket(newData); } } }