Skip to content

Glossary ​

JUCE classes, audio terms, and plug-in jargon in plain English. Terms are alphabetical; every entry has its own link anchor, and the site search (/ or Ctrl+K) finds them too.

A ​

AAX ​

Avid Audio eXtension, the plug-in format for Pro Tools. JUCE bundles the SDK, but shipping requires signing with PACE tools.[1] → Plug-in formats

AbstractFifo ​

Manages the read and write positions of a lock-free, single-reader, single-writer FIFO. You supply the storage. A common way to stream data between the audio and GUI threads. juce_core

APVTS (AudioProcessorValueTreeState) ​

Owns a plug-in's parameters, keeps them in sync with a ValueTree for saving, and provides attachments that bind widgets to parameters. juce_audio_processors → State

ARA ​

Audio Random Access, an extension developed by Celemony and PreSonus that lets a plug-in (such as Melodyne) see a host's whole audio clips and timeline, not only the live stream. Supported since JUCE 7.[2]

Attachment ​

A small object (SliderAttachment, ButtonAttachment, ComboBoxAttachment, ParameterAttachment) that keeps a UI control and a plug-in parameter in sync in both directions, including host automation and undo gestures.

AU / AUv3 ​

Apple's Audio Unit plug-in formats. AU (v2) is a macOS bundle used by Logic and GarageBand. AUv3 is an app extension and is the Audio Unit variant JUCE builds for iOS.

Audio thread ​

The high-priority thread, owned by the driver or host, that calls your processing code every block. It must never wait. → Threads

AudioBuffer ​

A multi-channel block of float or double samples, stored as one array per channel (non-interleaved). The main data type passed to processBlock(). juce_audio_basics

AudioDeviceManager ​

Opens, configures, and remembers the audio and MIDI devices for a standalone app, and calls your AudioIODeviceCallbacks. juce_audio_devices

AudioProcessor ​

The abstract base class for anything that processes audio and MIDI in blocks: your plug-in, a node in a graph, or a hosted third-party plug-in. juce_audio_processors_headless → Anatomy of a plug-in

AudioProcessorEditor ​

The Component that forms a plug-in's GUI. It is created by AudioProcessor::createEditor() and may be destroyed and recreated at any time.

AudioProcessorGraph ​

An AudioProcessor that contains other processors joined by audio and MIDI connections. The basis of modular hosts such as the AudioPluginHost.

AudioSource ​

A simpler, pull-based audio interface (prepareToPlay / getNextAudioBlock / releaseResources) used by players, mixers, and file readers. Unlike AudioProcessor, it has no parameters, buses, or MIDI.

B ​

Block / block size ​

The number of samples processed per callback, for example 64–1024. Smaller blocks mean lower latency but more CPU overhead. Never assume a fixed size: hosts may send shorter blocks than prepareToPlay() announced.

Bus ​

A named group of channels on a processor, such as "Main In" (stereo) or "Sidechain" (mono). Negotiated with the host through BusesProperties and isBusesLayoutSupported().

C ​

Component ​

The base class of every GUI element: a rectangle that paints itself, holds children, and receives mouse and keyboard events. juce_gui_basics → Components

ComponentPeer ​

The platform-specific native window behind a top-level Component. Child components don't have one.

createPluginFilter() ​

The free function every JUCE plug-in must define. It returns a new instance of your AudioProcessor, and the format wrappers call it. ("Filter" is a legacy word for processor.)

D ​

Denormals ​

Extremely small floating-point numbers that can make CPUs slow down dramatically, typically in decaying filter tails. ScopedNoDenormals at the top of processBlock() switches them off.

DSP ​

Digital signal processing: the maths applied to audio samples. Also the juce_dsp module.

E ​

Exporter ​

In the Projucer, a target IDE configuration: Xcode (macOS or iOS), Visual Studio, Android, or Linux Makefile.

F ​

FloatVectorOperations ​

SIMD-accelerated functions for whole arrays of samples: add, multiply, copy, clip, find min and max. juce_audio_basics

G ​

Graphics ​

The drawing context passed to Component::paint(). It fills, strokes, draws text and images, and clips, independent of the platform renderer. juce_graphics

H ​

Headless ​

Running without a display or GUI, for example on a server, in CI, or on embedded Linux. JUCE 6 added headless Linux support.[3] juce_audio_processors_headless provides the plug-in model without juce_graphics.

Host ​

The application that loads plug-ins: a DAW such as Ableton Live, Logic, Pro Tools, or Reaper, or JUCE's own AudioPluginHost.

I ​

Introjucer ​

The Projucer's predecessor, a project generator for the module format. It was merged into the Projucer in JUCE 4.2.[3:1]

J ​

jassert ​

JUCE's debug-only assertion macro. When one fires, the comment above it usually explains what you did wrong.

JUCEApplication ​

The base class for a GUI application's lifecycle (initialise, shutdown, systemRequestedQuit, …). The START_JUCE_APPLICATION macro creates main() for you.

JuceHeader.h ​

A legacy convenience header that includes all of a project's modules. The Projucer generates it, and CMake does so via juce_generate_juce_header. Modern code usually includes module headers directly.

L ​

Latency ​

The delay between sound entering and leaving the system. It is driven by the block size, the driver, and any look-ahead in your algorithm. Report algorithmic latency with setLatencySamples() so hosts can compensate.

LookAndFeel ​

An object that draws the built-in widgets. Swap or subclass it (usually LookAndFeel_V4) to restyle an app without subclassing each widget.

LV2 ​

An open, extensible plug-in standard. JUCE 7 added authoring and hosting.[3:2]

M ​

Message thread ​

The single thread that runs the event loop, GUI, timers, and most callbacks. Only this thread may touch Components. → Threads

MessageManager ​

Runs the message loop. MessageManager::callAsync() queues a function to run on the message thread. juce_events

MIDI / MIDI 2.0 / UMP ​

The Musical Instrument Digital Interface protocol. MidiMessage and MidiBuffer carry MIDI 1.0 events. MIDI 2.0 adds higher resolution and bidirectional negotiation (MIDI-CI), and uses Universal MIDI Packets (UMP). juce_audio_basics, juce_midi_ci

Module ​

A folder of JUCE source with one main header, a declaration block, and a few compile-unit .cpp files. The unit of dependency in JUCE. → Build systems

MPE ​

MIDI Polyphonic Expression, a convention for per-note pitch bend, pressure, and timbre by giving each note its own MIDI channel. Supported by MPESynthesiser and related classes.

O ​

OSC ​

Open Sound Control, a network protocol for sending addressed control messages (/synth/cutoff 0.5) over UDP. juce_osc

Oversampling ​

Processing at a multiple of the sample rate to reduce aliasing in non-linear effects such as distortion. dsp::Oversampling.

P ​

PACE ​

PACE Anti-Piracy, the company that owns JUCE (since 2020). It also makes iLok and the signing tools required for AAX.

Parameter ​

A host-visible, automatable control of a plug-in, such as AudioParameterFloat. Its ID must stay stable across versions.

PIP ​

Projucer Instant Project: a single header with a metadata block that tools turn into a full project. Many JUCE demos are PIPs.

prepareToPlay() ​

Called before processing starts, with the sample rate and maximum block size. Allocate and reset here, not in the audio callback.

processBlock() ​

The audio callback of an AudioProcessor. It receives an AudioBuffer (input and output, processed in place) and a MidiBuffer. It runs on the audio thread.

Projucer ​

JUCE's GUI project manager and IDE exporter. It edits .jucer files. It is an alternative to CMake. → Build systems

R ​

Real-time safe ​

Code that finishes in bounded time: no locks that might wait, no allocation, no system calls with unbounded duration. Required on the audio thread.

repaint() ​

Marks a component (or area) as needing a redraw. The actual paint() happens later, and multiple calls are merged.

resized() ​

Called when a component's size changes. This is where you set the bounds of its children.

S ​

Sample rate ​

Samples per second per channel, commonly 44,100 or 48,000 Hz. It can change between prepareToPlay() calls, so never hard-code it.

SafePointer ​

Component::SafePointer<T>: a pointer to a component that automatically becomes null if the component is deleted. Use it in async callbacks.

SmoothedValue ​

Ramps a value to its target over a set time, to avoid clicks ("zipper noise") when parameters jump.

Standalone ​

A plug-in format target that wraps your plug-in in its own application window, with audio and MIDI settings.

Synthesiser ​

A polyphonic synth framework: a Synthesiser owns SynthesiserVoices, assigns incoming notes to them, and mixes their output.

T ​

Timer ​

Calls timerCallback() on the message thread at a set interval. Ideal for polling audio-thread state to drive meters.

Tracktion ​

The DAW Julian Storer wrote, from which JUCE was extracted. Its engine now lives on as the open-source Tracktion Engine, built on JUCE.

U ​

UndoManager ​

Records UndoableActions (and ValueTree changes you pass it to) into transactions that can be undone and redone. juce_data_structures

V ​

ValueTree ​

A reference-counted tree of typed nodes with properties and children. It is observable, undoable, and serialisable, and it is JUCE's recommended model for app and plug-in state. juce_data_structures

var ​

A variant type holding an int, double, bool, string, array, object, or binary data. It is used for ValueTree properties and JSON.

VST3 ​

Steinberg's current plug-in format, supported on macOS, Windows, and Linux. Its SDK is bundled with JUCE and is MIT-licensed from version 3.8.0.[3:3]

W ​

WebView UI ​

A plug-in or app interface written in HTML, CSS, and JavaScript, hosted in a WebBrowserComponent and bound to parameters via relays. Added in JUCE 8.

Wrapper ​

The code in juce_audio_plugin_client that implements a plug-in format's API and forwards calls to your AudioProcessor.

Sources ​

Definitions of JUCE classes are written from the Doxygen comments in the module headers (search a class with grep -rlE "^\s*(class|struct)\s+(JUCE_API\s+)?Name\b" modules, as the README suggests); class names in code spans link to the generated API reference (see the nav bar). Audio terms (sample rate, denormals, and so on) are standard industry terminology and are not individually sourced. Version claims come from CHANGE_LIST.md.


  1. README.md, "AAX Plug-Ins". ↩︎

  2. CHANGE_LIST.md, Version 7.0.0: "Added Audio Random Access (ARA) SDK support". Origin of ARA (read from search-result summaries): Audio Random Access, Wikipedia; Celemony/ARA_SDK. ↩︎

  3. CHANGE_LIST.md: 7.0.0 (LV2), 8.0.11 (VST3 SDK 3.8.0, MIT), 6.0.0 (headless Linux), 4.2 (Introjucer merged into the Projucer). ↩︎ ↩︎ ↩︎ ↩︎

Personal study notes on JUCE. Not affiliated with or endorsed by the JUCE team.