Skip to main content

Designing Macro Controls

Introduction

Most of the interaction in Reactional Music is done through Macro Controls. These are simple controls that can be used to change the music in various ways, such as changing the intensity, tempo, mood, instrumentation, or even the key of the music.

Create a Macro Control

In the main view, press the plus sign labeled Create macro. This will create an empty macro control. To rename it, highlight the macro and press Ctrl+R.

Macro Control Types

In the current alpha version of Composer, there is only one type of Macro Control: Parameter. This type of macro control will accept any normalized value at runtime. Parameter macros are the most versatile type and can be used to control any parameter in the music. Other types are expected to be added in future versions.

TypeDescriptionAvailable in Alpha
ParameterAccepts any normalized value at runtime.Yes
TriggerAccepts a single trigger at runtime. One ShotNo
ToggleAccepts a single trigger at runtime. Toggles between 0 and 1.No

Adding Interactive Blocks

Interactive Blocks are the foundational elements of the interactive music system. They define how the music should change when a macro control is triggered. To access the Interactive Blocks panel, click the button labeled Interactive blocks in the top left corner of the main view. From there, you can drag and drop interactive blocks into the main view.

Each interactive block has several parameters that can be configured to determine how the music changes when a macro control is triggered. The parameters vary for each interactive block and are described in detail in the Interactive Blocks section.

Some behaviors are common to all interactive blocks. These are described below.

Quant

This knob defines the responsiveness of an interactive block, quantized to musical values. For instant changes, set it to a 1/128th note. For slower changes, set it to a 1/4 note or more. This is useful, for example, if you want to change the modality of the music but want it to change on strong beats or full bars.

Min Max (In/Out)

You can remap the macro control value to a different range. This is useful, for example, if you want to change the tempo of the music but want to limit the range of the tempo change. Additionally, you can also invert the range, so that the music changes in the opposite direction.

Values outside the In range mean the interactive block will be inactive.

Continuous Toggle

This toggle determines whether the interactive block should be continuous or not. If it is continuous, the music will change as long as the macro control is active. If it is not continuous, the music will change only once when the macro control is triggered.

Block Specific Parameters

In general, if a block has a single parameter, it will be directly influenced by the remapped macro value. Currently, there is no visual indicator of the final remapping. For instance, in the Scale Tempo block, tempo scaling goes from 0.1 to 2, where a macro value of 0 corresponds to 0.1 and a value of 1 corresponds to 2.

Core Macros

We require a minimum of four core macros. Ensure they are ordered within Composer as follows. Below are the details for each macro:

Density

  • Purpose: Create a sense of sparseness vs. density.
  • Effective Block: “Note Probability”.
  • Application: Apply this block to individual instruments to control the level of sparseness in specific areas of instrumentation. Ensure that some sound remains audible, even when the Macro value is set to 0, by setting the Map Min value greater than 0.

Energy

  • Purpose: Control low vs. high energy levels.
  • Effective Blocks:
    • “Velocity Multiplier”
    • “Range Clamp”
    • “Force Quant”
  • Application: Use these blocks across your range of instruments to achieve the desired energy level. Ensure that some sound remains audible, even when the value is set to 0 (it should not result in complete silence).

Autonomy

  • Purpose: Balance between original notes and deviations in the music.
  • Effective Blocks:
    • “Octave Shifter”
    • “Random Deviation”
    • “Drag Random”
  • Application: Utilize these blocks to introduce variations and deviations in the music.

Progress

  • Purpose: Create transitions to different parts of your track.
  • Effective Block: “Jump to Section”.
  • Application: Use in conjunction with Map Min/Max values to navigate through different parts of the track.
    • Lag Tip: Introduce a bit of lag (e.g., 0.05) to avoid abrupt transitions.
    • Silence Value: Set to 1 for smooth progression.

Additional Macros

Following the implementation of these mandatory core macros, you are encouraged to add any additional macros that are specific to your theme. These could include altering the tempo of your theme, incorporating chromaticism, or addressing any other special use-case scenarios.

Here are some examples:

Track

  • Purpose: Synchronize with a track or create a sparse vibe for accompaniment.
  • Options:
    • Jump to a section at value 1 that is suitable for a track (ensure the “Track Part” box is checked).
    • Alternatively, use other interactive blocks to create a sparse vibe that complements a track.

Tempo

  • Purpose: Adjust the speed of the theme.
  • Effective Block: "Set Tempo".
  • Application: Use this block to increase or decrease the BPM, allowing dynamic tempo changes within your theme.