FX Class: Roll
Interactive example
Overview
The Roll effect a loops the incoming audio synchronized to the current tempo, independently from the player outputting it.
bpm controls the tempo between 40 and 250 beats per minute, while the beats property controls the length of the loops from 1/64 to 4 beats.The wet property controls the mix of the effect with the original audio between 0 and 1.
One instance allocates around 1600 kb memory.
Implementation example
class SuperpoweredRollProcessor extends SuperpoweredWebAudio.AudioWorkletProcessor {// Called when the AudioWorklet is ready to start processing audioonReady() {this.roll = new this.Superpowered.Roll(44100 // The initial sample rate in Hz.96000 // The max samplerate that the roll may need to go up to);this.roll.enabled = true;}// Runs before the node is destroyed.// Clean up memory and objects here (such as free allocated linear memory or destruct Superpowered objects).onDestruct() {this.roll.destruct();}// The shape of the message we pass from our main thread is up to youonMessageFromMainScope(message) {// Here is an example of how to apply changes to the Three Band EQ instanceif (typeof message.bpm !== 'undefined') this.roll.bits = message.bpm;if (typeof message.beats !== 'undefined') this.roll.beats = message.beats;if (typeof message.wet !== 'undefined') this.roll.wet = message.wet;}// This is the process loop which is passed pointers to buffers// from the WebAudio API (inputBuffer and outputBuffer), with the buffersize (128 samples when running as a native AudioWorklet)processAudio(inputBuffer, outputBuffer, buffersize) {// Ensure the samplerate is in sync on every audio processing callbackthis.roll.samplerate = this.samplerate;// Render the output buffersif (!this.roll.process(inputBuffer.pointer, outputBuffer.pointer, buffersize)) {for (let n = 0; n < buffersize * 2 ; n++) outputBuffer.array[n] = inputBuffer.array[n];}}}
#include "SuperpoweredRoll.h"void initRollEffect() {const unsigned int sampleRate = 44100;const unsigned int maxSampleRate = 88200;roll = new Superpowered::Roll(sampleRate, maxSampleRate);roll->enabled = true;}void configureEffect() {roll->wet = 0.5;roll->bpm = 128;roll->beats = 1;}void processAudio(float *interleavedInput, float *interleavedOutput, unsigned int numberOfFrames, unsigned int samplerate) {// Ensure the samplerate is in sync on every audio processing callbackroll->samplerate = samplerate;// Render the output buffersbool outputChanged = roll->process(interleavedInput, interleavedOutput, numberOfFrames);...}
Properties
beats
PROPERTYThe loop length of the effect in beats.
| Type | Min | Max | Default | Number | 0.015625 (1/64) | 4 | 1 |
|---|
beats
PROPERTYThe loop length of the effect in beats.
| Type | Min | Max | Default | float | 0.015625 (1/64) | 4 | 1 |
|---|
bpm
PROPERTYThe bpm of the current audio.
| Type | Min | Max | Default | Number | 40 | 250 | 40 |
|---|
bpm
PROPERTYThe bpm of the current audio.
| Type | Min | Max | Default | float | 40 | 250 | 40 |
|---|
wet
PROPERTYThe dominance of the effect.
| Type | Min | Max | Default | Number | 0 | 1 | 1 |
|---|
wet
PROPERTYThe dominance of the effect.
| Type | Min | Max | Default | float | 0 | 1 | 1 |
|---|
enabled
PROPERTYTurns the effect on/off. The actual switch will happen on the next process() call for smooth, audio-artifact free operation.
| Type | Min | Max | Default | Boolean | false |
|---|
enabled
PROPERTYTurns the effect on/off. The actual switch will happen on the next process() call for smooth, audio-artifact free operation.
| Type | Min | Max | Default | bool | false |
|---|
samplerate
PROPERTYThe sample rate of the audio context, you must update if it changes.
| Type | Min | Max | Default | Number |
|---|
samplerate
PROPERTYThe sample rate of the audio context, you must update if it changes.
| Type | Min | Max | Default | unsigned int |
|---|
Methods
constructor
METHODCreates a Roll instance.ParametersReturnsName Type Description samplerate NumberThe initial sample rate in Hz. maximumSamplerate NumberThe maximum sample rate in Hz to support. The higher the larger the memory usage. Type Description Superpowered.RollThe constructed instance. constructor
METHODCreates a Roll instance.ParametersReturnsName Type Default Description samplerate unsigned intThe initial sample rate in Hz. maximumSamplerate unsigned int96000 The maximum sample rate in Hz to support. The higher the larger the memory usage. Type Description Superpowered::RollThe constructed instance.
destruct
METHODDestructor to free Linear Memory.ParametersNoneReturnsNoneprocess
METHODProcesses/renders the audio. Always call it in the audio processing callback, regardless if the effect is enabled or not for smooth, audio-artifact free operation. It's never blocking for real-time usage.ParametersReturnsName Type Description input Number (pointer in Linear Memory)32-bit interleaved stereo input. output Number (pointer in Linear Memory)32-bit interleaved stereo output. numberOfFrames NumberNumber of frames to process. Recommendations for best performance: multiply of 4, minimum 64. Type Description BooleanIf process() returns with true, the contents of output are replaced with the audio output. If process() returns with false, it indicates silence. The contents of output are not changed in this case (not overwritten with zeros). process
METHODProcesses/renders the audio. Always call it in the audio processing callback, regardless if the effect is enabled or not for smooth, audio-artifact free operation. It's never blocking for real-time usage. You can change all effect properties on any thread, concurrently with process().ParametersReturnsName Type Default Description input float *32-bit interleaved stereo input. output float *32-bit interleaved stereo output. numberOfFrames unsigned intNumber of frames to process. Recommendations for best performance: multiply of 4, minimum 64. Type Description boolIf process() returns with true, the contents of output are replaced with the audio output. If process() returns with false, it indicates silence. The contents of output are not changed in this case (not overwritten with zeros).