This post is taken from the JUCE email newsletter.
To get these delivered to your email inbox, sign up here: Newsletter - JUCE
We are excited to announce that a JUCE 9 preview is available now on the juce9 branch of our public repository.
JUCE 9 focuses in on UI features and performance, embedded support and, as always, cross-platform compatibility.
Please take this opportunity to try JUCE 9 out and provide any feedback in this forum thread.
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 . This relocation allows juceaide (and therefore CMake) to run in headless environments such as embedded devices.
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 vectorised instructions when filling colours.
We saw some operations such as image fills and image drawing achieve multiplicative speedups (2-4x) on our systems. On resource constrained environments, such as Linux embedded devices, you may see a substantial drop in the overall CPU usage of your app.
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 the JUCE 9 preview.
Other JUCE 9 work is underway, most notably 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.
