All Articles

Blog

Build this Awesome Sampler Plugin | Part 5: JUCE PNG Strips for Next-Level Plugin UIs

In Part 5 of our sampler series, we build real custom knobs from an image filmstrip and a JUCE LookAndFeel, then wire them to the Decay and Reverb controls.

Joshua Hodge

·

June 23, 2026

All Content

News

Build this Awesome Sampler Plugin | Part 5: JUCE PNG Strips for Next-Level Plugin UIs

In Part 5 of our sampler series, we build real custom knobs from an image filmstrip and a JUCE LookAndFeel, then wire them to the Decay and Reverb controls.

Joshua Hodge

·

June 23, 2026

All Tutorials
Tutorials

Build this Awesome Sampler Plugin | Part 5: JUCE PNG Strips for Next-Level Plugin UIs

SHARE THIS
Speakers
No items found.
SHARE THIS
Speakers
No items found.
All Meetups
Tutorials

Build this Awesome Sampler Plugin | Part 5: JUCE PNG Strips for Next-Level Plugin UIs

SHARE THIS
Speakers
No items found.
SHARE THIS
Speakers
No items found.

Custom knobs are one of the most-asked-about parts of building a plugin, and the secret is that you don't draw them at all. In Part 5 we build real custom knobs from an image filmstrip and a JUCE LookAndFeel, then wire them to the Decay and Reverb parameters of our sampler.

Follow along on GitHub:

https://github.com/TheAudioProgrammer/JuceSamplerAudioPlugin

Timestamps:

00:00 - Introduction: why pro knobs aren't "drawn"

01:41 - Prerequisites & the GitHub branch

01:55 - Adding the PNG strip (assets + CMake)

03:05 - Getting the knob from binary data

03:50 - How JUCE LookAndFeel works

04:35 - Building the KnobLookAndFeel class

07:02 - Moving the implementation into a .cpp

08:32 - Finding & overriding drawRotarySlider

11:26 - The frame-index math (value → frame)

15:10 - Drawing the frame (and the retina trick)

17:31 - Suppressing warnings with [[maybe_unused]]

18:06 - Why we build a reusable Knob component

19:14 - Creating the Knob class

23:00 - Implementing the constructor & styling

28:08 - Layout with resized()

29:01 - Wiring the Decay knob in the editor

31:44 - Adding the Reverb knob (the payoff)

32:55 - Recap & what's next

Audio Programming Basics
Graphics
JUCE
Music Tech

Joshua Hodge

The Audio Programmer

More Tutorials

View All

The Audio Programmer Virtual Meetup | June 11th, 2026 @ 18:30 UK

Test-maxing your audio DSP with HART

This is some text inside of a div block.

We Built a Multi-Player Audio App With AI: Intro to Audiotool Nexus

Nexus is Audiotool's new extension layer that lets a browser-based app read and write a live project in real time, something a traditional VST can't do. Silas Gyger, lead engineer at Audiotool, shows how far an AI agent can take you by building three working apps from scratch.

This is some text inside of a div block.

Vibe Coding an Audio Plugin with Cursor vs Claude Code

A practical first look at Cursor for AI-assisted audio plugin development, covering project setup, code review, debugging, and workflow comparisons with Claude.

This is some text inside of a div block.

Build this Awesome Sampler Plugin | Part 4: JUCE UI Basics

Learn how to build a custom JUCE plugin interface using images, fonts, colours, and reusable UI assets.

This is some text inside of a div block.
View All

More Meetups

View All

The Audio Programmer Virtual Meetup | June 11th, 2026 @ 18:30 UK

Test-maxing your audio DSP with HART

This is some text inside of a div block.

The Audio Programmer Virtual Meetup | April 9th, 2026 @ 17:00 UK

Jani Huoponen, Scott Kramer, and Claus Trelby explore Eclipsa Audio – Google and Samsung's open-source spatial audio format – and what it means for creators working across music, film, TV, and the open web.

This is some text inside of a div block.

The Audio Programmer Virtual Meetup | March 5th, 2025 @ 18:00 UK

Sam Fischmann introduces practical approaches to getting started with Digital Signal Processing, covering key DSP concepts and how they translate into useful tools for music production.

This is some text inside of a div block.

The Audio Programmer Virtual Meetup | February 10th, 2025 @ 17:30 UK

Eric Tarr introduces the Point-to-Point Library, a tool designed to help audio developers easily incorporate analog circuit modeling into their plugins.

This is some text inside of a div block.
View All

More News

View All

The Audio Programmer joins Audiotool's Let's Build! hackathon series

We're joining BBC R&D, the Fraunhofer Institute and Music Hackspace as collaborators in Audiotool's Let's Build! NEXUS Hackathon Series, a free global hackathon running through 6 July 2026.

This is some text inside of a div block.

API London

An evening focused around building the future of music and audio apps, plugins, and creative tools.

This is some text inside of a div block.

Steinberg VST3 & ASIO SDKs Go Open Source

Steinberg announce licensing changes that will have a huge impact for audio software developers.

This is some text inside of a div block.
View All

More Articles

View All

Is AI Killing Music Tech? How to Stay In Demand

AI is reshaping audio development faster than most teams can react. Here are three things that will keep you valuable as the tools get better, drawn from months of pushing them into real codebases.

This is some text inside of a div block.

From creation to curation: how to spot AI-generated CVs

Polished language is becoming cheap. Context is becoming expensive. Five patterns we keep seeing in AI-generated CVs, and what they mean for specialist hiring.

This is some text inside of a div block.

The audio industry is bigger than you think – and harder to hire into

Audio engineering has quietly fragmented across safety systems, embedded sensing, hearing tech and machine learning. The companies hiring in these fields are no longer just competing with other audio companies – and most of them don't realise it.

This is some text inside of a div block.

Why Use a Specialist Recruiter for Music Tech Hiring?

The Audio Programmer gives you access to pre-screened, specialist talent from within the audio development community, without the noise of a standard job board.

This is some text inside of a div block.
View All