The AudioQ window: a source display with a loop region, a live output display, and panels for main, filters, compressor, granular, tremolo and glitch controls

AudioQ

A sampler plug-in I built on my own in C++ with JUCE. I wrote its file player, the make-up gain and the chain from the tremolo to the output.

Watch the demo with sound Source on GitHub v1.0.0 for Windows, VST3

It plays a recording as a loop, in random regions or in short grains, and sends it through filters, a compressor and four effects: tremolo, bitcrusher, stutter and reverse.

Started 2024. v1.0.0, 9 November 2025. C++17, JUCE 8, MIT licence. The window at full size

A dry file, then each section in turn

  1. 0:00Dry playback
  2. 0:12Filters, then compressor
  3. 0:29Random mode
  4. 0:40Granular mode
  5. 0:54Loop region, then tremolo
  6. 1:09Stutter and reverse

The signal chain, in order

The panels group the controls, but the audio passes through them in this fixed order. The filters and the compressor are JUCE modules.

The AudioQ source display: a waveform with a lit loop region and the playhead standing to its left
  1. Source

    Plays a WAV, AIFF or MP3 dropped on the plug-in and loops a region dragged on the waveform. Tempo resamples the file, so speed and pitch move together. Random mode jumps between regions 0.1 to 3 s long, granular mode between grains of 50 to 200 ms. AudioFilePlayer

The filters panel with low and high pass knobs, beside the compressor panel with threshold, ratio, attack and release
  1. Filters

    Low-pass and high-pass, skewed so halfway round the knob is about 2 kHz. juce::dsp::StateVariableTPTFilter

  2. Compressor

    Then a make-up gain I added, worked out from threshold and ratio, capped at 18 dB. juce::dsp::Compressor

    float makeupDb = juce::jlimit(0.0f, 18.0f,
        (-cThresh)
        * (1.0f - (1.0f / juce::jmax(1.0f, cRatio)))
        * 0.35f);
The tremolo panel with its switch, rate and depth, beside the glitch panel with the crush, downsample, stutter, reverse and dry / wet controls
  1. Tremolo

    A squared sine LFO at 0.1 to 10 Hz, so the level stays longer in the dips. From depth 0.5 they reach silence.

  2. Bitcrusher

    Rounds each sample to steps of 1/2bits, from 16 bits down to 1. Downsample holds it for up to 40 samples.

  3. Stutter

    Repeats the latest chunk of a one-second history buffer, one period of the 2 to 32 Hz stutter rate long.

  4. Reverse

    Reads the same buffer backwards, 180 ms at a time.

  5. Dry/wet

    Blends in a dry copy taken straight after the file player, before the filters.

The AudioQ live output display: a quiet stretch of signal followed by two louder passages
  1. Output

    Gain up to about +10 dB. A safety check then clears any block peaking above 4.0, about +12 dB, and shows a warning.

    if (peakLevel > 4.0f)
    {
        dangerousVolumeDetected.store(true);
        buffer.clear();
        return;
    }

This is the chain in the GitHub source as of July 2026. That source builds a VST3 and a standalone app. The release is still v1.0.0, a Windows VST3, and I have not yet tested AudioQ across hosts, operating systems, sample rates and channel layouts.