Ejemplo n.º 1
0
        void ResetEffect(XGEffectBlockType blockType, string effectName)
        {
            Action <XGMidiParameter, int> writeValue = (p, v) => { if (p != null)
                                                                   {
                                                                       p.WriteValue(v);
                                                                   }
            };

            var eff = new XGEffectParams(this, blockType);

            eff.WriteEffect(XGEffect.GetEffectByName(effectName));
            writeValue(eff.SendToChorus, 0);
            writeValue(eff.SendToReverb, 0);
            writeValue(eff.Return, 0x40);
            writeValue(eff.Pan, 0x40);
            writeValue(eff.VariationConnect, 0);
            writeValue(eff.PartNumber, 0x7F);
        }
        void ResetEffect(XGEffectBlockType blockType, string effectName)
        {
            Action<XGMidiParameter, int> writeValue = (p, v) => { if (p != null) { p.WriteValue(v); } };

            var eff = new XGEffectParams(this, blockType);
            eff.WriteEffect(XGEffect.GetEffectByName(effectName));
            writeValue(eff.SendToChorus, 0);
            writeValue(eff.SendToReverb, 0);
            writeValue(eff.Return, 0x40);
            writeValue(eff.Pan, 0x40);
            writeValue(eff.VariationConnect, 0);
            writeValue(eff.PartNumber, 0x7F);
        }
        void CreateEffectRack(int x, XGEffectParams efctParam)
        {
            XGEffectBlockType efctBlock = efctParam.BlockType;
            efctParam.ReLink();
            XGEffect efctDef = efctParam.Effect ?? XGEffect.AllEffects[0];
            switch (efctBlock)
            {
                case XGEffectBlockType.Reverb: valueColor = Color.Red; labelColor = Color.Maroon; break;
                case XGEffectBlockType.Chorus: valueColor = Color.Cyan; labelColor = Color.Teal; break;
                case XGEffectBlockType.Variation: valueColor = Color.Blue; labelColor = Color.Navy; break;
                case XGEffectBlockType.Insertion1: valueColor = Color.Lime; labelColor = Color.Green; break;
                case XGEffectBlockType.Insertion2: valueColor = Color.Yellow; labelColor = Color.FromArgb(0xFF, 0x8B, 0x8B, 0x00); break;
                case XGEffectBlockType.Insertion3: valueColor = Color.Magenta; labelColor = Color.Purple; break;
                case XGEffectBlockType.Insertion4: valueColor = Color.LightGray; labelColor = Color.Gray; break;
            }
            Parameters.Add(efctParam.EffectType);

            int y = 0;

            AddLabelCell("---- " + efctBlock.ToString(), x, 0, 5, labelColor);
            y++;
            XGPControlCell selectedEffectCell = AddTriggerCell(efctDef.Name, x, y, 7, valueColor, () => { });
            selectedEffectCell.Offset = (v) => PopMenu(efctBlock);
            selectedEffectCell.GetDescriptionFunc = () => "Click to Change Effect " + efctBlock;

            y++;
            AddTriggerCell("[ReSend]", x, y, 2, valueColor, () => efctParam.ReSendAll()).GetDescriptionFunc = () => "DblClick to ReSend All " + efctParam.Name + "s.";
            AddTriggerCell("[Dump]", x + 2, y, 2, valueColor, () => { efctParam.RequestDump(); DoFunc(() => Device.AllDumpRequestHasDone, ReCreateScreen); }).GetDescriptionFunc = () => "DblClick to Request Dump All " + efctParam.Name + "s. ";
            AddTriggerCell(" ", x + 4, y, 3, labelColor, () => { });

            y++;

            bool insertionConnect = efctBlock >= XGEffectBlockType.Insertion1
                || efctBlock == XGEffectBlockType.Variation && efctParam.VariationConnect.Value == 0;

            switch (efctBlock)
            {
                case XGEffectBlockType.Reverb:
                    AddDisabledControl(x, y++, "Connect", "System");
                    AddControl(x, y++, "Return", efctParam.Return);
                    AddControl(x, y++, "Pan", efctParam.Pan);
                        AddDisabledControl(x, y++, "---", "---");
                        AddDisabledControl(x, y++, "---", "---");
                    //AddDisabledControl(x, y++, "Part", "---");
                    break;
                case XGEffectBlockType.Chorus:
                    AddDisabledControl(x, y++, "Connect", "System");
                    AddControl(x, y++, "Return", efctParam.Return);
                    AddControl(x, y++, "Pan", efctParam.Pan);
                    AddControl(x, y++, "Reverb", efctParam.SendToReverb);
                        AddDisabledControl(x, y++, "---", "---");
                    break;
                case XGEffectBlockType.Variation:
                    AddControl(x, y++, "Connect", efctParam.VariationConnect).Offset += v => { efctParam.ReLink(); ReCreateScreen(); };
                    if (insertionConnect)
                    {
                        AddControl(x, y++, "Part", efctParam.PartNumber);
                        AddDisabledControl(x, y++, "---", "---");
                        AddDisabledControl(x, y++, "---", "---");
                        AddDisabledControl(x, y++, "---", "---");
                    }
                    else
                    {
                        //AddDisabledControl(x, y++, "Part", "---");
                        AddControl(x, y++, "Return", efctParam.Return);
                        AddControl(x, y++, "Pan", efctParam.Pan);
                        AddControl(x, y++, "Reverb", efctParam.SendToReverb);
                        AddControl(x, y++, "Chorus", efctParam.SendToChorus);
                    }
                    break;
                case XGEffectBlockType.Insertion1:
                case XGEffectBlockType.Insertion2:
                case XGEffectBlockType.Insertion3:
                case XGEffectBlockType.Insertion4:
                    AddDisabledControl(x, y++, "Connect", "Insertion");
                    //AddDisabledControl(x, y++, "Return", "---");
                    //AddDisabledControl(x, y++, "Pan", "---");
                    //AddDisabledControl(x, y++, "Reverb", "---");
                    //AddDisabledControl(x, y++, "Chorus", "---");
                    AddControl(x, y++, "Part", efctParam.PartNumber);
                        AddDisabledControl(x, y++, "---", "---");
                        AddDisabledControl(x, y++, "---", "---");
                        AddDisabledControl(x, y++, "---", "---");
                    break;
            }

            AddControl(x, y++, "---- Params ----", "---------");

            for (int i = 0; i < 16; i++)
            {
                XGEffect.XGEffectParam p = efctDef.ParameterTypes[i];

                // If "ENS DETUNE" is selected in Chorus Block, some parameters are not available.
                bool notAvailable = (efctBlock == XGEffectBlockType.Chorus && efctDef.EffectValue == 0x5700 && (i >= 10));

                if (p != null)
                {
                    if ((p.InsertionOnly && !insertionConnect) || (notAvailable))
                    {
                        AddDisabledControl(x, y++, p.Name, "---");
                    }
                    else
                    {
                        AddControl(x, y++, p.Name, efctParam.EffectParameters[i]);
                    }
                }
                else
                {
                    AddDisabledControl(x, y++, "---", "---");
                }
            }
        }