This post is taken from the JUCE email newsletter.
To get these delivered to your email inbox, sign up here: Newsletter - JUCE
Hi JUCE community,
We are delighted to announce the release of JUCE 9.
JUCE 9 focuses on UI features and performance, embedded support and, as always, cross-platform compatibility.
Pricing and licensing terms have been kept identical to JUCE 8, and all JUCE 8 subscriptions have been automatically upgraded to JUCE 9.
Improved SVG Parsing and Rendering
JUCE 9 now pulls in lunasvg as a dependency, bringing new features and improved SVG spec conformance.
More complex SVGs are now possible, including those that take advantage of radial gradients, blend modes, dashed strokes, stroked text, texture fills, miter limiting, clip paths and referenced elements.
SVGs are parsed into a tree of Drawable objects, which have been stripped of the Component base and moved into juce_graphics, streamlining JUCE compilation.
As a part of development, we built a custom app to test 70 specific features and regressions — including bugs you reported on the forum!
Variable Font Support
Modern fonts, especially those designed for the web, are frequently distributed as variable fonts.
Unlike traditional fonts, variable fonts bundle multiple styles (such as bold, italic, and condensed) into a single streamlined file.
Variable fonts allow font “axes” like weight, width, and slant to be set to custom values, giving designers full dynamic control over the appearance of the face.
For an example of JUCE 9’s new typographic capabilities, check out the FontVariablesDemo.
Improved macOS CoreAudio Support
The Core Audio implementation on macOS has been redesigned to use Apple’s aggregate device API, improving performance and reliability with aggregate devices.
JUCE 9 creates a private aggregate device that combines the selected physical devices into a single logical device presented to the framework. End users on aggregate devices get lower latency and more reliable drift-compensation than previous JUCE versions. We saw latency decreases of up to 11-25ms in our development, you can check out your hardware via JUCE’s AudioLatencyDemo (and let us know!)
Buffer size and latency reporting is also more accurate, helping to reduce unexpected behaviour and configuration mismatches for end users. In addition, channel naming has been improved when using aggregate devices: names now include the originating physical sub-device for greater clarity.
Software Renderer Improvements
JUCE 9 brings improvements to the software renderer, refactoring the internal structure of the PixelARGB class to better use auto-vectorised instructions when filling colours.
OpenGL ES Renderering on Linux
Embedded Linux devices typically use OpenGL ES rather than desktop OpenGL, and JUCE 9 now provides an automatic mechanism for selecting OpenGL ES on these platforms.
Easier Compilation for Embedded Linux
In addition to adding support for OpenGL ES the new SVG work has allowed us to remove dependencies from juceaide, JUCE’s CMake helper executable. This has both lowered CMake configuration time and made it trivial to run builds in headless environments without UI operating system components present.
Improved Multitouch and Gesture Support
JUCE 9 now supports XInput multitouch on Linux, so any devices running embedded Linux can make use of multi-touch enabled displays.
JUCE 9 Windows applications and plugins now receive and process gestures from touch screens and touch pads by default. The old mode (where multiple touch points are reported) can be explicitly requested via the TopLevelWindow and AudioProcessorEditor classes.
JUCE 9 Work In Progress
All of the work described above is available today, in JUCE 9.
We are currently working on AudioProcessor v2, the foundation for sample-accurate automation, unique CLAP features, and MIDI messages in UMP format.
APv2 will change how parameters are owned (and therefore how application code is written). In APv2, parameters live on the derived type (by value) instead of on the AudioProcessor. The current plan: existing AudioProcessor code will continue to work through a compatibility layer and adopting the new features requires porting your processor to APv2.
This is a large body of work that will land across followup releases. The piece most likely to ship first is multiple AudioProcessors in a single binary, useful for a synth and effects rack that share DSP, or for a “loader” binary that presents itself as several distinct products to the host.



