MainStage User Guide
- Welcome
-
- Overview of Edit mode
-
- Select patches and sets in the Patch List
- Copy, paste, and delete patches
- Reorder and move patches in the Patch List
- Add and rename patches
- Create a patch from several patches
-
- Overview of the Patch Settings Inspector
- Select patch settings in the Patch Library
- Set the time signature for patches
- Change the tempo when you select a patch
- Set program change and bank numbers
- Defer patch changes
- Instantly silence the previous patch
- Change patch icons
- Transpose the pitch of incoming notes for a patch
- Change the tuning for a patch
- Add text notes to a patch
-
- Overview of channel strips
- Add a channel strip
- Change a channel strip setting
- Configure channel strip components
- Show signal flow channel strips
- Hide the metronome channel strip
- Create an alias of a channel strip
- Add a patch bus
- Set channel strip pan or balance positions
- Set channel strip volume levels
- Mute and solo channel strips
- Use multiple instrument outputs
- Use external MIDI instruments
- Reorganize channel strips
- Delete channel strips
-
- Overview of the Channel Strip Inspector
- Choose channel strip settings
- Rename channel strips
- Change channel strip colors
- Change channel strip icons
- Use feedback protection with channel strips
- Set keyboard input for a software instrument channel strip
- Transpose individual software instruments
- Filter MIDI messages
- Scale channel strip velocity
- Set channel strips to ignore Hermode tuning
- Override concert- and set-level key ranges
- Add text notes to a channel strip in the Channel Strip Inspector
- Route audio via send effects
-
- Screen Control Inspector overview
- Replace parameter labels
- Choose custom colors for screen controls
- Change background or grouped screen control appearance
- Set screen controls to show the hardware value
- Set parameter change behavior for screen controls
- Set hardware matching behavior for screen controls
- Reset and compare changes to a patch
- Override concert- and set-level mappings
-
- Overview of mapping screen controls
- Map to channel strip and plug-in parameters
- Map screen controls to actions
- Map a screen control to multiple parameters
- Use screen controls to display PDF document pages
- Edit the saved value for a mapped parameter
- Set drum pads or buttons to use note velocity
- Map screen controls to all channel strips in a patch
- Undo screen control parameter mappings
- Remove screen control mappings
- Work with graphs
- Create controller transforms
- Share patches and sets between concerts
- Record the audio output of a concert
-
- Overview of concerts
- Create a concert
- Open and close concerts
- Save concerts
- How saving affects parameter values
- Clean up concerts
- Consolidate assets in a concert
- Rename the current concert
-
- Overview of the Concert Settings Inspector
- Set MIDI Routing to channel strips
- Transpose incoming note pitch for a concert
- Define the program change message source
- Send unused program changes to channel strips
- Set the time signature for a concert
- Change the tuning for a concert
- Set the pan law for a concert
- Add text notes to a concert
- Control the metronome
- Silence MIDI notes
- Mute audio output
-
- Layout mode overview
-
- Screen control parameter editing overview
- Lift and stamp screen control parameters
- Reset screen control parameters
- Common screen control parameters
- Keyboard screen control parameters
- MIDI activity screen control parameters
- Drum pad screen control parameters
- Waveform screen control parameters
- Selector screen control parameters
- Text screen control parameters
- Background screen control parameters
- How MainStage passes through MIDI messages
- Export and import layouts
- Change the aspect ratio of a layout
-
- Before performing live
- Use Perform mode
- Screen controls in performance
- Tempo changes during performance
- Tips for performing with keyboard controllers
- Tips for performing with guitars and other instruments
- Tune guitars and other instruments with the Tuner
- The Playback plug-in in performance
- Record your performances
- After the performance
- Tips for complex hardware setups
-
- Overview of keyboard shortcuts and command sets
-
- Concerts and layouts keyboard shortcuts
- Patches and sets (Edit mode) keyboard shortcuts
- Editing keyboard shortcuts
- Actions keyboard shortcuts
- Parameter mapping (Edit mode) keyboard shortcuts
- Channel strips (Edit mode) keyboard shortcuts
- Screen controls (Layout mode) keyboard shortcuts
- Perform in Full Screen keyboard shortcuts
- Window and view keyboard shortcuts
- Help and support keyboard shortcuts
-
-
- Use MIDI plug-ins
-
- Arpeggiator overview
- Arpeggiator control parameters
- Note order parameters overview
- Note order variations
- Note order inversions
- Arpeggiator pattern parameters overview
- Use Live mode
- Use Grid mode
- Arpeggiator options parameters
- Arpeggiator keyboard parameters
- Use keyboard parameters
- Assign controllers
- Modifier controls
- Note Repeater controls
- Randomizer controls
-
- Use Scripter
- Use the Script Editor
- Scripter API overview
- MIDI processing functions overview
- HandleMIDI function
- ProcessMIDI function
- GetParameter function
- SetParameter function
- ParameterChanged function
- Reset function
- JavaScript objects overview
- Use the JavaScript Event object
- Use the JavaScript TimingInfo object
- Use the Trace object
- Use the MIDI event beatPos property
- Use the JavaScript MIDI object
- Create Scripter controls
- Transposer controls
-
-
- Alchemy overview
- Alchemy interface overview
- Alchemy Name bar
- Alchemy file locations
-
- Alchemy source overview
- Source master controls
- Import browser
- Source subpage controls
- Source filter controls
- Source filter use tips
- Source elements overview
- Additive element controls
- Additive element effects
- Spectral element controls
- Spectral element effects
- Pitch correction controls
- Formant filter controls
- Granular element controls
- Sampler element controls
- VA element controls
- Source modulations
- Morph controls
- Alchemy master voice section
- Alchemy Extended parameters
-
- Playback plug-in overview
- Add a Playback plug-in
- Playback interface
- Use the Playback waveform display
- Playback transport and function buttons
- Playback information display
- Playback Sync, Snap To, and Play From parameters
- Use the Playback group functions
- Use the Playback Action menu and File field
- Use markers with the Playback plug-in
-
- Sample Alchemy overview
- Interface overview
- Add source material
- Edit mode
- Play modes
- Source overview
- Synthesis modes
- Granular controls
- Additive effects
- Additive effect controls
- Spectral effect
- Spectral effect controls
- Filter module
- Low and highpass filter
- Comb PM filter
- Downsampler filter
- FM filter
- Envelope generators
- Mod Matrix
- Modulation routing
- Motion mode
- Trim mode
- More menu
-
- Sculpture overview
- Sculpture interface
- Global parameters
- Amplitude envelope parameters
- Use the Waveshaper
- Filter parameters
- Output parameters
- Define MIDI controllers
- Extended parameters
-
- Copyright
Create Scripter MIDI plug-in controls in MainStage
The following section outlines how you can use the Script Editor to create standard interface controllers such as sliders and menus for your Scripter plug-ins. The only mandatory property you have 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.
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.
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 or header in the plug-in UI.
Tutorial script 11: Slider Creation
In MainStage, 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
In MainStage, 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
In MainStage, 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
In complex MainStage 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.
In MainStage, 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 */
}
}