/// <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);
            }
        }