public State(Audio.Window source)
                {
                    this.bypassEffect         = source.bypassEffect;
                    this.bypassListenerEffect = source.bypassListenerEffect;
                    this.bypassReverbEffect   = source.bypassReverbEffect;
                    this.loop = source.loop;

                    this.priority      = source.priority;
                    this.volume        = source.volume;
                    this.pitch         = source.pitch;
                    this.panStereo     = source.panStereo;
                    this.spatialBlend  = source.spatialBlend;
                    this.reverbZoneMix = source.reverbZoneMix;
                }
            public void Apply(Audio.Window source, State startState, State resultState, float value)
            {
                source.bypassEffect         = resultState.bypassEffect;
                source.bypassListenerEffect = resultState.bypassListenerEffect;
                source.bypassReverbEffect   = resultState.bypassReverbEffect;
                source.loop = resultState.loop;

                source.priority      = (int)Mathf.Lerp(startState.priority, resultState.priority, value);
                source.volume        = Mathf.Lerp(startState.volume, resultState.volume, value);
                source.pitch         = Mathf.Lerp(startState.pitch, resultState.pitch, value);
                source.panStereo     = Mathf.Lerp(startState.panStereo, resultState.panStereo, value);
                source.spatialBlend  = Mathf.Lerp(startState.spatialBlend, resultState.spatialBlend, value);
                source.reverbZoneMix = Mathf.Lerp(startState.reverbZoneMix, resultState.reverbZoneMix, value);

                source.ApplySettings();
            }
            public void Apply(Audio.Window source, State resultState)
            {
                source.bypassEffect         = resultState.bypassEffect;
                source.bypassListenerEffect = resultState.bypassListenerEffect;
                source.bypassReverbEffect   = resultState.bypassReverbEffect;
                source.loop = resultState.loop;

                source.priority      = resultState.priority;
                source.volume        = resultState.volume;
                source.pitch         = resultState.pitch;
                source.panStereo     = resultState.panStereo;
                source.spatialBlend  = resultState.spatialBlend;
                source.reverbZoneMix = resultState.reverbZoneMix;

                source.ApplySettings();
            }
        public static void Change(WindowBase window, Source sourceInfo, ClipType clipType, int id, Audio.Window audioSettings)
        {
            var source = sourceInfo.GetSource(window, clipType, id);

            if (source == null)
            {
                return;
            }

            source.bypassEffects         = audioSettings.bypassEffect;
            source.bypassListenerEffects = audioSettings.bypassListenerEffect;
            source.bypassReverbZones     = audioSettings.bypassReverbEffect;
            source.loop = audioSettings.loop;

            source.priority      = audioSettings.priority;
            source.volume        = audioSettings.volume * sourceInfo.GetVolume(clipType);
            source.pitch         = audioSettings.pitch;
            source.panStereo     = audioSettings.panStereo;
            source.spatialBlend  = audioSettings.spatialBlend;
            source.reverbZoneMix = audioSettings.reverbZoneMix;
        }