public void SetParameter(ModuleBinding module, ParameterBinding param, object value)
 {
     var binding = new Binding();
     binding.Module = module;
     binding.Parameter = param;
     SetParameter(binding, value);
 }
 public void SetParameter(Binding binding, object value)
 {
     switch(binding.Module)
     {
         case ModuleBinding.Filter1:
             SetParamFilter(binding, value);
             return;
         case ModuleBinding.Filter2:
             SetParamFilter(binding, value);
             return;
         case ModuleBinding.Osc1:
             SetParamOsc(binding, value);
             return;
         case ModuleBinding.Osc2:
             SetParamOsc(binding, value);
             return;
         case ModuleBinding.Osc3:
             SetParamOsc(binding, value);
             return;
         case ModuleBinding.AmpEnv:
             SetParamEnv(binding, value);
             return;
         case ModuleBinding.ModEnv1:
             SetParamEnv(binding, value);
             return;
         case ModuleBinding.ModEnv2:
             SetParamEnv(binding, value);
             return;
         case ModuleBinding.ModEnv3:
             SetParamEnv(binding, value);
             return;
         case ModuleBinding.ModEnv4:
             SetParamEnv(binding, value);
             return;
     }
 }
 static Binding()
 {
     var map = new Binding();
     map.Module = ModuleBinding.None;
     map.Parameter = ParameterBinding.None;
     None = map;
 }
        public static void SetBinding(this System.Windows.Controls.Control control, ModuleBinding module, ParameterBinding parameter)
        {
            var map = new Binding();
            map.Module = module;
            map.Parameter = parameter;

            ParameterBindings[control] = map;
        }
 public static void BindParam(this System.Windows.Controls.Control control, Binding map)
 {
     ParameterBindings[control] = map;
 }
 public static void UpdateParameter(Binding binding, object value)
 {
     if(GlobalController != null)
         GlobalController.SetParameter(binding, value);
 }
        private void SetParamOsc(Binding binding, object value)
        {
            if (binding.Parameter == ParameterBinding.Wave)
            {
                //SetWave((double)value);
                return;
            }

            IOscillator module = null;

            foreach (var voice in Manager.Voices)
            {
                if (binding.Module == ModuleBinding.Osc1)
                    module = voice.Osc1;
                else if (binding.Module == ModuleBinding.Osc2)
                    module = voice.Osc2;
                else
                    return;

                switch (binding.Parameter)
                {
                    case ParameterBinding.Octave:
                        module.Octave = (double)value; return;
                    case ParameterBinding.Semi:
                        module.Semi = (double)value; return;
                    case ParameterBinding.Cent:
                        module.Cent = (double)value; return;
                    case ParameterBinding.WavePosition:
                        (module as WavetableOsc).CurrentWaveIndex = (double)value; return;
                }
            }
        }
        private void SetParamFilter(Binding binding, object value)
        {
            NetSynth.Modules.LadderFilter module = null;

            foreach(var voice in Manager.Voices)
            {
                if (binding.Module == ModuleBinding.Filter1)
                    module = voice.Filter1;
                else if (binding.Module == ModuleBinding.Filter2)
                    module = voice.Filter2;
                else
                    return;

                switch(binding.Parameter)
                {
                    case (ParameterBinding.Cutoff):
                        module.Cutoff = (double)value; return;
                    case (ParameterBinding.Resonance):
                        module.Resonance = (double)value; return;
                    case (ParameterBinding.X):
                        module.VX = (double)value; return;
                    case (ParameterBinding.A):
                        module.VA = (double)value; return;
                    case (ParameterBinding.B):
                        module.VB = (double)value; return;
                    case (ParameterBinding.C):
                        module.VC = (double)value; return;
                    case (ParameterBinding.D):
                        module.VD = (double)value; return;
                }
            }
        }
        private void SetParamEnv(Binding binding, object value)
        {
            AudioLib.Modules.Ahdsr module = null;

            foreach (var voice in Manager.Voices)
            {
                if (binding.Module == ModuleBinding.AmpEnv)
                    module = voice.AmpEnv;
                else if (binding.Module == ModuleBinding.ModEnv1)
                    module = voice.ModEnv1;
                else if (binding.Module == ModuleBinding.ModEnv2)
                    module = voice.ModEnv2;
                else if (binding.Module == ModuleBinding.ModEnv3)
                    module = voice.ModEnv3;
                else if (binding.Module == ModuleBinding.ModEnv4)
                    module = voice.ModEnv4;
                else
                    return;

                switch (binding.Parameter)
                {
                    case (ParameterBinding.Attack):
                        module.Attack = (double)value; return;
                    case (ParameterBinding.Hold):
                        module.Hold = (double)value; return;
                    case (ParameterBinding.Decay):
                        module.Decay = (double)value; return;
                    case (ParameterBinding.Sustain):
                        module.Sustain = (double)value; return;
                    case (ParameterBinding.Release):
                        module.Release = (double)value; return;
                }
            }
        }