Reactive Embedded Programming - Tom Waldron - ADC 2023
An alternative approach to embedded programming suited to real-time and audio systems whereby the usual background polling is replaced with an entirely reactive structure.
How can we leverage a microcontroller's hardware for predictable scheduling? What would it look like to turn convention on its head and run our entire application in interrupts?
Link to Slides: https://baremetaldev.github.io/reactive-embedded-programming/
_
Tom Waldron
_
Streamed & Edited by Digital Medium Ltd: https://online.digital-medium.co.uk
_
Organized and produced by JUCE: https://juce.com/
_
Special thanks to the ADC23 Team:
Sophie Carus
Derek Heimlich
Andrew Kirk
Bobby Lombardi
Tom Poole
Ralph Richbourg
Jim Roper
Jonathan Roper
Prashant Mishra
Building a High Performance Audio Application With a Web GUI and C++ Audio Engine - Colin Sullivan & Kevin Dixon - ADC23
The era of using web UIs for audio applications is just beginning. How might we build a high performance audio application on the foundations of the JUCE web component ? How might we overcome some limitations of the JUCE web component, such as passing chunks of binary data to the GUI? How might we deal with the complexities of this dual-sided system written in two different languages? We have developed a solution for a high-performance application architecture including a C++ audio engine and a web GUI.
Both the C++ audio engine and web UI implement their own unidirectional data flow, and combine to form an application wide unidirectional data flow, allowing the GUI to send actions into the C++ application to initiate state changes. We will discuss tooling developed for sharing data types between the two languages without error-prone manual maintenance, as well as the communication protocol itself and how we overcame limitations by intercepting HTTP requests from the webview in the C++ application.
We will discuss the performance considerations of integrating the unidirectional data flow architecture with a real-time audio engine and the high-performance architecture of the Web GUI itself.
Link to Slides: https://data.audio.dev/building-a-physical-experience-for-virtual-instruments/slides.pdf
_
Colin Sullivan
Colin Sullivan is a software developer building interactive systems with web technologies and C++. Colin has operated as a software engineer across product lifecycles from incubation & product prototyping to product release in multinational companies and startups. Colin has built interactive installations and performed improvisational electronic music using bespoke generative music software.
_
Kevin Dixon
I've been building consumer and professional music applications for both desktop and mobile platforms since 2008. Originally started work on a streaming video platform for public safety, I was immediately exposed to the issues of communicating between a high-performance C++ engine and with a garbage collected language (C#) for the GUI. After cutting my teeth on mobile development with the first Android G1 handset, I moved squarely into the audio industry. At Audyssey Labs, I was a founding member of their mobile team, and was responsible for integrating DSP technology into any OS or Firmware our client demanded, most notably the Android OS itself. I was a lead developer on a consumer hifi listening app for iOS and was awarded a patent (US9860641B2) for delivering audio output device specific audio processing from the cloud. From there, my mobile experience led me to Native Instruments, where I contributed heavily to both of Native Instruments mobile offerings, iMaschine and Traktor DJ, always with a focus on the audio engine and application architecture. Spending time in a product-focused environment taught me to be efficient with what makes it into the codebase, while still balancing overall quality (decisions in codebases always last longer than you think!). After brief, yet productive, stints with Fender and Dolby, I landed at Output and have been focusing on audio engine and application architecture for the past two years.
_
Streamed & Edited by Digital Medium Ltd: https://online.digital-medium.co.uk
_
Organized and produced by JUCE: https://juce.com/
_
Special thanks to the ADC23 Team:
Sophie Carus
Derek Heimlich
Andrew Kirk
Bobby Lombardi
Tom Poole
Ralph Richbourg
Jim Roper
Jonathan Roper
Prashant Mishra
Real-time Confessions in C++: The Most Common “Sins” in Real-Time Code - Fabian Renn-Giles - ADC 2023
This talk examines the most prevailing misconceptions and frequent errors encountered when audio developers handle real-time code in C++. With my background as a contractor in the audio industry, I’m often called in to help fix subtle bugs in, or review code with real-time constraints. Yet, I see (and have myself made) the same type of mistakes over and over again resulting from a few common misconceptions of real-time C++ code.This talk offers an in-depth analysis of each of these misconceptions, debunking them with compelling examples from the audio industry.
Ranging from the ignorance of C++'s data-safety rules altogether, to the overuse of std::atomic and misbeliefs about the forbidden usage of locks and exceptions in real-time code, this presentation navigates the landscape between the theoretical rules of the C++ standard and real-world practical realities. This talk is an essential guide for developers seeking to avoid common pitfalls and write more efficient, reliable real-time code.
_
Link to Slides: https://docs.google.com/presentation/d/1rJNebpRg3xJO4AiE5AntrkEKIXRta25DCOxHxDMzC0c
_
Fabian Renn-Giles
Fabian is a freelance C++ programmer, entrepreneur and consultant in the audio software industry. Before this, he was staff engineer at ROLI Ltd. and the lead maintainer/developer of the JUCE C++ framework (www.juce.com) - an audio framework used by thousands of commercial audio software companies. Before joining ROLI, he completed his PhD at Imperial College London, developing a numerical quantum optics solver with modern digital signal processing techniques and C++/MPI/OpenCL. Fabian is now a regular consultant specializing on low-level real-time C++, embedded audio, time sensitive networks, audio over WiFi and audio plug-in formats. His clients range from early startups to FAANG companies. Additionally, he is a regular speaker at the audio developer conference ADC and other C++ conferences.
_
Streamed & Edited by Digital Medium Ltd: https://online.digital-medium.co.uk
_
Organized and produced by JUCE: https://juce.com/
_
Special thanks to the ADC23 Team:
Sophie Carus
Derek Heimlich
Andrew Kirk
Bobby Lombardi
Tom Poole
Ralph Richbourg
Jim Roper
Jonathan Roper
Prashant Mishra
RADSan: A Realtime-Safety Sanitizer - David Trevelyan & Ali Barker - ADC23
"ERROR: RealtimeSanitizer: call to malloc detected during execution of realtime function SketchyAlgorithm::process!"
We present RADSan, a realtime-safety sanitizer integrated into the LLVM project. Activated with a single argument to clang, RADSan allows developers to mark any function with a [[realtime]] attribute. At run time, realtime functions will error if RADSan detects activity that it knows is not realtime-safe.
Our talk will include:
• an introduction to sanitizers; what they do and how they work,
• an exploration of the realtime-safety testing problem space; what is (and what isn't) possible, and how this influenced RADSan's design,
• a deep-dive into the components of RADSan and how they work together
• a demonstration of how to use RADSan to mark functions as realtime and test a system's realtime safety
• an open discussion on how to best share this idea with the wider community
_
David Trevelyan
_
Ali Barker
_
Streamed & Edited by Digital Medium Ltd: https://online.digital-medium.co.uk
_
Organized and produced by JUCE: https://juce.com/
_
Special thanks to the ADC23 Team:
Sophie Carus
Derek Heimlich
Andrew Kirk
Bobby Lombardi
Tom Poole
Ralph Richbourg
Jim Roper
Jonathan Roper
Prashant Mishra
The Road to a WebAudio IDE: Using the Latest Web Technologies to Rapidly Assemble Cross-Platform Audio Pipelines - Thomas Dodds - ADC 2023
Audio software has changed. We’re no longer limited by purely native runtimes for high performance production grade audio, so how should we respond? Quickly!
The Switchboard WebAudio IDE platform irons out much of the repetitive and often tricky labor involved in prototyping complex audio pipelines. We provide a free to use development tool to build precise and scalable audio pipelines during an application development lifecycle from concept and prototyping to production grade code.
Simplify your design and development of audio engines by combining various DSP components and external audio related services brick by brick, without the need to write any code. Swap out components in seconds while listening to changes right inside the browser. When you’re ready to integrate, take the JSON graph created and load it into any C++ or web platform with our Switchboard SDK.
_
Thomas Dodds
Thomas is a seasoned audio engineer and software developer with a focus on building audio engines for web platforms. With over a decade in the industry, he’s been the driving force behind Synervoz’s Web Audio, WASM and web browser based projects. Beyond his technical skills, Thomas has a knack for making complex audio technology not just functional but user-friendly and visually appealing.
_
Streamed & Edited by Digital Medium Ltd: https://online.digital-medium.co.uk
_
Organized and produced by JUCE: https://juce.com/
_
Special thanks to the ADC23 Team:
Sophie Carus
Derek Heimlich
Andrew Kirk
Bobby Lombardi
Tom Poole
Ralph Richbourg
Jim Roper
Jonathan Roper
Prashant Mishra
Join Us For ADC23 - London - 13-15 November 2023
More Info: https://audio.dev/
@audiodevcon
Using Faust in JUCE Projects - Julius Smith - ADCx SF
Faust (Functional AUdio STream) is a domain-specific functional programming language for sound synthesis and audio processing (https://faustdoc.grame.fr). Faust development is routinely an order of magnitude faster to write and debug than C++, and the run-time performance is usually within a factor of two. Development is further facilitated by the large Faust Libraries collection of signal-processing functions (https://faustlibraries.grame.fr). Since Faust compiles to C++, it is natural to integrate C++ header files generated by the Faust compiler into a JUCE project or the like. A limitation encountered is that Faust's powerful pattern-matching facility requires its "macro arguments" to be bound at compile time, i.e., not signals or controller parameters. An example is the filter order in Faust's filter-design functions. When these arguments need to change at run time, it can make more sense to translate Faust to C++, so that the recursive pattern-matching in Faust is replaced by recursive C++ functions. Experience using ChatGPT-3.5 and ChatGPT-4 for this purpose and others will be summarized.
_
Julius Smith
Professor Emeritus of Music and by courtesy Electrical Engineering, Stanford University, based at the Center for Computer Research in Music and Acoustics (CCRMA). Activities include teaching courses in signal processing and music technology, graduate student advising, and research in signal processing applied to music and audio. https://ccrma.stanford.edu/~jos/
Edited by Digital Medium Ltd - online.digital-medium.co.uk
_
Organized and produced by JUCE: https://juce.com/
_
Special thanks to the ADC Team:
Sophie Carus
Derek Heimlich
Andrew Kirk
Bobby Lombardi
Tom Poole
Ralph Richbourg
Jim Roper
Jonathan Roper