{
    "effectName": "Guitar",
    "properties": [
        {
            "id": "Guitar_Type",
            "label": "Type",
            "type": "enum",
            "controlType": "choice",
            "options": [
                "Guitar",
                "Bass Guitar",
                "Banjo",
                "Violin"
            ],
            "default": "Guitar",
            "description": "Selects the instrument type, which determines the number of strings and tuning used to map MIDI notes to fret positions."
        },
        {
            "id": "Guitar_MIDITrack_APPLYLAST",
            "label": "Track",
            "type": "enum",
            "controlType": "choice",
            "options": [],
            "default": "",
            "dynamicOptions": "timingTracks",
            "expandToFill": true,
            "description": "The timing track containing MIDI note data that drives the guitar visualization."
        },
        {
            "id": "StringAppearance",
            "label": "String Appearance",
            "type": "enum",
            "controlType": "choice",
            "options": [
                "On",
                "Wave"
            ],
            "default": "On",
            "description": "How active strings are drawn. On fills a solid band for each string; Wave draws a sine wave oscillation simulating a vibrating string."
        },
        {
            "id": "MaxFrets",
            "label": "Fret Count",
            "type": "int",
            "controlType": "slider",
            "default": 19,
            "min": 8,
            "max": 30,
            "description": "Maximum number of frets on the instrument neck. Higher fret notes are drawn shorter across the buffer width."
        },
        {
            "id": "BaseWaveFactor",
            "label": "Base Wavelength",
            "type": "float",
            "controlType": "slider",
            "default": 1.0,
            "min": 1,
            "max": 100,
            "divisor": 10,
            "description": "Base wavelength multiplier for the wave string appearance. Higher values produce longer, smoother waves."
        },
        {
            "id": "StringWaveFactor",
            "label": "Vary Wavelength By String",
            "type": "float",
            "controlType": "slider",
            "default": 0.0,
            "min": 0,
            "max": 100,
            "divisor": 10,
            "description": "How much the wavelength varies between strings. Higher values make lower-pitched strings wave more slowly than higher strings."
        },
        {
            "id": "Fade",
            "label": "Fade",
            "type": "bool",
            "controlType": "checkbox",
            "default": false,
            "description": "When enabled, notes fade out over their duration by reducing alpha transparency."
        },
        {
            "id": "Collapse",
            "label": "Collapse",
            "type": "bool",
            "controlType": "checkbox",
            "default": false,
            "description": "When enabled, the height of each string's visual shrinks over the note duration, simulating a decaying vibration."
        },
        {
            "id": "ShowStrings",
            "label": "Show Strings",
            "type": "bool",
            "controlType": "checkbox",
            "default": false,
            "description": "When enabled, draws a thin line for each string beyond the fret position, showing the unfretted portion of the string."
        },
        {
            "id": "VaryWaveLengthOnFret",
            "label": "Vary Wavelength By Fret",
            "type": "bool",
            "controlType": "checkbox",
            "default": true,
            "description": "When enabled, the wave wavelength varies based on fret position so that higher frets produce shorter, tighter waves."
        }
    ],
    "visibilityRules": [
        {
            "when": {
                "property": "StringAppearance",
                "equals": "Wave"
            },
            "enable": [
                "BaseWaveFactor",
                "StringWaveFactor",
                "VaryWaveLengthOnFret"
            ]
        }
    ]
}
