/// <summary> /// Performs periodic work required by the audio engine. /// </summary> /// <remarks>Must be called at least once per frame.</remarks> public void Update() { var cur = _stopwatch.Elapsed; var elapsed = cur - _lastUpdateTime; _lastUpdateTime = cur; var dt = (float)elapsed.TotalSeconds; lock (UpdateLock) { for (var x = 0; x < ActiveCues.Count;) { var cue = ActiveCues[x]; cue.Update(dt); if (cue.IsStopped || cue.IsDisposed) { ActiveCues.Remove(cue); continue; } x++; } } // The only global curves we can process seem to be // specifically for the reverb DSP effect. if (_reverbSettings != null) { for (var i = 0; i < _reverbCurves.Length; i++) { var curve = _reverbCurves[i]; var result = curve.Evaluate(_variables[curve.Variable].Value); var parameter = curve.Parameter - RpcParameter.NumParameters; _reverbSettings[parameter] = result; } SoundEffect.PlatformSetReverbSettings(_reverbSettings); } }