Logic Pro X: Create Scripter controls

Create Scripter controls

This section describes use of the Script Editor to create standard interface controllers such as sliders and menus for your Scripter plug-ins. The only mandatory property you need to define for a new parameter is “name”. This defaults to a basic slider. In addition, you can use further properties to change the type and behavior of controls.

Optional properties

  • type: Type one of the following strings as the value:

    • “lin”: Creates a linear fader.

    • “log”: Creates a logarithmic fader.

    • “momentary”: Creates a momentary button.

    • “menu”: Creates a menu.

      The menu type requires an additional valueStrings property that is an array of strings to show in the menu. See Tutorial script 13.

  • defaultValue: Type an integer or floating point number to set a default value. If no value is typed, the default is 0.0.

  • minValue: Type an integer or floating point number to set a minimum value. If no value is typed, the default is 0.0.

  • maxValue: Type an integer or floating point number to set a maximum value. If no value is typed, the default is 1.0.

  • numberOfSteps: Type an integer number to define the number of steps.

  • unit: Type a string to present a unit description in the plug-in controls. If no value is typed, the default behavior is to display no unit.

  • text: Type text to create a divider/header in the plug-in UI.

Load the corresponding Tutorial setting to view the script in the Script Editor. This will help you to understand the syntax structure and layout of code and comments. See Use the Script Editor.

Tutorial script 11: Slider Creation

Type the following in the Script Editor window to create a slider named “Parameter x” with a default range of 0 to 1. It is set to the mid-point value of 0.5.

var PluginParameters = [{name:"Parameter x", defaultValue:0.5}];

Tutorial script 12: Slider Ranges

Type the following in the Script Editor window to create a linear slider type, with five possible positions (steps), and a range from 0 to 5.

var PluginParameters = [{name:"Octaves", defaultValue:3, minValue:0, maxValue:5, numberOfSteps:5, unit:"octaves", type:"lin"}];

Tutorial script 13: Menu Creation

Type the following in the Script Editor window to create a menu named “Range” with the options “Low”, “Mid”, and “High”.

var PluginParameters = [{name:"Range", type:"menu", valueStrings:["Low", "Mid", "High"]}];

Dynamically hide or show MIDI plug-in controls

For complex scripts, it may be helpful to hide or show parameter controls dynamically, such as for a menu item that lets you choose a group of controls to display. Type the following in the Script Editor window to create these controller types.

  • var PluginParameters = [{name:'uno'}, {name:'dos', hidden:true}];

    Call UpdatePluginParameters() to change this dynamically.

Retrieve plug-in parameter values

Call GetParameter() with the parameter name to return a value (number object) with the current value of the parameter. GetParameter() is typically used inside the HandleMIDI function or ProcessMIDI function.

This code example converts modulation events into note events and provides a slider to determine note lengths.

  • Text following /* shows comments that explain the JavaScript code.

    var PluginParameters = [{name:"Note Length", minValue:0, maxValue: 100, unit:"%"}]; /* create a slider (default range 0 - 100) */ function HandleMIDI(event) { if(event instanceof ControlChange && event.number == 1) { /* if event is MIDI cc1 (modwheel) */ var note = new NoteOn; /* create a NoteOn object */ if(event.value == 0) /* because modwheel range is 0-127 and pitch range is 1-127, convert a modwheel value of 0 to 1 */ event.value = 1; note.pitch = event.value; /* use cc value as note pitch */ note.velocity = 100; /* use velocity 100 */ note.send(); /* send note on */ var off = new NoteOff(note); /* create a NoteOff object that inherits the NoteOn pitch and velocity values */ var delayInBeats = GetParameter("Note Length")/100 + 0.1; /* retrieve the parameter value of the slider you created (add 0.1 to guarantee note on and off are not simultaneous) */ off.sendAfterBeats(delayInBeats); /* send note off after the length in beats is set via the slider */ } }
Published Date: Aug 9, 2019
Helpful?