JUCE 9

JUCE 9 focuses on UI features and performance, support for embedded Linux platforms and, as always, cross-platform compatibility.

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.

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.

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.

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.

Minimum Requirements

For Developers (Compiling)
C++ Standard: 17
MacOS/iOS: Xcode 12.4 (Intel macOS 10.15.4, Apple Silicon macOS 11.0)
Windows: Visual Studio 2019 (Windows 10 version 1607)
Linux: g++ 7.0 or Clang 6.0 (for a full list of dependencies, see here).
Android: Android Studio (NDK 26) on Windows, macOS or Linux
For End Users (Deployment Targets)
macOS: macOS 10.11 (x86_64, Arm64)
Windows: Windows 10 version 1607 (x86_64, x86, Arm64, Arm64EC)
Linux: Mainstream Linux distributions (x86_64, Arm64/aarch64)
iOS: iOS 12
Android: Android 7 - Nougat (API Level 24)
JUCE Logo
© Raw Material Software Limited