Skip to content

Tutorials ​

Fourteen guides that distil the tutorials at https://juce.com/learn/tutorials/ into one page per topic, plus four original guides: three on Box2D physics and music (15 to 17) and one on profiling on macOS (18). Multi-part tutorials are merged, prose is shortened, and code is updated for the JUCE version in this repository (for example FontOptions instead of the deprecated Font constructors, ParameterID for parameters, CMake-first project setup). For the full step-by-step walkthroughs, screenshots, demo projects, and exercises, use the originals.

The guides are adapted from the ISC-licensed JUCE-tutorials sources, Copyright (c) Raw Material Software Limited. See the attribution notice for the attribution and licence text.

For API details, the headers are the reference: see the notes on finding documentation in the main README, and check BREAKING_CHANGES.md when moving code between versions.

Suggested order ​

#GuideYou will learnLevel
01Getting startedProject types, CMake and Projucer, the application class, windows, the main componentBeginner
02Graphics, layout, and animationGraphics, nested components, Rectangle, FlexBox, Grid, colours, look and feel, animationBeginner
03Built-in widgetsLabel, Slider, ComboBox, buttons, TableListBoxBeginner
04Listeners, ValueTree, and undoBroadcasting changes, data models, serialisation, UndoManagerBeginner to intermediate
05Audio input, output, files, and waveformsAudioAppComponent, devices, input processing, file playback, looping, thumbnailsIntermediate
06SynthesisNoise, sine, levels and decibels, Synthesiser, wavetablesIntermediate
07MIDI and MPEMidiMessage, MidiBuffer, MIDI input, MPE zones and synthesisIntermediate
08Audio plug-in basicsProcessor and editor, MIDI plug-ins, bus layouts, packagingBeginner to intermediate
09Plug-in parameters and stateParameters, AudioProcessorValueTreeState, attachments, saving stateIntermediate
10Cascading effects with AudioProcessorGraphNode graphs, dynamic effect chains, hosting processorsAdvanced
11DSPProcessor chains, filters, waveshaping, convolution, delay lines, FFT, SIMDIntermediate to advanced
12Core utilitiesRandom, BigInteger, File and streams, OSCBeginner to intermediate
13Rendering with OpenGLOpenGLAppComponent, shaders, matricesAdvanced
14Mobile and app servicesAndroid setup and screen sizes, purchases, notifications, analytics, licensingIntermediate to advanced
15Physics as a musical instrumentjuce_box2d, contact listeners, thread-safe hand-off to the audio thread, mapping collisions to notesIntermediate to advanced
16Integrating Box2D v3FetchContent, ids instead of pointers, hit and sensor events, threadingAdvanced
17A physical audio engineModal synthesis, contact-driven excitation, rolling noise, voice management, lock-free hand-offAdvanced
18Profiling on macOS with dSYM filesCMake and Xcode dSYM generation, sample, Activity Monitor, xctrace, incremental builds and ccache (macOS, Apple Silicon)Intermediate

Where each original tutorial went ​

Original tutorial (juce.com)Guide
Projucer Part 1, getting started with the Projucer01
Projucer Part 2, manage your Projucer projects01
Projucer Part 3, choosing the right Projucer template01
The main component01
The application window01
The Graphics class02
Parent and child components02
The Point, Line, and Rectangle classes02
Advanced GUI layout techniques02
Responsive GUI layouts using FlexBox and Grid02
Colours in JUCE02
Customise the look and feel of your app02
Animating geometry02
The Label class03
The Slider class03
The ComboBox class03
Radio buttons and checkboxes03
The TableListBox class03
Listeners and Broadcasters04
The ValueTree class04
Using an UndoManager with a ValueTree04
The AudioDeviceManager class05
Processing audio input05
Build an audio player05
Looping audio using the AudioSampleBuffer class05
Looping audio using the AudioSampleBuffer class (advanced)05
Draw audio waveforms05
Build a white noise generator06
Build a sine wave synthesiser06
Control audio levels06
Control audio levels using decibels06
Build a MIDI synthesiser06
Wavetable synthesis06
Create MIDI data07
Handling MIDI events07
Build a multi-polyphonic synthesiser07
Understanding MPE zones07
Create a basic Audio/MIDI plugin, Part 108
Create a basic Audio/MIDI plugin, Part 208
Plugin examples08
Configuring the right bus layouts for your plugins08
Package your app or plugin for distribution08
Adding plug-in parameters09
Saving and loading your plug-in state09
Cascading plug-in effects10
Introduction to DSP11
Add distortion through waveshaping and convolution11
Create a string model with delay lines11
The fast Fourier transform11
Visualise the frequencies of a signal in real time11
Optimisation using the SIMDRegister class11
The Random class12
The BigInteger class12
File reading12
Implement the OSC protocol in your app12
Build an OpenGL application13
Getting started with Android14
Managing Android screen sizes14
In-App Purchases on desktop and mobile devices14
Push Notifications on desktop and mobile devices14
App analytics collection14
Unlock your plugins through online registration14

Guides 15 to 18 are written for this repository and have no juce.com original. The companion apps are examples/Box2DMusic (guide 15) and examples/Box2DAudioV3 (guides 16 and 17). Guide 18 reuses the GraphicsDemo app from guide 02.

Notes on the examples ​

  • Code blocks are illustrative. They are written against this repository's JUCE version, but they are excerpts, so add the includes, JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR, and remaining pure-virtual overrides that your own classes need. Complete, buildable programs live in examples and examples/CMake.
  • Real-time code (audio callbacks, MIDI callbacks, render() in OpenGL) runs off the message thread. Each guide flags the thread rules that apply.
  • Using JUCE requires compliance with its licence: see LICENSE.md. A commercial JUCE licence may be required for closed-source products.

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