Manual

Getting around


By default, the H button is set to rotate through the Mixer, Channel, and Browser windows. The windows to rotate through can be edited in the config.py file. The arrows can be used to selected channels or tracks, depending on the focused window. When the Channel Rack is focused, up/down will selected tracks and left/right will select patterns. The jog wheel can also be used to select/tracks but only when the Song windows is focused on the SQ and the Cursor is selected. By default, the jog wheel may be set to control BPM.

The SQ's touchpad is set to the scroll functionality by default. This is possibly the easiest way to select tracks and channels. It can select any channel and up to mixer track 32 by default. This number can be changed in the config.py file and the touchpad's function can be edited in the config_layout.py file.

Button B will open the plugin browser. The arrows and be used to select a plugin and the Enter button, D, will add it to the Channel Rack. When the Browser is focused, the arrows and be used to select files. Left/right will open/close folders and the Enter button can be used to select and add the sample.


Modes


The script gives the SQ four main modes: Keyboard, Sequencer, Pad Per Channel, and Mixer Control. Within some of these are a number of options which use the following terminology: Mode -> Submode -> Layout.

A button in the A-H section (E by default) is assigned to rotate through the Modes and another (F) rotates available Submodes. The +/- buttons will rotate through layouts or octaves depending on the Mode/Submode.


Keyboard


The Keyboard mode has three Submodes: Keys, Continuous and FPC. Keys is the initial keyboard layout with the C notes lit blue. In the Continuous Submode, every pad will play a note of the currently selected key. The root note pads will be purple. The root note and scale can be set in the config.py or by assigning change_root or increment_scale functions to buttons. For both Submodes, the +/- buttons adjust the octave.

The FPC Submode will adjust the pads to control both banks of the FPC plugins. The bottom row will be purple and control back 1 and the top row will be blue and control bank 2.


Sequencer


The Sequencer has two Submodes: Standard and Parameter Entry. In the Standard Submode, steps can be set for the selected channel. In Parameter Entry Submode, steps can be selected to adjust their parameters.

Standard Sequencer Submode


In the Standard Submode, the +/- buttons adjust between various layouts. In each layout, pads 1-16 control the respective steps of the selected channel. The layouts offer different control options for the top row, listed below.

32 Step

Allows access to steps 17 - 32 of the current channel. Steps will appear blue.


Pattern Access

Pads will select patterns directly. Four ranges of 16 patterns (1-16, 17-32 etc) can be accessed by using the change_select_range function. The currently selected range is indicated by the darker purple pad. Pads are white with 1, 5, 9, 13 purple.


Channel Select

Pads will select channels directly. Pads will appear purple with the currently selected channel appearing white.


Channel Mute

Channels can be muted/unmuted. Pads will be yellow when the corresponding channel is muted and bright yellow when not.

Parameter Entry Submode


Changing Pattern and Channel Range

By using the change_select_range function, assigned to Shift B on Buttons Page 2 by default, channels and tracks in ranges 1-16. 17-32, 33-48, and 49-64 can be accessed.


Parameter Entry Mode allows the use of Graph Editor directly from the controller. Users can edit step values for the following parameters: Note, Velocity, Releasem Panning, Fine Pitch, Mod X, and Mod Y.

Upon entering Parameter Entry Mode, steps with active trigs will appear white. When steps are selected to edit parameters, they will change color based on the active Layout. The + / - buttons will rotate through the various Layouts discussed below. Multiple steps can be edited at the same time.

When selected, the knobs 1-7 will edit the respective parameters listed above. (1 - Note, 2 - Velocity, etc). The Graph Editor should automatically appear when a parameter is edited. Turning Knob 8 will close the Graph Editor.

The Submode has four Layouts that alter the values of selected steps in different ways.

Equal - The initial Layout which will set all selected steps to the same value. Selected steps will appear purple when active

Ramp - The name is a bit misleading as steps can also be faded in this Layout. The first selected step will remain as it is, and subsequent steps will incrementally increase or decrease from the initial step's value. Selected steps will appear light blue.

Fade - Similiar to ramp but instead relying the the value of the last step and all previous selected steps will increase or decrease towards it. Selected steps will be light yellow.

Random - Turing the knob will set all selected steps to a random value. The knobs will have four distinct ranges in which the value ranges will differ. The first quarter of the encoder will keep all random values in a lower range, the second quarter in a mid range, the third in a high range, and in the last, steps can have any value. Selected steps will be a bright blue in this Layout.


Pad Per Channel


In this mode, channels can be triggered by the corresponding pad. This mode has no Submodes or Layouts. All available channels will light their pad purple.


Mixer Control Mode


This mode controls the mute status of mixer tracks 1-32. Muted tracks will be unlit and unmuted tracks will be lit. In the initial Submode, pads will toggle the mute status of the corresponding track. Unmuted tracks will be white. The second Submode will instead Solo corresponding tracks. The soloed track will be lit purple.


Functions


A list of the available functions can be found here. While most of the functions control FL Studio directly, a few important functions control the script itself. The Shift function allows an extra function to be added to each A-H button, knobs, and button 1-6. The transport, solo, mute, arm and arrow buttons cannot have a secondary function added. By default the A button toggles the shift status. When shift is active, the + button will be unlit as an indicator.


Configuration


The script is highly configurable for individual user's needs. Users who are not programmers should feel comfortable editing these files. The worst that can happen is that the script will not work and need to be redownloaded. Two different files can be edited to customize the script. There are config.py and config_layout.py.

The config.py file has descriptions for what each variable controls. ACTIVE_MODES controls what modes users will be able to rotate through. COLORS controls what colors the change_color function will rotate through. The color format FL uses is a bit strange but can be selected here. Add as many as desired.

The config_layout.py file is where users can set what function the buttons and knob have. Here is the entry for the G button, for example:

         "g": {  "functions": [    "clone_pattern", 
                                    "cut"
                        ],
         "track": 0},
    

The only code here that should be changed in this example is "clone_pattern", "cut", and 0. The "clone_pattern" in this example is the primary function for the G button, while "cut" is the function when shift is active. All functions should be in quotes and the commas should be left in place. The original code from the GitHub can always be pasted back if errors occur.

The 0 for track is only applicable for certain functions. The default code controlling knob functionality gives us a better example:

encoder_mappings = {
        "knob_1": { "functions": ["selected_level","nothing"],"track": 0},
        "knob_2": { "functions": ["selected_pan","nothing"], "track": 0},
        "knob_3": { "functions": ["set_random_min_octave","nothing"], "track": 0},
        "knob_4": { "functions": ["set_random_max_octave","nothing"], "track": 0},
        "knob_5": { "functions": ["set_random_offset","nothing"], "track": 0},
        "knob_6": { "functions": ["set_mixer_route","nothing"], "track": 0},
        "knob_7": { "functions": ["set_efx_track","nothing"], "track": 0},
        "knob_8": { "functions": ["master_mixer_level","nothing"], "track": 0},
        "knob_9":  { "functions": ["mixer_level", "mixer_pan"], "track": 1},
        "knob_10": { "functions": ["mixer_level", "mixer_pan"], "track": 2 },
        "knob_11": { "functions": ["mixer_level", "mixer_pan"], "track": 3 },
        "knob_12": { "functions": ["mixer_level", "mixer_pan"], "track": 4 },
        "knob_13": { "functions": ["mixer_level", "mixer_pan"], "track": 5 },
        "knob_14": { "functions": ["mixer_level", "mixer_pan"], "track": 6 },
        "knob_15": { "functions": ["mixer_level", "mixer_pan"], "track": 7 },
        "knob_16": { "functions": ["mixer_level", "mixer_pan"], "track": 8 },
        "knob_17": { "functions": ["mixer_level", "mixer_pan"], "track": 9 },
        "knob_18": { "functions": ["mixer_level", "mixer_pan"], "track": 10 },
        "knob_19": { "functions": ["mixer_level", "mixer_pan"], "track": 11 },
        "knob_20": { "functions": ["mixer_level", "mixer_pan"], "track": 12 },
        "knob_21": { "functions": ["mixer_level", "mixer_pan"], "track": 13 },
        "knob_22": { "functions": ["mixer_level", "mixer_pan"], "track": 14 },
        "knob_23": { "functions": ["mixer_level", "mixer_pan"], "track": 15 },
        "knob_24": { "functions": ["mixer_level", "mixer_pan"], "track": 16 },
        "knob_25": { "functions": ["mixer_level", "mixer_pan"], "track": 17 },
        "knob_26": { "functions": ["mixer_level", "mixer_pan"], "track": 18 },
        "knob_27": { "functions": ["mixer_level", "mixer_pan"], "track": 19 },
        "knob_28": { "functions": ["mixer_level", "mixer_pan"], "track": 20 },
        "knob_29": { "functions": ["mixer_level", "mixer_pan"], "track": 21 },
        "knob_30": { "functions": ["mixer_level", "mixer_pan"], "track": 22 },
        "knob_31": { "functions": ["mixer_level", "mixer_pan"], "track": 23 },
        "knob_32": { "functions": ["mixer_level", "mixer_pan"], "track": 24},
        "jog_wheel": {"functions": ["jog_wheel", "jog_wheel"], "track": 0},
        "touch_mod": {"functions": ["scroll", "nothing"], "track": 0},
        "touch_cc": {"functions": ["nothing", "nothing"], "track": 0}
    }
    

Knobs 9 and up control the various pages of knobs accessible through the User button on the SQ. The functions mixer_level and mixer_pan control dedicated tracks on the mixer. knob_9 in this case will always control the mixer_level and pan for track 1, 10 controls track 2 and so on. Track 0 will control the Master track. This can be applied to some button functions as well such as pattern_select, mute channel et al.

While the functionality of the transport, arrow, solo, mute, arm and jog wheel functions can be changed, no shift function or specific track/channel control can be added. These functions are controlled on their own, smaller script which has less functionality. The functions are set in the device_presonusatomsqMIDIIN2.py file. Currently, the functions that can be set are limited to what is found in the Midi2Action class in this file.


Plugin Configuration


Plugins parameters can be custom controlled by the encoders. They can be added or edited in the plugindata.py file. If the name of a plugin matches a key entry in the plugin_dict dictionary, the script will assign the parameter number in the list to the corresponding knob. The first number sets the parameter for the touch pad to control. The following set the knobs, including all pages.

To add a plugin, assign a button the print_plugin_data function. Select the plugin the the channel rack. Press the button and open the Script Output under View. This will print out the plugin's parameters and corresponding numbers, as well as the name of the plugin in the first line. Add the exact name as a key in plugin_dict. The value can be set as a list of the parameter's number ordered as wished.

The following is an example for the FruityDance plugin. From the Script Output:


    Fruity Dance
{'Dance move': 0, 'Mirror character horizontally': 1, 'Show window': 2, 'Motion blending': 3, 
'Speed multiplicator': 4, 'X coordinate': 5, 'Y coordinate': 6}

An example of what the plugin_dict should look like:


plugin_dict = {
    'Fruity Dance': [0, 5, 6, 4, 1, 2, 3],
    'Toxic Biohazard': [15, 16, 0, 1, 2, 3, 4, 5, 6],
}

In this example, 0 is assigned to the touchpad and will control the Dance Move. 5 is assigned to Knob 1 and will control the X coordinate and so on from there. Any knobs not assigned will not function.

The plugin must be open and focused for the knobs to control it. Otherwise, the knobs will have their default functions. If a plugin is not assigned, the knobs will control parameters as if they were set [0, 1, 2, 3, 4 ....] when the plugin is focused.

Note that EFX plugins cannot be controlled using this method. To control a plugin with a knob, set its function to 'nothing' and link it through FL Studio.

Plugin Configuration


Random Generation


The script includes a numebr of random generation options. These include randomizing plugins, patterns, trigs, and notes.

Plugin parameters can be randomized by assigning the randomize_plugin function to a button. This will randomize all of the parameters of a plugin. This can result is abrasive sounds, so be careful when using. It is best used for generating noise or soundscapes.

In the Channel Rack, channel patterns can be randomized via three options. The random_pattern function will randomize the trigs and notes of the selected channel. The notes will be limited to the key selected in the config.py file or chosen via the dedicated function buttons. Knobs 3 and 4 can be used to set the minimum and maximum octaves the note will be. Knob 5 will control the likelihood that any individual trig is set. The random_trigs function will set trigs at middle C at the rate set by knob 5. random_notes will leave trigs in their place and only change the notes.


Other Functions

Some other noteworthy functions are discussed here:

shift_pattern_right - will shift the notes and trigs of the selected channel right one time with every push

double_pattern - doubles length of the pattern, copying and pasting the trigs/notes to the next set of steps. This will work up to 128 steps

change_color - changes the color of the selected track or channel. colors can be edited in the config.py file. colors can be choosen at www.midicontrol.cc/fl-colors

set_mixer_route - routes the currently highlighted mixer track to one chosen using Knob 7

escape - escape is a useful function to keep accessible as occasionally windows will be focused that cannnot be exited without otherwise using the mouse

enter - this function will also open channels in the Channel Rack and add time markers when the Playlist is focused

tap_tempo - not set by default but may be useful for some