VST 3 is an audio plugin interface which is developed by Steinberg and supported by a large number of host applications and plugins. The VST 3 API comprises a set of C++ header files which contain definitions for structs, constants, and abstract base classes (used in a similar way to COM ). I maintain a set of Rust bindings for VST 3 which are automatically generated from the original C++ headers…
Last year, I published a Rust library called basedrop , which implements a memory reclamation system tailored to the constraints of real-time audio scenarios. The purpose of basedrop is to make it easy to share dynamically allocated memory with a real-time audio thread while ensuring that no allocations or deallocations happen on that thread. This is accomplished by providing a set of smart…
In real-time audio, deadlines are critical. Your code has on the order of several milliseconds to fill a buffer with samples to be shipped off to the DAC , milliseconds which it may be sharing with a number of other audio plugins. If your code takes too long to produce those samples, there are no second chances; they simply won't get played, and the user will hear an objectionable glitch or…
Complex numbers have a representation as 2 × 2 matrices, which can serve to illuminate some initially non-obvious aspects of how they work. A real number a can be represented as a multiple of the identity matrix: a I = [ a 0 0 a ] with addition and multiplication given by the corresponding matrix operations. In order to extend this representation to the complex numbers, we need a matrix J such…