FX Class: Gate

Interactive example


Overview

The Gate effect creates periodic attenuation of the audio signal.

The wet property allows you to control the strength of the effect with values between 0 and 1, while the bpm and beats property allow you to control the rhythm to open and close the gate.

It doesn't allocate any internal buffers and needs just a few bytes of memory.


Implementation example

class SuperpoweredFlangerProcessor extends SuperpoweredWebAudio.AudioWorkletProcessor {
// Called when the AudioWorklet is ready to start processing audio
onReady() {
this.gate = new this.Superpowered.Gate(
this.samplerate, // The initial sample rate in Hz.
);
this.gate.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.gate.destruct();
}
// messages are received from the main scope through this method.
onMessageFromMainScope(message) {
if (typeof message.wet !== 'undefined') this.gate.wet = message.wet;
if (typeof message.beats !== 'undefined') this.gate.beats = message.beats;
if (typeof message.bpm !== 'undefined') this.gate.bpm = message.bpm;
if (typeof message.enabled !== 'undefined') this.gate.enabled = Boolean(message.enabled);
}
processAudio(inputBuffer, outputBuffer, buffersize, parameters) {
// Ensure the samplerate is in sync on every audio processing callback
this.gate.samplerate = this.samplerate;
// Render the output buffers
if (!this.gate.process(inputBuffer.pointer, outputBuffer.pointer, buffersize)) {
for (let n = 0; n < buffersize * 2 ; n++) outputBuffer.array[n] = inputBuffer.array[n];
}
}
}
#include "SuperpoweredGate.h"
void initGateEffect() {
const unsigned int sampleRate = 44100;
gate = new Superpowered::Gate(sampleRate);
gate->enabled = true;
}
void configureGateEffect() {
gate->wet = 0.5;
gate->bpm = 128;
gate->beats = 1;
}
void processAudio(float *interleavedInput, float *interleavedOutput, unsigned int numberOfFrames, unsigned int samplerate) {
// Ensure the samplerate is in sync on every audio processing callback
gate->samplerate = samplerate;
// Render the output buffers
bool outputChanged = gate->process(interleavedInput, interleavedOutput, numberOfFrames);
...
}

Properties

beats

PROPERTY
The rhythm in beats to open and close the "gate".
TypeMinMaxDefault
Number
0.015625 (1/64)41

beats

PROPERTY
The rhythm in beats to open and close the "gate".
TypeMinMaxDefault
float
0.015625 (1/64)41

bpm

PROPERTY
The bpm of the current audio, defines the speed of the gate.
TypeMinMaxDefault
Number
4025040

bpm

PROPERTY
The bpm of the current audio, defines the speed of the gate.
TypeMinMaxDefault
double
4025040

wet

PROPERTY
The dominance of the effect.
TypeMinMaxDefault
Number
010.5

wet

PROPERTY
The dominance of the effect.
TypeMinMaxDefault
float
010.5
Inherited from FX Class

enabled

PROPERTY
Turns the effect on/off. The actual switch will happen on the next process() call for smooth, audio-artifact free operation.
TypeMinMaxDefault
Boolean
false

enabled

PROPERTY
Turns the effect on/off. The actual switch will happen on the next process() call for smooth, audio-artifact free operation.
TypeMinMaxDefault
bool
false

samplerate

PROPERTY
The sample rate of the audio context, you must update if it changes.
TypeMinMaxDefault
Number

samplerate

PROPERTY
The sample rate of the audio context, you must update if it changes.
TypeMinMaxDefault
unsigned int

Methods

  • constructor

    METHOD
    Creates an instance of the Gate class.
    Parameters
    NameTypeDescription
    samplerateNumberThe initial sample rate in Hz.
    Returns
    TypeDescription
    Superpowered.GateThe constructed instance.
  • constructor

    METHOD
    Creates an instance of the Gate class.
    Parameters
    NameTypeDefaultDescription
    samplerateunsigned intThe initial sample rate in Hz.
    Returns
    TypeDescription
    Superpowered::GateThe constructed instance.
Inherited from FX Class
  • destruct

    METHOD
    Destructor to free Linear Memory.
    Parameters
    None
    Returns
    None
  • process

    METHOD
    Processes/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.
    Parameters
    NameTypeDescription
    inputNumber (pointer in Linear Memory)32-bit interleaved stereo input.
    outputNumber (pointer in Linear Memory)32-bit interleaved stereo output.
    numberOfFramesNumberNumber of frames to process. Recommendations for best performance: multiply of 4, minimum 64.
    Returns
    TypeDescription
    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

    METHOD
    Processes/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().
    Parameters
    NameTypeDefaultDescription
    inputfloat *32-bit interleaved stereo input.
    outputfloat *32-bit interleaved stereo output.
    numberOfFramesunsigned intNumber of frames to process. Recommendations for best performance: multiply of 4, minimum 64.
    Returns
    TypeDescription
    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).
v1.0.33