internal static void Update() { AudioExtensionManager.RegisterBuiltinDefinitions(); AudioListener audioListener = AudioExtensionManager.GetAudioListener() as AudioListener; if (audioListener != null) { AudioListenerExtension audioListenerExtension = AudioExtensionManager.AddSpatializerExtension(audioListener); if (audioListenerExtension != null) { audioListenerExtension.ExtensionUpdate(); } } for (int i = 0; i < AudioExtensionManager.m_SourceExtensionsToUpdate.Count; i++) { AudioExtensionManager.m_SourceExtensionsToUpdate[i].ExtensionUpdate(); } AudioExtensionManager.m_NextStopIndex = ((AudioExtensionManager.m_NextStopIndex < AudioExtensionManager.m_SourceExtensionsToUpdate.Count) ? AudioExtensionManager.m_NextStopIndex : 0); int num = (AudioExtensionManager.m_SourceExtensionsToUpdate.Count <= 0) ? 0 : (1 + AudioExtensionManager.m_SourceExtensionsToUpdate.Count / 8); for (int j = 0; j < num; j++) { AudioSourceExtension audioSourceExtension = AudioExtensionManager.m_SourceExtensionsToUpdate[AudioExtensionManager.m_NextStopIndex]; if (audioSourceExtension.audioSource == null || !audioSourceExtension.audioSource.enabled || !audioSourceExtension.audioSource.isPlaying) { audioSourceExtension.Stop(); AudioExtensionManager.RemoveExtensionFromManager(audioSourceExtension); } else { AudioExtensionManager.m_NextStopIndex++; AudioExtensionManager.m_NextStopIndex = ((AudioExtensionManager.m_NextStopIndex < AudioExtensionManager.m_SourceExtensionsToUpdate.Count) ? AudioExtensionManager.m_NextStopIndex : 0); } } }
// This manager Update function calls ExtensionUpdate for all extensions on playing audio sources. It also goes through part of the list of // extensions to determine which ones have stopped and should be removed. The stop check is fairly expensive, so we handle it separately and lazily to // help keep ExtensionUpdate very cheap. Each extension's OnDestroy function is a fail-safe and will remove the extension from the manager's list so // we are never handling destroyed extensions here. static internal void Update() { RegisterBuiltinDefinitions(); AudioListener listener = GetAudioListener() as AudioListener; if (listener != null) { AudioListenerExtension extension = AddSpatializerExtension(listener); if (extension != null) { extension.ExtensionUpdate(); } } for (int i = 0; i < m_SourceExtensionsToUpdate.Count; i++) { m_SourceExtensionsToUpdate[i].ExtensionUpdate(); } m_NextStopIndex = (m_NextStopIndex >= m_SourceExtensionsToUpdate.Count) ? 0 : m_NextStopIndex; // Perform stop checks on roughly 1/8th of the list of playing audio source extensions. We're using that equation instead of a fixed maximum like 10 so // that we don't get into a situation where the game is playing more sounds every frame than we are stop-checking. int numStopChecks = (m_SourceExtensionsToUpdate.Count > 0) ? 1 + (m_SourceExtensionsToUpdate.Count / 8) : 0; for (int i = 0; i < numStopChecks; i++) { AudioSourceExtension extension = m_SourceExtensionsToUpdate[m_NextStopIndex]; if ((extension.audioSource == null) || !extension.audioSource.enabled || !extension.audioSource.isPlaying) { extension.Stop(); RemoveExtensionFromManager(extension); } else { m_NextStopIndex++; m_NextStopIndex = (m_NextStopIndex >= m_SourceExtensionsToUpdate.Count) ? 0 : m_NextStopIndex; } } }