BPM controls can be added to your show to enable a control surface to set a BPM dynamically at play time to synchronize animations in your space to a beat.
Creating the Controls
Let's take a look at how to add them to your Universe and how to use them to influence stuff in your world.
- Let's start fresh by clicking on File menu/New
- Next, from the left side of the screen, undock the toolbox panel and select 'live tools' from the top list
- Select 'bpm controls' from the bottom list
- Left click anywhere in the space to create the controls
- Right-click to exit draw mode
You will now see bpm controls added to your space. The controls themselves are added to a ScreenSpace on a overlay ViewPort that will be visible regardless of what ViewPort you select in the ViewPort panel. You can think of this overlay ViewPort as being your performance control surface. If you define a separate Display as your output to your audience, only you will be able to see the control surface on the Master Display while your audience sees a different ViewPort as defined in the Display properties.
When adding the bpm controls to your world, along with the controls themselves, a special pulse, called the 'BPM Pulse' is also added to your Universe's library. This pulse's frequency is defined when we interact with the bpm controls. By assigning this pulse to properties of things in our universe, we effectively can sync the properties to our beat.
Syncing a Property to the Beat
Let's define something in the space to sync to the beat. In this example, we'll animate the radius of a sphere to pulse to the beat. Let's draw the sphere.
- Undock the toolbox panel
- Select 'entities' from the top list of the toolbox
- Select 'sphere' from the bottom list of the toolbox
- Now, left click and drag in the space to draw a sphere
- Right-click to exit draw mode
Next, let's assign the BPM pulse to the sphere's radius property.
- Ensure the sphere is selected.
- Undock the property editor panel at the top right of the screen
- From the left side of the property editor panel, expand the MeshModel item
- Click on the SphereShape item under MeshModel
- Next, undock the browser panel at the top-left of the screen
- Click on Universe from the left list of the browser panel
- You should see the 'BPM Pulse' object on the right side of the browser panel
- Finally, drag-and-drop the 'BPM Pulse' onto the 'Radius' property of the SphereShape
Using the BPM controls
Now that we've created the controls and have assigned the 'BPM Pulse' to a property in the space, we can now press play and interact with the tool itself to see the results. Before we start, you should start playing some music that represents the external venue music you want to sync with.
- Press play
- Repeatedly click 'Tap' to align with your music's beats until it automatically takes over.
The 'BPM Pulse's frequency property is set to the BPM you tap. The pulse in turn, affects the 'Radius' property we assigned it to.
Next off, let's look at what each control does:
Tap: As just experienced, tap can be used to define the rate at which our 'BPM Pulse' fires. Additionally, if not in auto mode, 'tap' can be used to manually fire pulses.
Resync: Over time, the pulse may begin to become de-synchronized due to drift caused by slight differences between your tapped beat and the song's actual beat. If this happens, you can click 'resync' on a music beat to snap the beats back to the sampled interval.
Auto: When enabled (as evident by a blue box around the word 'auto'), this button will enable the 'BPM Pulse' to fire at the rate defined when we use the 'tap' button. If disabled, the pulse will only fire when we click the 'tap' button.
×2: This button will double the measured BPM in auto mode.
÷2: This button with halve the measured BPM in auto mode.
- In addition to clicking the control's buttons, you can also press the '1,2,3,4,5' keys on your keyboard to activate the controls as well.
- Since the controls live in your Universe, you can edit them as you like to change their look or functionality. You can find them by clicking on the 'Overlay ViewPort' from the viewport panel.
- Also, as the controls are part of your Universe, they will be exported with it when exporting your show as an application.
Adjusting the Beat Synchronization
After drag-and-dropping the 'BPM Pulse' onto the sphere's 'Radius' property, additional properties were added underneath the 'Radius' property that allow us to control how the pulse is applied to the property.
- Ensure the sphere is selected and navigate to SphereShape (under MeshModel) on the left list of the property editor panel
- Expand the 'Radius' property on the right side of the property editor panel
- Expand the 'NumberPulseController' under 'Radius'
Let's take a look at what each property does:
Pulse: This is pulse we assigned, which in our case is the 'BPM Pulse'.
Interval: If we consider the pulse firing at each beat, the Interval defines which beat we actually want to sync to. 1 means every beat, 2 means every other beat, and so forth.
Interval Offset: The interval offset defines what beat within the interval to sync to. This value is only valid between 0 and one less than the Interval. For instance, if the Interval is set to 2, we can either sync to beat 1 or beat 2 by setting the offset to either 0 or 1.
Mode: Mode allows us to define how the property value is affected. Let's look at each mode:
- Pulse - The value is adjusted by the Offset value on the beat and then returns back to the original value.
- Shift (Wrap) - The value is increased/decreased by the Offset and will wrap to the start of the value range when the max/min range is reached.
- Shift (Reflect) - The value is increased/decreased by the Offset and will reflect back in the opposite direction when the max/min range is reached.
- Shift (Clamp) - The value will increase/decrease until the max/min range is reached.
- Random - A random value within the range will be picked on each pulse.
Offset: The value to apply to the current value depending on the Mode set. Can be positive or negative to affect the direction of value change.
Range: Defines the operating value range for Modes that affect across a range.
Attack/Release: These are properties affecting how the value animates to the offsetted value on a pulse hit. Attack represents the animation to the offset while Release (Pulse mode only) represents the animation back to the start value.
- Curve - The animation curve to use to animate to the offset
- Use Pulse Time - If true, the animation time will be set to the actual time between pulse hits, which in our 'BPM Pulse' case, will be the time between beats. If false, you can define the animation time via the 'Time' property.