コード例 #1
0
 private void loadTone(ToneParam tone)
 {
     param = tone.Clone();
     {
         GameObject obj = transform.FindChild("Panel/LFO").gameObject;
         setSliderValue(obj, "WaveForm", "lw:", 0, 7, param.Lfo.WS);
         setSliderValue(obj, "Frequency", "lf:", 0, 127, param.Lfo.LF);
         setSliderValue(obj, "PMPower", "lp:", 0, 127, param.Lfo.LP);
         setSliderValue(obj, "AMPower", "la:", 0, 127, param.Lfo.LA);
         if (param.Extended)
         {
             setSliderValue(obj, "AttackRate", "ar:", 0, 127, param.Lfo.Env.xAR);
             setSliderValue(obj, "DecayRate", "dr:", 0, 127, param.Lfo.Env.xDR);
             setSliderValue(obj, "SustainLevel", "sl:", 0, 127, param.Lfo.Env.xSL);
             setSliderValue(obj, "SustainRate", "sr:", 0, 127, param.Lfo.Env.xSR);
             setSliderValue(obj, "ReleaseRate", "rr:", 0, 127, param.Lfo.Env.xRR);
         }
         else
         {
             setSliderValue(obj, "AttackRate", "ar:", 0, 31, param.Lfo.Env.AR);
             setSliderValue(obj, "DecayRate", "dr:", 0, 31, param.Lfo.Env.DR);
             setSliderValue(obj, "SustainLevel", "sl:", 0, 15, param.Lfo.Env.SL);
             setSliderValue(obj, "SustainRate", "sr:", 0, 31, param.Lfo.Env.SR);
             setSliderValue(obj, "ReleaseRate", "rr:", 0, 15, param.Lfo.Env.RR);
         }
     }
     {
         GameObject obj = transform.FindChild("Panel/ENV").gameObject;
         setSliderValue(obj, "WaveStyle", "ws:", 0, 7, param.WS);
         setSliderValue(obj, "KeyScale", "ks:", 0, 3, param.Env.KS);
         setSliderValue(obj, "VelocitySense", "vs:", 0, 7, param.Env.VS);
         setSliderValue(obj, "TotalLevel", "tl:", 0, 127, param.Env.TL);
         if (param.Extended)
         {
             setSliderValue(obj, "AttackRate", "ar:", 0, 127, param.Env.xAR);
             setSliderValue(obj, "DecayRate", "dr:", 0, 127, param.Env.xDR);
             setSliderValue(obj, "SustainLevel", "sl:", 0, 127, param.Env.xSL);
             setSliderValue(obj, "SustainRate", "sr:", 0, 127, param.Env.xSR);
             setSliderValue(obj, "ReleaseRate", "rr:", 0, 127, param.Env.xRR);
         }
         else
         {
             setSliderValue(obj, "AttackRate", "ar:", 0, 31, param.Env.AR);
             setSliderValue(obj, "DecayRate", "dr:", 0, 31, param.Env.DR);
             setSliderValue(obj, "SustainLevel", "sl:", 0, 15, param.Env.SL);
             setSliderValue(obj, "SustainRate", "sr:", 0, 31, param.Env.SR);
             setSliderValue(obj, "ReleaseRate", "rr:", 0, 15, param.Env.RR);
         }
     }
     {
         WaveTable wt = transform.FindChild("Panel/WaveTable").GetComponent <WaveTable>();
         for (int i = 0; i < 32; i++)
         {
             wt.WT[i] = param.WT[i];
         }
     }
     updateParam();
 }
コード例 #2
0
ファイル: ToneEditor.cs プロジェクト: luoyang9/airband-client
 private void loadTone(ToneParam tone)
 {
     param = tone;
     {
         GameObject obj = transform.FindChild("Panel/FM").gameObject;
         setSliderValue(obj, "Algorithm", "al:", 0, 7, param.Al);
         setSliderValue(obj, "Feedback", "fb:", 0, 7, param.Fb);
         setSliderValue(obj, "WaveForm", "lw:", 0, 7, param.Lfo.WS);
         setSliderValue(obj, "Frequency", "lf:", 0, 127, param.Lfo.LF);
         setSliderValue(obj, "PMPower", "lp:", 0, 127, param.Lfo.LP);
         setSliderValue(obj, "AMPower", "la:", 0, 127, param.Lfo.LA);
         if (param.Extended)
         {
             setSliderValue(obj, "AttackRate", "ar:", 0, 127, param.Lfo.Env.xAR);
             setSliderValue(obj, "DecayRate", "dr:", 0, 127, param.Lfo.Env.xDR);
             setSliderValue(obj, "SustainLevel", "sl:", 0, 127, param.Lfo.Env.xSL);
             setSliderValue(obj, "SustainRate", "sr:", 0, 127, param.Lfo.Env.xSR);
             setSliderValue(obj, "ReleaseRate", "rr:", 0, 127, param.Lfo.Env.xRR);
         }
         else
         {
             setSliderValue(obj, "AttackRate", "ar:", 0, 31, param.Lfo.Env.AR);
             setSliderValue(obj, "DecayRate", "dr:", 0, 31, param.Lfo.Env.DR);
             setSliderValue(obj, "SustainLevel", "sl:", 0, 15, param.Lfo.Env.SL);
             setSliderValue(obj, "SustainRate", "sr:", 0, 31, param.Lfo.Env.SR);
             setSliderValue(obj, "ReleaseRate", "rr:", 0, 15, param.Lfo.Env.RR);
         }
     }
     for (int i = 0; i < 4; i++)
     {
         int        n   = i;
         GameObject obj = transform.FindChild("Panel/OP" + (i + 1)).gameObject;
         setSliderValue(obj, "WaveStyle", "ws:", 0, 7, param.Op[n].WS);
         setSliderValue(obj, "AMEnable", "ae:", 0, 1, param.Op[n].AE);
         setSliderValue(obj, "Multiple", "ml:", 0, 15, param.Op[n].Ml);
         setSliderValue(obj, "Detune", "dt:", 0, 7, param.Op[n].Dt);
         setSliderValue(obj, "KeyScale", "ks:", 0, 3, param.Op[n].Env.KS);
         setSliderValue(obj, "VelocitySense", "vs:", 0, 7, param.Op[n].Env.VS);
         setSliderValue(obj, "TotalLevel", "tl:", 0, 127, param.Op[n].Env.TL);
         if (param.Extended)
         {
             setSliderValue(obj, "AttackRate", "ar:", 0, 127, param.Op[n].Env.xAR);
             setSliderValue(obj, "DecayRate", "dr:", 0, 127, param.Op[n].Env.xDR);
             setSliderValue(obj, "SustainLevel", "sl:", 0, 127, param.Op[n].Env.xSL);
             setSliderValue(obj, "SustainRate", "sr:", 0, 127, param.Op[n].Env.xSR);
             setSliderValue(obj, "ReleaseRate", "rr:", 0, 127, param.Op[n].Env.xRR);
         }
         else
         {
             setSliderValue(obj, "AttackRate", "ar:", 0, 31, param.Op[n].Env.AR);
             setSliderValue(obj, "DecayRate", "dr:", 0, 31, param.Op[n].Env.DR);
             setSliderValue(obj, "SustainLevel", "sl:", 0, 15, param.Op[n].Env.SL);
             setSliderValue(obj, "SustainRate", "sr:", 0, 31, param.Op[n].Env.SR);
             setSliderValue(obj, "ReleaseRate", "rr:", 0, 15, param.Op[n].Env.RR);
         }
     }
     applyTone();
 }
コード例 #3
0
    // Use this for initialization
    void Start()
    {
        string defaultTone = "@pm8[7 0 op1[0 0 1 0 0 0 0 1 0 14 0 0 0 7] op2[0 0 1 0 0 0 0 1 127 31 0 0 0 15] op3[0 0 1 0 0 0 0 1 127 31 0 0 0 15] op4[0 0 1 0 0 0 0 1 127 31 0 0 0 15] lfo[0 127 0 0 31 0 0 0 0]]";

        tone = new ToneParam(defaultTone);

        mix = new MyMixer(48000, false);                 // <-- raise worker thread!
        gameObject.AddComponent <MusicPlayer>();
        //gameObject.GetComponent<MusicPlayer>().Synthesizer.Channel[0].Damper(127);
        gameObject.GetComponent <MusicPlayer>().Synthesizer.Channel[0].ProgramChange(tone);
        // <-- connect synthesizer to mixer
    }
コード例 #4
0
 private void loadTone(ToneParam tone)
 {
     param = tone.Clone();
     {
         GameObject obj = gameObject.transform.Find("Panel/FM").gameObject;
         setSliderValue(obj, "Algorithm", "al:", param.Al);
         setSliderValue(obj, "Feedback", "fb:", param.Fb);
         setSliderValue(obj, "WaveForm", "lw:", param.Lfo.WS);
         setSliderValue(obj, "Frequency", "lf:", param.Lfo.LF);
         setSliderValue(obj, "PMPower", "lp:", param.Lfo.LP);
         setSliderValue(obj, "AMPower", "la:", param.Lfo.LA);
         setSliderValue(obj, "AttackRate", "ar:", param.Lfo.Env.AR);
         setSliderValue(obj, "DecayRate", "dr:", param.Lfo.Env.DR);
         setSliderValue(obj, "SustainLevel", "sl:", param.Lfo.Env.SL);
         setSliderValue(obj, "SustainRate", "sr:", param.Lfo.Env.SR);
         setSliderValue(obj, "ReleaseRate", "rr:", param.Lfo.Env.RR);
     }
     for (int i = 0; i < 4; i++)
     {
         int        n   = i;
         GameObject obj = gameObject.transform.Find("Panel/OP" + (i + 1)).gameObject;
         setSliderValue(obj, "WaveStyle", "ws:", param.Op[n].WS);
         setSliderValue(obj, "AMEnable", "ae:", param.Op[n].AE);
         setSliderValue(obj, "Multiple", "ml:", param.Op[n].Ml);
         setSliderValue(obj, "Detune", "dt:", param.Op[n].Dt);
         setSliderValue(obj, "KeyScale", "ks:", param.Op[n].Env.KS);
         setSliderValue(obj, "VelocitySense", "vs:", param.Op[n].Env.VS);
         setSliderValue(obj, "TotalLevel", "tl:", param.Op[n].Env.TL);
         setSliderValue(obj, "AttackRate", "ar:", param.Op[n].Env.AR);
         setSliderValue(obj, "DecayRate", "dr:", param.Op[n].Env.DR);
         setSliderValue(obj, "SustainLevel", "sl:", param.Op[n].Env.SL);
         setSliderValue(obj, "SustainRate", "sr:", param.Op[n].Env.SR);
         setSliderValue(obj, "ReleaseRate", "rr:", param.Op[n].Env.RR);
     }
     if (musicPlayer.Synthesizer != null)
     {
         musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param);
     }
 }
コード例 #5
0
    void Awake()
    {
        musicPlayer     = GameObject.FindObjectOfType <MusicPlayer>();
        MMLEditorCanvas = transform.parent.Find("MMLPlayerCanvas").gameObject;
        //string defaultTone = "@fmt[7 0 op1[0 1 1 0 0 0 0 1 0 31 0 0 0 7] op2[0 1 1 0 0 0 0 1 127 31 0 0 0 7] op3[0 1 1 0 0 0 0 1 127 31 0 0 0 7] op4[0 1 1 0 0 0 0 1 127 31 0 0 0 7] lfo[0 127 0 0 31 0 0 0 0] ]";
        string defaultTone = "@pm8[7 0 op1[0 0 1 0 0 0 0 1 0 31 0 0 0 15] op2[0 0 1 0 0 0 0 1 127 31 0 0 0 15] op3[0 0 1 0 0 0 0 1 127 31 0 0 0 15] op4[0 0 1 0 0 0 0 1 127 31 0 0 0 15] lfo[0 127 0 0 31 0 0 0 0]]";

        param = new ToneParam(defaultTone);
        {
            Keyboard keyboard = gameObject.transform.Find("Panel/Keyboard").gameObject.GetComponent <Keyboard>();
            keyboard.MusicPlayer = musicPlayer;
            keyboard.ChNo        = ChNo;
        }
        {
            InputField inputField = gameObject.transform.Find("Panel/InputField").gameObject.GetComponent <InputField>();
            inputField.onEndEdit.AddListener((v) =>
            {
                if ((v != null) && (v.Length != 0))
                {
                    loadTone(new ToneParam(v));
                    inputField.text = param.ToString();
                }
                else
                {
                    loadTone(new ToneParam(defaultTone));
                }
            });

            Button button = gameObject.transform.Find("Panel/InputField/Button").gameObject.GetComponent <Button>();
            button.onClick.AddListener(() =>
            {
                inputField.text = param.ToString();
            });

            PresetButton [] presets = gameObject.GetComponentsInChildren <PresetButton>();
            foreach (PresetButton pb in presets)
            {
                Button    btn = pb.GetComponent <Button>();
                ToneParam tp  = new ToneParam(pb.ToneData);
                btn.onClick.AddListener(() =>
                {
                    loadTone(tp);
                    inputField.text = param.ToString();
                });
            }
        }
        {
            GameObject obj = gameObject.transform.Find("Panel/FM").gameObject;
            setupSlider(obj, "Algorithm", "al:", true, 0, 7, param.Al, (val) => { param.Al = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "Feedback", "fb:", true, 0, 7, param.Fb, (val) => { param.Fb = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "WaveForm", "lw:", true, 0, 7, param.Lfo.WS, (val) => { param.Lfo.WS = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "Frequency", "lf:", true, 0, 127, param.Lfo.LF, (val) => { param.Lfo.LF = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "PMPower", "lp:", true, 0, 127, param.Lfo.LP, (val) => { param.Lfo.LP = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "AMPower", "la:", true, 0, 127, param.Lfo.LA, (val) => { param.Lfo.LA = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "AttackRate", "ar:", true, 0, 31, param.Lfo.Env.AR, (val) => { param.Lfo.Env.AR = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "DecayRate", "dr:", true, 0, 31, param.Lfo.Env.DR, (val) => { param.Lfo.Env.DR = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "SustainLevel", "sl:", true, 0, 15, param.Lfo.Env.SL, (val) => { param.Lfo.Env.SL = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "SustainRate", "sr:", true, 0, 31, param.Lfo.Env.SR, (val) => { param.Lfo.Env.SR = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "ReleaseRate", "rr:", true, 0, 15, param.Lfo.Env.RR, (val) => { param.Lfo.Env.RR = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
        }
        for (int i = 0; i < 4; i++)
        {
            int        n   = i;
            GameObject obj = gameObject.transform.Find("Panel/OP" + (i + 1)).gameObject;
            setupSlider(obj, "WaveStyle", "ws:", true, 0, 7, param.Op[n].WS, (val) => { param.Op[n].WS = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "AMEnable", "ae:", true, 0, 1, param.Op[n].AE, (val) => { param.Op[n].AE = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "Multiple", "ml:", true, 0, 15, param.Op[n].Ml, (val) => { param.Op[n].Ml = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "Detune", "dt:", true, 0, 7, param.Op[n].Dt, (val) => { param.Op[n].Dt = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "KeyScale", "ks:", true, 0, 3, param.Op[n].Env.KS, (val) => { param.Op[n].Env.KS = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "VelocitySense", "vs:", true, 0, 7, param.Op[n].Env.VS, (val) => { param.Op[n].Env.VS = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "TotalLevel", "tl:", true, 0, 127, param.Op[n].Env.TL, (val) => { param.Op[n].Env.TL = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "AttackRate", "ar:", true, 0, 31, param.Op[n].Env.AR, (val) => { param.Op[n].Env.AR = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "DecayRate", "dr:", true, 0, 31, param.Op[n].Env.DR, (val) => { param.Op[n].Env.DR = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "SustainLevel", "sl:", true, 0, 15, param.Op[n].Env.SL, (val) => { param.Op[n].Env.SL = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "SustainRate", "sr:", true, 0, 15, param.Op[n].Env.SR, (val) => { param.Op[n].Env.SR = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
            setupSlider(obj, "ReleaseRate", "rr:", true, 0, 31, param.Op[n].Env.RR, (val) => { param.Op[n].Env.RR = (Byte)val; musicPlayer.Synthesizer.Channel[ChNo].ProgramChange(param); });
        }
        {
            Button button = gameObject.transform.Find("Panel/MMLEditorButton").gameObject.GetComponent <Button>();
            button.onClick.AddListener(() =>
            {
                MMLEditorCanvas.SetActive(true);
                gameObject.SetActive(false);
            });
        }
    }
コード例 #6
0
    void Awake()
    {
        syntheStation = GameObject.FindObjectOfType <MySyntheStation>();
        sampleTools   = GameObject.FindObjectOfType <SampleTools>();
        mmlBox        = sampleTools.GetComponent <MyMMLBox>();
        {
            Button extend = transform.FindChild("Panel/Extend").GetComponent <Button>();
            extend.onClick.AddListener(() => {
                param.Extended = !param.Extended;
                updateParam();
                loadTone(param);
            });
        }
        {
            inputField = transform.FindChild("Panel/InputField").GetComponent <InputField>();
            inputField.onEndEdit.AddListener((v) =>
            {
                if ((v != null) && (v.Length != 0))
                {
                    loadTone(new ToneParam(v));
                }
                else
                {
                    loadTone(new ToneParam(defaultTone));
                }
            });

            PresetButton [] presets = GetComponentsInChildren <PresetButton>();
            foreach (PresetButton pb in presets)
            {
                Button    btn = pb.GetComponent <Button>();
                ToneParam tp  = new ToneParam(pb.ToneData);
                btn.onClick.AddListener(() =>
                {
                    loadTone(tp);
                });
            }
        }
        {
            GameObject obj = transform.FindChild("Panel/LFO").gameObject;
            setupSlider(obj, "WaveForm", "lw:", (val) => { param.Lfo.WS = (Byte)val; updateParam(); });
            setupSlider(obj, "Frequency", "lf:", (val) => { param.Lfo.LF = (Byte)val; updateParam(); });
            setupSlider(obj, "PMPower", "lp:", (val) => { param.Lfo.LP = (Byte)val; updateParam(); });
            setupSlider(obj, "AMPower", "la:", (val) => { param.Lfo.LA = (Byte)val; updateParam(); });
            setupSlider(obj, "AttackRate", "ar:", (val) => { param.Lfo.Env.AR = (Byte)val; updateParam(); });
            setupSlider(obj, "DecayRate", "dr:", (val) => { param.Lfo.Env.DR = (Byte)val; updateParam(); });
            setupSlider(obj, "SustainLevel", "sl:", (val) => { param.Lfo.Env.SL = (Byte)val; updateParam(); });
            setupSlider(obj, "SustainRate", "sr:", (val) => { param.Lfo.Env.SR = (Byte)val; updateParam(); });
            setupSlider(obj, "ReleaseRate", "rr:", (val) => { param.Lfo.Env.RR = (Byte)val; updateParam(); });
        }
        {
            GameObject obj = transform.FindChild("Panel/ENV").gameObject;
            setupSlider(obj, "WaveStyle", "ws:", (val) => { param.WS = (Byte)val; updateParam(); });
            setupSlider(obj, "KeyScale", "ks:", (val) => { param.Env.KS = (Byte)val; updateParam(); });
            setupSlider(obj, "VelocitySense", "vs:", (val) => { param.Env.VS = (Byte)val; updateParam(); });
            setupSlider(obj, "TotalLevel", "tl:", (val) => { param.Env.TL = (Byte)val; updateParam(); });
            setupSlider(obj, "AttackRate", "ar:", (val) => { param.Env.AR = (Byte)val; updateParam(); });
            setupSlider(obj, "DecayRate", "dr:", (val) => { param.Env.DR = (Byte)val; updateParam(); });
            setupSlider(obj, "SustainLevel", "sl:", (val) => { param.Env.SL = (Byte)val; updateParam(); });
            setupSlider(obj, "SustainRate", "sr:", (val) => { param.Env.SR = (Byte)val; updateParam(); });
            setupSlider(obj, "ReleaseRate", "rr:", (val) => { param.Env.RR = (Byte)val; updateParam(); });
        }
        {
            WaveTable wt = transform.FindChild("Panel/WaveTable").GetComponent <WaveTable>();
            wt.OnUpdateAction = (idx) =>
            {
                param.WT[idx] = wt.WT[idx];
                updateParam();
            };
        }
        {
            Keyboard keyboard = transform.FindChild("Panel/Keyboard").GetComponent <Keyboard>();
            keyboard.ChNo   = ChNo;
            keyboard.PortNo = PortNo;
        }
        {
            Transform mmlEditorCanvas = transform.parent.FindChild("MMLPlayerCanvas");
            Button    button          = transform.FindChild("Panel/MMLEditorButton").GetComponent <Button>();
            button.onClick.AddListener(() =>
            {
                mmlBox.Play("Click");
                sampleTools.MoveCameraTo(mmlEditorCanvas.localPosition);
            });
        }
    }
コード例 #7
0
ファイル: ToneEditor.cs プロジェクト: luoyang9/airband-client
    void Awake()
    {
        syntheStation = GameObject.FindObjectOfType <MySyntheStation>();
        sampleTools   = GameObject.FindObjectOfType <SampleTools>();
        mmlBox        = sampleTools.GetComponent <MyMMLBox>();
        {
            Button extend = transform.FindChild("Panel/Extend").GetComponent <Button>();
            extend.onClick.AddListener(() => {
                param.Extended = !param.Extended;
                loadTone(param);
            });
        }
        {
            inputField = transform.FindChild("Panel/InputField").GetComponent <InputField>();
            inputField.onEndEdit.AddListener((v) =>
            {
                if ((v != null) && (v.Length != 0))
                {
                    loadTone(new ToneParam(v));
                }
                else
                {
                    loadTone(new ToneParam(defaultTone));
                }
            });

            PresetButton [] presets = GetComponentsInChildren <PresetButton>();
            foreach (PresetButton pb in presets)
            {
                Button    btn = pb.GetComponent <Button>();
                ToneParam tp  = new ToneParam(pb.ToneData);
                btn.onClick.AddListener(() =>
                {
                    loadTone(tp);
                    inputField.text = param.ToString();
                });
            }
        }
        {
            GameObject obj = transform.FindChild("Panel/FM").gameObject;
            setupSlider(obj, "Algorithm", "al:", (val) => { param.Al = (Byte)val; applyTone(); });
            setupSlider(obj, "Feedback", "fb:", (val) => { param.Fb = (Byte)val; applyTone(); });
            setupSlider(obj, "WaveForm", "lw:", (val) => { param.Lfo.WS = (Byte)val; applyTone(); });
            setupSlider(obj, "Frequency", "lf:", (val) => { param.Lfo.LF = (Byte)val; applyTone(); });
            setupSlider(obj, "PMPower", "lp:", (val) => { param.Lfo.LP = (Byte)val; applyTone(); });
            setupSlider(obj, "AMPower", "la:", (val) => { param.Lfo.LA = (Byte)val; applyTone(); });
            setupSlider(obj, "AttackRate", "ar:", (val) => { if (param.Extended)
                                                             {
                                                                 param.Lfo.Env.xAR = (Byte)val;
                                                             }
                                                             else
                                                             {
                                                                 param.Lfo.Env.AR = (Byte)val;
                                                             }; applyTone(); });
            setupSlider(obj, "DecayRate", "dr:", (val) => { if (param.Extended)
                                                            {
                                                                param.Lfo.Env.xDR = (Byte)val;
                                                            }
                                                            else
                                                            {
                                                                param.Lfo.Env.DR = (Byte)val;
                                                            }; applyTone(); });
            setupSlider(obj, "SustainLevel", "sl:", (val) => { if (param.Extended)
                                                               {
                                                                   param.Lfo.Env.xSL = (Byte)val;
                                                               }
                                                               else
                                                               {
                                                                   param.Lfo.Env.SL = (Byte)val;
                                                               }; applyTone(); });
            setupSlider(obj, "SustainRate", "sr:", (val) => { if (param.Extended)
                                                              {
                                                                  param.Lfo.Env.xSR = (Byte)val;
                                                              }
                                                              else
                                                              {
                                                                  param.Lfo.Env.SR = (Byte)val;
                                                              }; applyTone(); });
            setupSlider(obj, "ReleaseRate", "rr:", (val) => { if (param.Extended)
                                                              {
                                                                  param.Lfo.Env.xRR = (Byte)val;
                                                              }
                                                              else
                                                              {
                                                                  param.Lfo.Env.RR = (Byte)val;
                                                              }; applyTone(); });
        }
        for (int i = 0; i < 4; i++)
        {
            int        n   = i;
            GameObject obj = transform.FindChild("Panel/OP" + (i + 1)).gameObject;
            setupSlider(obj, "WaveStyle", "ws:", (val) => { param.Op[n].WS = (Byte)val; applyTone(); });
            setupSlider(obj, "AMEnable", "ae:", (val) => { param.Op[n].AE = (Byte)val; applyTone(); });
            setupSlider(obj, "Multiple", "ml:", (val) => { param.Op[n].Ml = (Byte)val; applyTone(); });
            setupSlider(obj, "Detune", "dt:", (val) => { param.Op[n].Dt = (Byte)val; applyTone(); });
            setupSlider(obj, "KeyScale", "ks:", (val) => { param.Op[n].Env.KS = (Byte)val; applyTone(); });
            setupSlider(obj, "VelocitySense", "vs:", (val) => { param.Op[n].Env.VS = (Byte)val; applyTone(); });
            setupSlider(obj, "TotalLevel", "tl:", (val) => { param.Op[n].Env.TL = (Byte)val; applyTone(); });
            setupSlider(obj, "AttackRate", "ar:", (val) => { if (param.Extended)
                                                             {
                                                                 param.Op[n].Env.xAR = (Byte)val;
                                                             }
                                                             else
                                                             {
                                                                 param.Op[n].Env.AR = (Byte)val;
                                                             }; applyTone(); });
            setupSlider(obj, "DecayRate", "dr:", (val) => { if (param.Extended)
                                                            {
                                                                param.Op[n].Env.xDR = (Byte)val;
                                                            }
                                                            else
                                                            {
                                                                param.Op[n].Env.DR = (Byte)val;
                                                            }; applyTone(); });
            setupSlider(obj, "SustainLevel", "sl:", (val) => { if (param.Extended)
                                                               {
                                                                   param.Op[n].Env.xSL = (Byte)val;
                                                               }
                                                               else
                                                               {
                                                                   param.Op[n].Env.SL = (Byte)val;
                                                               }; applyTone(); });
            setupSlider(obj, "SustainRate", "sr:", (val) => { if (param.Extended)
                                                              {
                                                                  param.Op[n].Env.xSR = (Byte)val;
                                                              }
                                                              else
                                                              {
                                                                  param.Op[n].Env.SR = (Byte)val;
                                                              }; applyTone(); });
            setupSlider(obj, "ReleaseRate", "rr:", (val) => { if (param.Extended)
                                                              {
                                                                  param.Op[n].Env.xRR = (Byte)val;
                                                              }
                                                              else
                                                              {
                                                                  param.Op[n].Env.RR = (Byte)val;
                                                              }; applyTone(); });
        }
        {
            Keyboard keyboard = transform.FindChild("Panel/Keyboard").GetComponent <Keyboard>();
            keyboard.PortNo = PortNo;
            keyboard.ChNo   = ChNo;
        }
        {
            Transform mmlEditorCanvas = transform.parent.FindChild("MMLPlayerCanvas");
            Button    button          = transform.FindChild("Panel/MMLEditorButton").GetComponent <Button>();
            button.onClick.AddListener(() =>
            {
                mmlBox.Play("Click");
                sampleTools.MoveCameraTo(mmlEditorCanvas.localPosition);
            });
        }
    }