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