Brickworks is a music DSP toolkit that supplies you with the fundamental building blocks for creating and enhancing audio engines on any platform.
It is the result of years of research, development, refinements, usage, and adaptation to different successful commercial projects. Indeed, our founder helps some of the top companies in the industry create award-winning products and is an active member of the global scientific community (check his personal website).
Brickworks distills much of such hard-earned experience into a reliable library of rock-solid and easy-to-use sound synthesis and effect algorithms.
Speed up development
Brickworks is designed first and foremost to speed up the most time-consuming parts of audio programming in order to save you and us time and money.
It essentially consists of a collection of fundamental sound synthesis and effect algorithms, namely:
Generators
Oscillators
- phase generator
- saw/pulse/triangle/sine oscillator waveshapers with antialiasing
Other
- white noise generator
- ADSR envelope generator
Effects
Distortion
- saturation / waveshaper
- distortion*
- overdrive*
- fuzz*
Dynamics
- compressor / limiter
- noise gate
Modulation
- chorus / vibrato / flanger
- tremolo
- phaser
- multiplier / ring modulator
Filter
- state variable filter
- lowpass, bandpass, highpass, allpass, low shelf, high shelf, peak, and notch filters
- multimode filters
- wah
Time-based
- interpolated delay line
- delay / comb filter
- reverb*
Degradation
- bit depth reducer
- sample rate reducer
Utilities
Math
- fast math routines
- pseudo-random number generators
Event processing
- note on/off event queue*
- voice allocator*
Mixing
- gain
- loudness meter (peak)
- panner
- stereo balance
- buffer utilities
Generic DSP
- one-pole filter
- slew-rate limiter
- integer-ratio resampler
- arbitrary-ratio resampler
- envelope follower
- pinking filter
* Not yet available, check the ChangeLog and roadmap.
Those modules typically comprise the cornerstone of a music DSP engine. Hence, programming audio engines will mostly reduce to defining modules, interconnections, and parameter mappings, leading to a workflow that resembles visual programming languages and modular synthesizers.
Furthremore, Brickworks is designed to maximize
- ease of use: its API is simple, minimal, and boringly consistent, so that there is very little to learn and you can get productive in no time; and
- ease of integation: it sticks religiously to KISS and non-opinionated design principles, so that it allows for interoperability and never gets in your way.
Use everywhere
Brickworks runs unmodified on all today's platforms, ranging from cheap MCUs to web pages. This includes custom embedded systems, mobile and desktop operating systems, as well as WebAssembly.
It is written in plain C and it is possible to easily make it work even without the C standard library. It only requires:
- definitions of
NULL
, INFINITY
, and (U)INT{8,16,32,64}_{MIN/MAX}
; size_t
and (u)int{8,16,32,64}_t
types;- IEEE 754 32-bit single-precision
float
type.
Optional C++ wrappers will also be provided for your convenience.
Use anytime
Want to use Brickworks for a free software/open source project? That's awesome! You can just apply the terms of the GPL v3 license. If you want, feel free to let us know and maybe offer us a beer one day. ;-)
Want to release a proprietary product, instead? We've got you covered! We offer a commercial license that doesn't restrict usage with respect to time, projects, or developers involved. Check the details and pricing below.
Documentation
API documentation
Here you can access the full API documentation.
Examples
You can find a number of examples and the instructions to build and run them in the examples folder in the official code repository.
They work and have been tested on all supported platforms (VST3, WebAudio/WebAssembly, and Daisy Seed board, so far).
Example effects
- fx_ap1: 1st-order allpass filter, mono in, mono out, input parameter: cutoff frequency;
- fx_ap2: 2nd-order allpass filter, mono in, mono out, input parameters: cutoff frequency, Q factor;
- fx_balance: stereo balance, stereo in, stereo out, input parameter: balance, output parameters: left- and right-channel levels;
- fx_bitcrush: bitcrusher, mono in, mono out, input parameters: sample rate ratio, bit depth;
- fx_chorus: chorus, mono in, mono out, input parameters: rate, amount;
- fx_comb: comb filter, mono in, mono out, input parameters: feedforward and feedback delay times, blend, feedforward and feedback coefficients;
- fx_comp: compressor/limiter, mono in, mono out, input parameters: threshold, ratio, attack and release times, makeup gain;
- fx_delay: interpolated delay line, mono in, mono out, input parameter: delay time;
- fx_eq_3band: 3-band parametric equalizer, mono in, mono out, input parameters: low shelf/peak/high shelf cutoff frequencies and Q factors, low shelf DC gain, high shelf high frequency gain, peak bandwidth;
- fx_flanger: flanger, mono in, mono out, input parameters: rate, depth;
- fx_hp1: 1st-order (6 dB/oct) highpass filter, mono in, mono out, input parameter: cutoff frequency;
- fx_hs1: 1st-order (6 dB/oct) high shelf filter, mono in, mono out, input parameters: cutoff frequency, high frequency gain;
- fx_ls1: 1st-order (6 dB/oct) low shelf filter, mono in, mono out, input parameters: cutoff frequency, DC gain;
- fx_mm1: 1st-order multimode filter (lowpass based), mono in, mono out, input parameters: cutoff frequency, input and lowpass coefficients;
- fx_mm2: 2nd-order multimode filter (state variable filter based), mono in, mono out, input parameters: cutoff frequency, Q factor, input/lowpass/bandpass/highpass coefficients;
- fx_noise_gate: noise gate, mono in, mono out, input parameters: threshold, attenuation, attack and release times;
- fx_notch: 2nd-order notch filter, mono in, mono out, input parameters: cutoff frequency, Q factor;
- fx_pan: stereo panner, mono in, stereo out, input parameter: pan, output parameters: left- and right-channel levels;
- fx_phaser: phaser, mono in, mono out, input parameters: modulation rate, center frequency, modulation amount;
- fx_satur: saturation, mono in, mono out, input parameters: bias, gain;
- fx_svf: 2nd-order state variable filter, mono in, mono out, input parameters: cutoff frequency, Q factor;
- fx_trem: tremolo, mono in, mono out, input parameters: rate, amount;
- fx_vibrato: vibrato, mono in, mono out, input parameters: rate, depth;
- fx_wah: wah, mono in, mono out, input parameter: wah.
Example synthesizers
- synth_mono: full monophonic subtractive synthesizer featuring:
- 3 VCOs (saw, square, triangle) with pulse width/slope control, exponential frequency modulation (sources: noise, VCO3), portamento, and master tune control;
- white/pink noise generator;
- mixer;
- 12 dB/oct lowpass VCF with keyboard tracking and cutoff modulation by specific ADSR envelope and external modulation (sources: noise, VCO3);
- VCA controlled by ADSR envelope;
- A440 output tone;
- Output level monitor;
- synth_simple: simple monophonic subtractive synthesizer featuring:
- VCO (square) with pulse width, portamento, and master tune controls;
- 12 dB/oct lowpass VCF;
- VCA controlled by ADSR envelope;
- Output level monitor;
Tutorials
Tutorials will be available as soon as they are written.
ChangeLog and roadmap
- Version 0.1.0 (15th November 2022):
- First public alpha release.
- All generators.
- State variable filter.
- Volume control.
- Fast math routines and pseudo-random number generator.
- One-pole filter, slew-rate limiter, and envelope follower.
- API documentation.
- Effect and synth sample code in VST3 and WebAudio/WebAssembly formats.
- Version 0.2.0 (4th December 2022):
- Refactored API for better flexibility and performance.
- Wah, saturation, and pinking filter.
- New example monophonic synth and two new example effects in VST3 and WebAudio/WebAssembly formats.
- Added more fast math routines.
- Bug fixes, improvements, and polish.
- Version 0.3.0 (23rd February 2023):
- Dynamics, degradation, filter (except comb), and mixing modules.
- Support for the Daisy Seed board.
- A lot of new examples.
- Added more fast math routines.
- Bug fixes, improvements, and polish.
- Version 0.4.0 (19th April 2023):
- Modulation, delay (except reverb), and resampling modules.
- Support for MIDI over UART on the Daisy Seed board.
- More new examples.
- Added more fast math and buffer utility routines.
- Bug fixes, improvements, and polish.
- ...
- Version 1.0.0 (expected by end of Q2 2023):
- First stable release.
- All modules.
- C++ wrappers.
- Debugging utilities.
- Effect and synth sample code in VST3 and WebAudio/WebAssembly formats, as well as Android and iOS apps, and for the Daisy Seed board.
- Full API documentation, tutorials, and extras.
You can follow the development on our community channels.
Support
Our primary mission is assisting customers in creating and improving their own products.
We would be more than happy to help you, whether it is about a simple doubt clarification all the way up to designing and implementing new custom audio engines from scratch.
For any inquiry, please do not hesistate and …
Contact us
License and pricing
Brickworks is free and open source software released under the GPL v3 license. In a nutshell, you can use, modify, and redistribute it without asking for our permission as long as the same license conditions apply. Usage is permitted in any software that is itself released under a GPL-compatible license.
If you want to use it in a proprietary product instead, we can offer you a perpertual license with no restrictions with respect to the number of developers involved and the number of products you may use it for, and with multiple confidentiality options. You can check the full text of the license for details.
When the first stable version (version 1.0.0) will be released, the price of a commercial license will be 3,000 €, and it will cover all subsequent updates in the 1.x series.
In order to support our development effort, right now we offer a license that allows you to use both versions 0.x and 1.x as soon as they are relased for 2,000 € (this price will increase as we get closer to 1.0.0).
Want to buy a license or request further information? Please …
Contact us
Legal
VST is a registered trademark of Steinberg Media Technologies GmbH.
All trademarks and registered marks are properties of their respective owners. All company, product, and service names used in this page are for identification purposes only. Use of these names, trademarks, and brands does not imply endorsement.