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
| # | Guide | You will learn | Level |
|---|---|---|---|
| 01 | Getting started | Project types, CMake and Projucer, the application class, windows, the main component | Beginner |
| 02 | Graphics, layout, and animation | Graphics, nested components, Rectangle, FlexBox, Grid, colours, look and feel, animation | Beginner |
| 03 | Built-in widgets | Label, Slider, ComboBox, buttons, TableListBox | Beginner |
| 04 | Listeners, ValueTree, and undo | Broadcasting changes, data models, serialisation, UndoManager | Beginner to intermediate |
| 05 | Audio input, output, files, and waveforms | AudioAppComponent, devices, input processing, file playback, looping, thumbnails | Intermediate |
| 06 | Synthesis | Noise, sine, levels and decibels, Synthesiser, wavetables | Intermediate |
| 07 | MIDI and MPE | MidiMessage, MidiBuffer, MIDI input, MPE zones and synthesis | Intermediate |
| 08 | Audio plug-in basics | Processor and editor, MIDI plug-ins, bus layouts, packaging | Beginner to intermediate |
| 09 | Plug-in parameters and state | Parameters, AudioProcessorValueTreeState, attachments, saving state | Intermediate |
| 10 | Cascading effects with AudioProcessorGraph | Node graphs, dynamic effect chains, hosting processors | Advanced |
| 11 | DSP | Processor chains, filters, waveshaping, convolution, delay lines, FFT, SIMD | Intermediate to advanced |
| 12 | Core utilities | Random, BigInteger, File and streams, OSC | Beginner to intermediate |
| 13 | Rendering with OpenGL | OpenGLAppComponent, shaders, matrices | Advanced |
| 14 | Mobile and app services | Android setup and screen sizes, purchases, notifications, analytics, licensing | Intermediate to advanced |
| 15 | Physics as a musical instrument | juce_box2d, contact listeners, thread-safe hand-off to the audio thread, mapping collisions to notes | Intermediate to advanced |
| 16 | Integrating Box2D v3 | FetchContent, ids instead of pointers, hit and sensor events, threading | Advanced |
| 17 | A physical audio engine | Modal synthesis, contact-driven excitation, rolling noise, voice management, lock-free hand-off | Advanced |
| 18 | Profiling on macOS with dSYM files | CMake 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 Projucer | 01 |
| Projucer Part 2, manage your Projucer projects | 01 |
| Projucer Part 3, choosing the right Projucer template | 01 |
| The main component | 01 |
| The application window | 01 |
| The Graphics class | 02 |
| Parent and child components | 02 |
| The Point, Line, and Rectangle classes | 02 |
| Advanced GUI layout techniques | 02 |
| Responsive GUI layouts using FlexBox and Grid | 02 |
| Colours in JUCE | 02 |
| Customise the look and feel of your app | 02 |
| Animating geometry | 02 |
| The Label class | 03 |
| The Slider class | 03 |
| The ComboBox class | 03 |
| Radio buttons and checkboxes | 03 |
| The TableListBox class | 03 |
| Listeners and Broadcasters | 04 |
| The ValueTree class | 04 |
| Using an UndoManager with a ValueTree | 04 |
| The AudioDeviceManager class | 05 |
| Processing audio input | 05 |
| Build an audio player | 05 |
| Looping audio using the AudioSampleBuffer class | 05 |
| Looping audio using the AudioSampleBuffer class (advanced) | 05 |
| Draw audio waveforms | 05 |
| Build a white noise generator | 06 |
| Build a sine wave synthesiser | 06 |
| Control audio levels | 06 |
| Control audio levels using decibels | 06 |
| Build a MIDI synthesiser | 06 |
| Wavetable synthesis | 06 |
| Create MIDI data | 07 |
| Handling MIDI events | 07 |
| Build a multi-polyphonic synthesiser | 07 |
| Understanding MPE zones | 07 |
| Create a basic Audio/MIDI plugin, Part 1 | 08 |
| Create a basic Audio/MIDI plugin, Part 2 | 08 |
| Plugin examples | 08 |
| Configuring the right bus layouts for your plugins | 08 |
| Package your app or plugin for distribution | 08 |
| Adding plug-in parameters | 09 |
| Saving and loading your plug-in state | 09 |
| Cascading plug-in effects | 10 |
| Introduction to DSP | 11 |
| Add distortion through waveshaping and convolution | 11 |
| Create a string model with delay lines | 11 |
| The fast Fourier transform | 11 |
| Visualise the frequencies of a signal in real time | 11 |
| Optimisation using the SIMDRegister class | 11 |
| The Random class | 12 |
| The BigInteger class | 12 |
| File reading | 12 |
| Implement the OSC protocol in your app | 12 |
| Build an OpenGL application | 13 |
| Getting started with Android | 14 |
| Managing Android screen sizes | 14 |
| In-App Purchases on desktop and mobile devices | 14 |
| Push Notifications on desktop and mobile devices | 14 |
| App analytics collection | 14 |
| Unlock your plugins through online registration | 14 |
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 inexamplesandexamples/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.