예제 #1
0
        public void OpenEditor(IntPtr parentWindow)
        {
            Logging.Log("Open editor");

            if (EditorView == null)
            {
                EditorView = new EditorView(this)
                {
                    Width = DevInfo.EditorWidth, Height = DevInfo.EditorHeight
                };
            }

            DevInfo.EditorWidth  = (int)EditorView.Width;
            DevInfo.EditorHeight = (int)EditorView.Height;
            HostInfo.SendEvent(DeviceId, new Event {
                Data = null, EventIndex = 0, Type = EventType.WindowSize
            });
            window = new System.Windows.Window()
            {
                Content = EditorView
            };
            window.Width  = EditorView.Width;
            window.Height = EditorView.Height;
            DeviceUtilities.DockWpfWindow(window, parentWindow);
            window.Show();
        }
예제 #2
0
        public void InitializeDevice()
        {
#if DEBUG
            devInfo.DeviceID = "Low Profile - Polyhedrus - DEV";
#else
            devInfo.DeviceID = "Low Profile - Polyhedrus";
#endif
            devInfo.Developer        = "Valdemar Erlingsson";
            devInfo.EditorWidth      = 995;
            devInfo.EditorHeight     = 386;
            devInfo.HasEditor        = true;
            devInfo.Name             = "Polyhedrus Synthesizer";
            devInfo.ProgramCount     = 1;
            devInfo.Type             = DeviceType.Generator;
            devInfo.Version          = 1000;
            devInfo.UnsafeProcessing = true;
            devInfo.VstId            = DeviceUtilities.GenerateIntegerId(devInfo.DeviceID);

            PortInfo[0].Direction        = PortDirection.Output;
            PortInfo[0].Name             = "Stereo Output";
            PortInfo[0].NumberOfChannels = 2;

            for (int i = 0; i < 0; i++)
            {
                var p = new SharpSoundDevice.Parameter();
                p.Display        = "0.0";
                p.Index          = (uint)i;
                p.Name           = "Parameter " + i;
                p.Steps          = 0;
                p.Value          = 0.0;
                ParameterInfo[i] = p;
            }
        }
예제 #3
0
        public void InitializeDevice()
        {
            DevInfo.DeviceID = "Low Profile - Polyhedrus.V2";
#if DEBUG
            DevInfo.DeviceID = DevInfo.DeviceID + " - Dev";
#endif

            DevInfo.Developer    = "Valdemar Erlingsson";
            DevInfo.EditorHeight = 655;
            DevInfo.EditorWidth  = 990;
            DevInfo.HasEditor    = true;
            DevInfo.Name         = "Polyhedrus Software Synthesizer";
            DevInfo.ProgramCount = 1;
            DevInfo.Type         = DeviceType.Generator;
            DevInfo.Version      = 1000;
            DevInfo.VstId        = DeviceUtilities.GenerateIntegerId(DevInfo.DeviceID);

            PortInfo[0].Direction        = PortDirection.Output;
            PortInfo[0].Name             = "Stereo Output";
            PortInfo[0].NumberOfChannels = 2;

            for (int i = 0; i < ParameterInfo.Length; i++)
            {
                var p = new Parameter();
                p.Display        = "0.0";
                p.Index          = (uint)i;
                p.Name           = "Parameter";
                p.Steps          = 0;
                p.Value          = 0.0;
                ParameterInfo[i] = p;
                //UpdateParameterDisplay(i, 0.5);
            }
        }
        public Program GetProgramData(int index)
        {
            var output = new Program();

            output.Data = DeviceUtilities.SerializeParameters(ParameterInfo);
            output.Name = "";
            return(output);
        }
예제 #5
0
 public void OpenEditor(IntPtr parentWindow)
 {
     View = new SynthView(VM);
     HostInfo.SendEvent(this, new Event()
     {
         Data = null, EventIndex = 0, Type = EventType.WindowSize
     });
     DeviceUtilities.DockWpfWindow(View, parentWindow);
 }
 public void SetProgramData(Program program, int index)
 {
     try
     {
         DeviceUtilities.DeserializeParameters(ParameterInfo, program.Data);
     }
     catch (Exception)
     {
     }
 }
예제 #7
0
 public void SetProgramData(Program program, int index)
 {
     try
     {
         DeviceUtilities.DeserializeParameters(ParameterInfo, program.Data);
         Update(null);
     }
     catch (Exception)
     {
         System.Windows.Forms.MessageBox.Show("Unable to load preset");
     }
 }
 public void OpenEditor(IntPtr parentWindow)
 {
     HostInfo.SendEvent(DeviceId, new Event()
     {
         Data = null, EventIndex = 0, Type = EventType.WindowSize
     });
     window = new ScriptWindow();
     window.ViewInstance.DataContext = ViewModel;
     ViewModel.CurrentDispatcher     = window.Dispatcher;
     window.Topmost       = true;
     window.ShowInTaskbar = false;
     window.Show();
     DeviceUtilities.DockWpfWindow(window, parentWindow);
 }
예제 #9
0
 public void SetProgramData(Program program, int index)
 {
     try
     {
         DeviceUtilities.DeserializeParameters(ParameterInfo, program.Data);
         for (int i = 0; i < ParameterInfo.Length; i++)
         {
             SetParameter(i, ParameterInfo[i].Value);
         }
     }
     catch (Exception)
     {
     }
 }
예제 #10
0
        public void InitializeDevice()
        {
            DevInfo.DeviceID = "Low Profile - Mr. Fuzz";
#if DEBUG
            DevInfo.DeviceID = DevInfo.DeviceID + " - Dev";
#endif
            DevInfo.Developer = "Valdemar Erlingsson";
            //DevInfo.EditorHeight = e.Height;
            //DevInfo.EditorWidth = e.Width;
            DevInfo.HasEditor    = false;
            DevInfo.Name         = "Mr. Fuzz";
            DevInfo.ProgramCount = 1;
            DevInfo.Type         = DeviceType.Effect;
            DevInfo.Version      = 1000;
            DevInfo.VstId        = DeviceUtilities.GenerateIntegerId(DevInfo.DeviceID);

            PortInfo[0].Direction        = PortDirection.Input;
            PortInfo[0].Name             = "Mono Input";
            PortInfo[0].NumberOfChannels = 1;

            PortInfo[1].Direction        = PortDirection.Output;
            PortInfo[1].Name             = "Stereo Output";
            PortInfo[1].NumberOfChannels = 2;

            for (int i = 0; i < ParameterInfo.Length; i++)
            {
                var p = new Parameter();
                p.Display        = "0.5";
                p.Index          = (uint)i;
                p.Name           = ParameterNames[i];
                p.Steps          = 0;
                p.Value          = 0.5;
                ParameterInfo[i] = p;
            }

            HpInput    = new Highpass1((float)Samplerate);
            TFStage    = new MrFuzz.TFStage((float)Samplerate);
            DiodeStage = new LUT();
            DiodeStage.ReadRecord(Table.DiodeResponse);
            DiodeStage.Table = Utils.MovingAve(DiodeStage.Table, (int)(DiodeStage.Table.Length / 200.0));
            DiodeStage.Table = Table.Upsample(DiodeStage.Table, 100000);
            LowpassFilter    = new Lowpass1((float)Samplerate);
            HpOutput         = new Highpass1((float)Samplerate);

            // initialize all blocks
            UpdateAll();
        }
        public void InitializeDevice()
        {
            DevInfo.DeviceID = "Low Profile - Preset Selector";
#if DEBUG
            DevInfo.DeviceID = DevInfo.DeviceID + " - Dev";
#endif
            DevInfo.Developer    = "Valdemar Erlingsson";
            DevInfo.EditorHeight = 550;
            DevInfo.EditorWidth  = 570;
            DevInfo.HasEditor    = true;
            DevInfo.Name         = "Preset Selector";
            DevInfo.ProgramCount = 1;
            DevInfo.Type         = DeviceType.Generator;
            DevInfo.Version      = 1000;
            DevInfo.VstId        = DeviceUtilities.GenerateIntegerId(DevInfo.DeviceID);
            UpdateAll();
        }
예제 #12
0
        public LiveSPICEPlugin()
        {
            DevInfo                  = new DeviceInfo();
            DevInfo.Developer        = "";
            DevInfo.DeviceID         = "LiveSPICEVst";
            DevInfo.EditorHeight     = 200;
            DevInfo.EditorWidth      = 350;
            DevInfo.HasEditor        = true;
            DevInfo.Name             = "LiveSPICEVst";
            DevInfo.ProgramCount     = 1;
            DevInfo.Type             = DeviceType.Effect;
            DevInfo.UnsafeProcessing = true;
            DevInfo.Version          = 1000;
            DevInfo.VstId            = DeviceUtilities.GenerateIntegerId(DevInfo.DeviceID);

            string     codeBase = Assembly.GetExecutingAssembly().CodeBase;
            UriBuilder uri      = new UriBuilder(codeBase);
            string     path     = Uri.UnescapeDataString(uri.Path);

            // Not sure if this helps, but...
            GCSettings.LatencyMode = GCLatencyMode.SustainedLowLatency;

            ParameterInfo = new Parameter[0];

            PortInfo = new SharpSoundDevice.Port[2]
            {
                new SharpSoundDevice.Port()
                {
                    Direction = PortDirection.Input, Name = "Mono Input", NumberOfChannels = 1
                },
                new SharpSoundDevice.Port()
                {
                    Direction = PortDirection.Output, Name = "Mono Output", NumberOfChannels = 1
                }
            };

            // Initialize as arrays of arrays, even though we are only using one channel, since that is what the simulation takes
            inputBuffers    = new double[1][];
            inputBuffers[0] = null;

            outputBuffers    = new double[1][];
            outputBuffers[0] = null;

            SimulationProcessor = new SimulationProcessor();
        }
예제 #13
0
        public void InitializeDevice()
        {
            DevInfo.DeviceID = "Low Profile - Biquad";
#if DEBUG
            DevInfo.DeviceID = DevInfo.DeviceID + " - Dev";
#endif
            DevInfo.Developer    = "Valdemar Erlingsson";
            DevInfo.EditorHeight = 0;
            DevInfo.EditorWidth  = 0;
            DevInfo.HasEditor    = false;
            DevInfo.Name         = "Biquad Filter";
            DevInfo.ProgramCount = 1;
            DevInfo.Type         = DeviceType.Effect;
            DevInfo.Version      = 1000;
            DevInfo.VstId        = DeviceUtilities.GenerateIntegerId(DevInfo.DeviceID);

            PortInfo[0].Direction        = PortDirection.Input;
            PortInfo[0].Name             = "Stereo Input";
            PortInfo[0].NumberOfChannels = 2;

            PortInfo[1].Direction        = PortDirection.Output;
            PortInfo[1].Name             = "Stereo Output";
            PortInfo[1].NumberOfChannels = 2;

            for (int i = 0; i < ParameterInfo.Length; i++)
            {
                var p = new Parameter();
                p.Display        = "0.0";
                p.Index          = (uint)i;
                p.Name           = ParameterNames[i];
                p.Steps          = 0;
                p.Value          = 0.0;
                ParameterInfo[i] = p;
            }

            SetParameter(P_TYPE, 0.0);
            SetParameter(P_FREQ, 0.5);
            SetParameter(P_SLOPE, 0.5);
            SetParameter(P_Q, 0.5);
            SetParameter(P_GAIN, 0.5);
        }
예제 #14
0
        public void InitializeDevice()
        {
            DevInfo.DeviceID     = "Low Profile - Testbed";
            DevInfo.Developer    = "Valdemar Erlingsson";
            DevInfo.EditorHeight = 0;
            DevInfo.EditorWidth  = 0;
            DevInfo.HasEditor    = false;
            DevInfo.Name         = "Testbed";
            DevInfo.ProgramCount = 1;
            DevInfo.Type         = Container.IsSynth ? DeviceType.Generator : DeviceType.Effect;
            DevInfo.Version      = 1000;
            DevInfo.VstId        = DeviceUtilities.GenerateIntegerId(DevInfo.DeviceID);

            PortInfo[0].Direction        = PortDirection.Input;
            PortInfo[0].Name             = "Stereo Input";
            PortInfo[0].NumberOfChannels = 2;

            PortInfo[1].Direction        = PortDirection.Output;
            PortInfo[1].Name             = "Stereo Output";
            PortInfo[1].NumberOfChannels = 2;

            for (int i = 0; i < ParameterInfo.Length; i++)
            {
                var p = new Parameter();
                p.Display = Container.GetDisplay(i);
                p.Index   = (uint)i;
                if (Container.ParameterNames != null && Container.ParameterNames.Length > i)
                {
                    p.Name = Container.ParameterNames[i];
                }
                else
                {
                    p.Name = "Param " + i;
                }
                p.Steps          = 0;
                p.Value          = Container.Parameters[i];
                ParameterInfo[i] = p;
            }
        }
예제 #15
0
        protected override void OnBegin(PathEditContext pathEditContext, MouseDevice mouseDevice)
        {
            PerformanceUtility.MeasurePerformanceUntilRender(PerformanceEvent.EditPath);
            Vector lastTangent = this.LastTangent;

            base.OnBegin(pathEditContext, mouseDevice);
            PathGeometryEditor pathGeometryEditor     = this.BeginEditing();
            Matrix             elementTransformToRoot = this.EditingElementTransformToRoot;
            Point  lastPoint       = this.GetLastPoint(pathEditContext.FigureIndex);
            Point  point1          = elementTransformToRoot.Transform(lastPoint);
            Vector vector          = this.GetPointInViewRootCoordinates(mouseDevice, true) - point1;
            Size   devicePixelSize = DeviceUtilities.GetDevicePixelSize(this.View.Zoom);

            if (Math.Abs(vector.X) < devicePixelSize.Width / 2.0)
            {
                vector.X = 0.0;
            }
            if (Math.Abs(vector.Y) < devicePixelSize.Height / 2.0)
            {
                vector.Y = 0.0;
            }
            Vector correspondingVector = ElementUtilities.GetCorrespondingVector(vector, elementTransformToRoot, this.IsShiftDown ? this.AxisConstraint : (AxisConstraint)null);
            Point  point2 = lastPoint + correspondingVector;

            if (VectorUtilities.IsZero(lastTangent))
            {
                pathGeometryEditor.AppendLineSegment(point2, pathEditContext.FigureIndex);
            }
            else
            {
                Point q = lastPoint + lastTangent;
                pathGeometryEditor.AppendCubicBezier(q, point2, point2, pathEditContext.FigureIndex);
            }
            int        figureIndex = pathEditContext.FigureIndex;
            PathFigure figure      = this.Path.Figures[figureIndex];

            this.PathEditContext = new PathEditContext(figureIndex, PathFigureUtilities.PointCount(figure) - 1);
            this.Initialize(elementTransformToRoot.Transform(point2), true, elementTransformToRoot);
        }
예제 #16
0
        public void InitializeDevice()
        {
            DevInfo.DeviceID = "Low Profile - Script Plugin";
#if DEBUG
            DevInfo.DeviceID = DevInfo.DeviceID + " - Dev";
#endif
            DevInfo.Developer    = "Valdemar Erlingsson";
            DevInfo.EditorHeight = 1;
            DevInfo.EditorWidth  = 1;
            DevInfo.HasEditor    = true;
            DevInfo.Name         = "Script Plugin";
            DevInfo.ProgramCount = 1;
            DevInfo.Type         = DeviceType.Generator;
            DevInfo.Version      = 1000;
            DevInfo.VstId        = DeviceUtilities.GenerateIntegerId(DevInfo.DeviceID);

            //PortInfo[0].Direction = PortDirection.Input;
            //PortInfo[0].Name = "Stereo Input";
            //PortInfo[0].NumberOfChannels = 2;

            PortInfo[0].Direction        = PortDirection.Output;
            PortInfo[0].Name             = "Stereo Output";
            PortInfo[0].NumberOfChannels = 2;

            /*for (int i = 0; i < ParameterInfo.Length; i++)
             * {
             *      var p = new Parameter();
             *      p.Display = "0.5";
             *      p.Index = (uint)i;
             *      p.Name = ParameterNames[i];
             *      p.Steps = 0;
             *      p.Value = 0.5;
             *      ParameterInfo[i] = p;
             * }*/

            // initialize all blocks
            UpdateAll();
        }
예제 #17
0
        public void InitializeDevice()
        {
            DevInfo.DeviceID = "Low Profile - Rodent.V2";
#if DEBUG
            DevInfo.DeviceID = DevInfo.DeviceID + " - Dev";
#endif
            DevInfo.Developer    = "Valdemar Erlingsson";
            DevInfo.EditorHeight = e.Height;
            DevInfo.EditorWidth  = e.Width;
            DevInfo.HasEditor    = true;
            DevInfo.Name         = "Rodent V2";
            DevInfo.ProgramCount = 1;
            DevInfo.Type         = DeviceType.Effect;
            DevInfo.Version      = 2200;
            DevInfo.VstId        = DeviceUtilities.GenerateIntegerId(DevInfo.DeviceID);

            PortInfo[0].Direction        = PortDirection.Input;
            PortInfo[0].Name             = "Mono Input";
            PortInfo[0].NumberOfChannels = 1;

            PortInfo[1].Direction        = PortDirection.Output;
            PortInfo[1].Name             = "Stereo Output";
            PortInfo[1].NumberOfChannels = 2;

            for (int i = 0; i < ParameterInfo.Length; i++)
            {
                var p = new Parameter();
                p.Display        = "0.49";
                p.Index          = (uint)i;
                p.Name           = ParameterNames[i];
                p.Steps          = 0;
                p.Value          = 0.49;
                ParameterInfo[i] = p;
            }

            Hipass1  = new Highpass1((float)Samplerate);
            Lowpass1 = new Lowpass1((float)Samplerate);
            Gain     = new TFGain((float)Samplerate);
            HipassDC = new Highpass1((float)Samplerate);
            Clipper  = new SplineInterpolator(Splines.D1N914TF);

            /*Clipper2 = new LUT();
             * Clipper2.ReadRecord(Tables.LEDTF.Split('\n'));
             * Clipper2.Table = Tables.Upsample(Clipper2.Table, 100000);*/
            Clipper2 = new SplineInterpolator(Splines.LEDTF);

            Filter  = new Lowpass1((float)Samplerate);
            Hipass3 = new Highpass1((float)Samplerate);

            // Frequency of 0.01uF cap + 1k + 1Meg = 7.227 Hz
            Hipass1.SetParam(0, 10f + (float)Math.Round(ParameterInfo[P_TIGHT].Value) * 300f);
            // Low pass rolloff because of 1n cap, estimate
            Lowpass1.SetParam(0, 5000f);
            // This is the cap after the gain, just some value to remove DC offset
            HipassDC.SetParam(0, 10f);
            // Final cutoff frequency ~ 7.7Hz
            Hipass3.SetParam(0, 7.7f);

            SetParam(P_ON, 1.0);

            // initialize all blocks
            UpdateAll();

            e.UpdateParameters();
        }
예제 #18
0
 public void OpenEditor(IntPtr parentWindow)
 {
     Editor.UpdateParameters();
     DeviceUtilities.DockWinFormsPanel(Editor, parentWindow);
 }
예제 #19
0
        public void InitializeDevice()
        {
            DevInfo.DeviceID = "Low Profile - RXG100";
#if DEBUG
            DevInfo.DeviceID = DevInfo.DeviceID + " - Dev";
#endif
            DevInfo.Developer    = "Valdemar Erlingsson";
            DevInfo.EditorHeight = 0;
            DevInfo.EditorWidth  = 0;
            DevInfo.HasEditor    = true;
            DevInfo.Name         = "RXG100 Amp Simulator";
            DevInfo.ProgramCount = 1;
            DevInfo.Type         = DeviceType.Effect;
            DevInfo.Version      = 1100;
            DevInfo.VstId        = DeviceUtilities.GenerateIntegerId(DevInfo.DeviceID);

            PortInfo[0].Direction        = PortDirection.Input;
            PortInfo[0].Name             = "Stereo Input";
            PortInfo[0].NumberOfChannels = 2;

            PortInfo[1].Direction        = PortDirection.Output;
            PortInfo[1].Name             = "Stereo Output";
            PortInfo[1].NumberOfChannels = 2;

            for (int i = 0; i < ParameterInfo.Length; i++)
            {
                var p = new Parameter();
                p.Display        = "0.0";
                p.Index          = (uint)i;
                p.Name           = ParameterNames[i];
                p.Steps          = 0;
                p.Value          = 0.0;
                ParameterInfo[i] = p;
            }

            HighpassInput = new Highpass1((float)Samplerate);

            // Channel A
            TF1A    = new TF1(Samplerate);
            Stage1A = new SplineInterpolator(Data.Splines.Stage2_2TF);

            TF2A    = new TF2(Samplerate);
            Stage2A = new SplineInterpolator(Data.Splines.Stage2_2TF);

            PostVolumeHpA = new Highpass1((float)Samplerate);
            TFPresA       = new TFPres(Samplerate);
            TonestackA    = new Tonestack((float)Samplerate);

            // Channel B
            TF1B    = new TF1((float)Samplerate);
            TF1xB   = new TF12((float)Samplerate);
            Stage1B = new SplineInterpolator(Data.Splines.Stage1CapSimulatedTF);


            TF2B    = new TF2((float)Samplerate);
            Stage2B = new SplineInterpolator(Data.Splines.Stage2SimulatedTF);

            ClipperZenerB = new SplineInterpolator(Data.Splines.ZenerTF);
            ClipperDiodeB = new SplineInterpolator(Data.Splines.D1N914TF);

            TFVolumeB  = new TFVolume((float)Samplerate);
            TFPresB    = new TFPres((float)Samplerate);
            TonestackB = new Tonestack((float)Samplerate);

            h3            = new Highpass1((float)Samplerate);
            hipassZenerB  = new Highpass1((float)Samplerate);
            LowpassOutput = new Lowpass1((float)Samplerate);
            TonestackA.setComponents(0.200e-9f, 0.022e-6f, 0.02e-6f, 1e3f, 500e3f, 47e3f, 500e3f, 20e3f, 500e3f);
            TonestackB.setComponents(0.200e-9f, 0.022e-6f, 0.02e-6f, 1e3f, 500e3f, 47e3f, 500e3f, 20e3f, 500e3f);
            SetSampleRate(Samplerate);

            Editor               = new Editor();
            Editor.Instance      = this;
            DevInfo.EditorHeight = Editor.Height;
            DevInfo.EditorWidth  = Editor.Width;

            for (int i = 0; i < ParameterInfo.Length; i++)
            {
                SetParam(i, 0.51);
            }
        }
예제 #20
0
        public void InitializeDevice()
        {
            DevInfo.DeviceID = "Low Profile - Smash Master";
#if DEBUG
            DevInfo.DeviceID = DevInfo.DeviceID + " - Dev";
#endif
            DevInfo.Developer    = "Valdemar Erlingsson";
            DevInfo.EditorHeight = 0;
            DevInfo.EditorWidth  = 0;
            DevInfo.HasEditor    = false;
            DevInfo.Name         = "Smash Master";
            DevInfo.ProgramCount = 1;
            DevInfo.Type         = DeviceType.Effect;
            DevInfo.Version      = 1000;
            DevInfo.VstId        = DeviceUtilities.GenerateIntegerId(DevInfo.DeviceID);

            PortInfo[0].Direction        = PortDirection.Input;
            PortInfo[0].Name             = "Stereo Input";
            PortInfo[0].NumberOfChannels = 2;

            PortInfo[1].Direction        = PortDirection.Output;
            PortInfo[1].Name             = "Stereo Output";
            PortInfo[1].NumberOfChannels = 2;

            for (int i = 0; i < ParameterInfo.Length; i++)
            {
                var p = new Parameter();
                p.Display        = "0.5";
                p.Index          = (uint)i;
                p.Name           = ParameterNames[i];
                p.Steps          = 0;
                p.Value          = 0.5;
                ParameterInfo[i] = p;
            }

            Hp1        = new Highpass1((float)Samplerate);
            LpNoise    = new Lowpass1((float)Samplerate);
            GainTF     = new Gain(this.Samplerate);
            PostGain   = new postGain(Samplerate);
            SaturateLP = new Lowpass1((float)Samplerate);
            ClipperHP  = new Highpass1((float)Samplerate);

            Clipper = new LUT();
            Clipper.ReadRecord(Tables.D1N914TF.Split('\n'));
            Clipper.Table = Tables.Upsample(Clipper.Table, 100000);

            Tonestack = new Tonestack((float)Samplerate);
            TF2       = new TF2(Samplerate);
            Contour   = new Contour(Samplerate);
            OutHP     = new Highpass1((float)Samplerate);
            OutLP     = new Lowpass1((float)Samplerate);

            // 16Hz, remove DC bias from input
            Hp1.SetParam(0, 16f);
            LpNoise.SetParam(0, 3500f);
            ClipperHP.SetParam(0, 10f);
            SaturateLP.SetParam(0, 15000);
            Tonestack.FenderMode = true;
            Tonestack.setComponents(0.022e-6, 0.22e-6, 0.022e-6, 1000, 5e6, 6.8e3, 25e3, 1e3, 100e3);
            OutHP.SetParam(0, 30f);

            // initialize all blocks
            UpdateAll();
        }