Audio Modeling aims to create a complete ecosystem of virtual instruments and audio software for live and studio musicians, music producers, and composers.
But developing simultaneously software, especially different plug-in formats (VST, VST3, AAX, AU, Standalone instruments) compatible on most platforms (Windows, macOS, iOS) comes with its fair share of challenges:
- Each platform and plug-in format has its set of specifications that needs to be carefully taken into consideration during the development process.
- The difficulty in keeping a fast release pace for the resolution of bugs and the development of new and improved versions of our existing products while operating with a small team of developers.
- Finding enough time and energy to allocate to staying in touch with the community so we can constantly be aware of new needs emerging for musicians, composers, and producers in the music industry.
JUCE is a development framework specialized in enabling developers to create a variety of cross-platform audio applications, from DAWs to plug-ins.
Projucer is the programming environment that makes working with JUCE intuitive and easy. It provides everything developers need, from a code editor to a GUI interface for setting up environment variables as well as platform-specific settings necessary for building cross-platform audio applications from a single codebase.
Continuous Integration (CI), as used by Audio Modeling, is a software development methodology that consists of triggering the automation of builds through the use of version control within our development team.
Every time one of our developers commits their code to a dedicated repository through version control, a series of automated scripts are triggered which first creates a new and clean virtual container and then proceeds in compiling the code and building the application.
If the latest committed code breaks the build in any way, it is reported by the system. This ensures that bugs and errors are detected quickly, and makes the process of identifying the source of the issue much more efficient.
For Audio Modeling, adopting a CI methodology is a huge time saver because of how fast it allows us to narrow down issues and fix them. Since we operate with a small team, identifying bugs and errors quickly is crucial to keeping a relatively fast development pace.
CI methodologies originate from web development and are normally used as a way to automate testing. But in our case at Audio Modeling, our reasons to apply CI are quite different. We use it primarily for automating the building process simultaneously for different platforms and to detect problems quickly as the development process of a product unfolds.
But since this application of CI is not necessarily a traditional one, it introduced an issue that required special attention.
Here’s a step-by-step overview of our development process:
- Our developers work on a single codebase maintained on a dedicated repository located on our own GitLab server. Maintaining a single codebase is possible, as we saw, thanks to JUCE and Projucer.
- Once a team member is ready to commit changes, they push their new code to the main repository using Git, a version control tool.
- The commit triggers Azure pipelines (there are various pipelines created for Audio Modeling’s various products and builds) and the process of creating a new virtual container in which the software is automatically built begins.
- The automatic build completes and any errors found by the system are reported. This process includes the generation of the installer and the Apple notarization for macOS products.
- For iOS apps, the new build is then pushed to Apple’s platform AppStore Connect and awaits approval.
- Desktop builds are also occasionally pushed to a special DropBox location where Beta testers have access to them and can start the testing process. iOS Apps are available for testing through TestFlight.
Audio Modeling’s Continuous Integration System Schema
For this system to work, every step of the build needs to happen directly on the server through command line scripts and applications. The problem we faced was that one plug-in format required the use of a GUI-based application.
AAX (AVID Audio Extension) is a plug-in format developed by the company AVID specifically for plug-ins used by one of their flagship products, Pro Tools. AAX plug-ins require a signature by an application called wraptool which is developed by PACE. The purpose of this signature is to provide AAX plug-ins with cryptographically secure proof that it was produced by Audio Modeling (or any other software company using it) and is unmodified since its signing.
Normally, digital signing can be done in 2 ways:
- With a physical iLok USB key
- With iLok Cloud, a feature permitting users to store licenses in the cloud and manage them through a GUI interface over the internet
PACE didn’t provide a tool that could be used on a server from the command line, making the signature process for AAX plug-ins impossible to automate.
In August 2020, a conversation started between the Audio Modeling team and the developers at PACE. They took the time to listen to us and understand the problem we faced in our development process.
PACE acquired JUCE in April 2020. The fact that the same team was now in charge of developing both applications crucial to Audio Modeling’s plug-in development made the communication easy and straightforward. A few months later, and after a thorough evaluation of the problem, the team at PACE came up with the perfect solution.
They created a command line utility that allows us to start an iLok Cloud session, bypassing the need for using their GUI-based application. Thanks to this tailored-made solution, we are now able to automate the build of AAX plug-ins and integrate the signing process inside Audio Modeling’s Continuous Integration system.
This is proof that PACE is indeed a company that is developer-centric. Their recent acquisition of JUCE, an essential tool for audio software development, promises a bright future for the audio software industry. The fact they were able to come up with a flexible solution in such a short period of time is proof of the company’s motivation to constantly improve their products and listen to the needs of not only the developers in their community but also the companies using their products.
We are grateful and proud to count them as our partners and we are looking forward to contributing together future innovations to the world of audio software.