#MadeWithSlint

Aava Convolution Plugin

Aava is a groundbreaking convolution plugin that allows you to adjust all IR parameters in real-time, even at audio rates. We asked Aava creator, Jussi Viiri, to share his thoughts on the Aava Convolution Plugin and his technical journey in bringing it to life. We're proud to announce that Aava is #MadeWithSlint

Interview with Jussi Viiri

Background

  • A convolution plugin is an audio effect that uses convolution to apply the sound characteristics of one audio signal onto another. It uses an impulse response (IR), which is a short recording of how a space or system responds to a sound, like a cathedral, speaker, or microphone. The plugin then convolves (mathematically combines) that IR with an input audio. The result is the audio sounding like it was played in that space or through that device.

What was the inspiration behind creating Aava?

How hard could it be?, that’s what I thought after playing with convolution several years ago and getting frustrated by how static convolution effects felt. After a lot of prototyping, I eventually found an academic paper describing a way to manipulate an impulse response in real time. Features like IR recording and the explore map felt like natural extensions of what this real-time manipulation would enable.

Why did you choose Rust for implementing Aava?

I actually started writing Aava in C++ but at some point grew frustrated with debugging multi-threading issues and writing C++ in general. I had already heard about this magical language that would make it all easier, so I decided that this would be a good opportunity to learn Rust. At that point I didn't know the state of audio and UI in Rust so in addition to learning Rust, I ended up writing a lot of code that I would have avoided if I had gone with JUCE for example, but I feel like the end result is worth it.

I'm much more confident with the stability and quality of the Rust codebase than I ever was with C++.

What led you to choose Slint?

I started writing Aava using Vizia which I really liked working with, but certain things made me feel like it wouldn't be production-ready by the time I needed it to be. Same with Egui and Iced that I evaluated, and none of the other UI frameworks were suitable to use with audio plugins, so Slint felt like the only sensible option at that point.

This decision was made a few years ago so things might have changed a lot since; I don't want to throw shade on any of the alternatives and I think it's great that there are options that have clearly different approaches, strengths and weaknesses.

Please share some of the challenges you faced.

Its the usual story with Rust: the borrow checker is a beginner's biggest enemy but now I feel like it's my greatest friend even though sometimes its limitations still require awkward workarounds. The state of audio and UI in Rust is still kinda work in progress although things have advanced a bunch during the time I've been working on Aava.

With Slint, the biggest hurdle is the native / DSL boundary. Slint requires things to be defined in the DSL to be exposed to native code, and audio plugins want things to be defined in native code to be exposed to the plugin framework and host. This results in a bunch of awkward boilerplate that I haven't found a good solution to yet. For complex UIs, Rust compile times can be rather long making iterations slower than ideal.

What is your wishlist of improvements in Rust and Slint?

For Rust, I would like the borrow checking situation to improve even further to reduce the need for workarounds. SIMD improvements would make writing optimized code more straightforward. For the Rust ecosystem, I would like interoperability between audio crates to improve; thankfully there have already been some steps towards that with the audioadapter crate etc.

For Slint, reducing compile times and improving the native / DSL boundary would help a lot. Other than that, some kind of support for custom shaders without completely custom OpenGL surfaces would be nice although I don't know what form it should take.

Why would you recommend Rust or Slint?

The biggest advantages with Rust are its memory and thread safety features; I've only had memory bugs in low level unsafe code I've written myself and there's very little of that in my project. With Rust I also feel like the compiler is guiding me towards writing better-quality code than I ever did with C++.

Slint is still the most mature UI crate that can be used with audio plugins, and the DSL is a joy to work with for the most part. Oh, and the development team is super friendly and responsive.

What are your future plans?

I'm still recovering from the launch that happened a week ago as of writing. I just released the first bug fix update and looking forward to starting work on new features and improvements. I'm also thinking of ways to spread the word, as people who have tried Aava seem to really like it but not many people yet know about it.

I have some ideas for future products but for now I'm concentrating on supporting and further developing Aava.

Contact Us

Need a UI for your next project? Get a FREE consultation.

Contact Us