Tools

I develop and contribute to software tools and libraries supporting research, development, and experimentation in digital audio.

Some of these tools are production-ready and licensed for industrial use; others are experimental or for internal use only. Many are released under open-source licenses.

DSP

Brickworks and Brickworks Pro

Brickworks logo

Brickworks is a foundational audio DSP toolkit providing over 50 core algorithms for building audio engines across platforms. It is suitable for equalizers, compressors, multi-effects, and synthesizers, and is available under GPLv3 or a proprietary license.

Brickworks Pro is an expanding collection of advanced DSP algorithms designed for high-end and demanding applications, offering improved sound quality and control in critical parts of an audio engine. Algorithms are licensed individually under a liberal proprietary license.

Ciaramella

Ciaramella logo

Ciaramella is an experimental, minimalistic, declarative, modular language for audio DSP based on the synchronous data flow computational model. It is particularly well-suited for implementing highly-coupled DSP algorithms such as wave digital filters and state-space systems.

Its compiler, implemented in JavaScript and released under an ISC-style license, translates Ciaramella programs to C/C++, JavaScript, and MATLAB.

It was developed by Paolo Marrone as part of his joint industrial-academic doctoral studies while at my company, Orastron, in collaboration with the Università degli Studi di Udine, under the supervision of Prof. Federico Fontana and myself.

Related papers

netmix

netmix is a semi-automatic circuit modeling software based on an extended SPICE netlist syntax, a homegrown symbolic computation library, and Ciaramella for DSP implementation and output code generation.

It became essential for my consulting work and has never been publicly released, nor do I plan to release it anytime soon.

matchfreq

matchfreq is a tool for approximating arbitrary continuous-time magnitude responses using cascades of first- and second-order filters. It features numeric coefficient optimization and generation of C code implementing the approximated filter using Brickworks.

You can try it online. The input data format is simply a list of frequency (Hz) / magnitude (dB) numeric values separated by spaces, one per line.

Plugin and application development

Tibia

Tibia is a template-based generator of audio applications and plugins, producing complete projects from a small amount of JSON metadata and C code. It supports multiple targets, including VST3, LV2, mobile apps, WebAudio (via WebAssembly), embedded platforms such as Electrosmith's Daisy, and command-line interface. Despite being well-tested and used in products, it remains largely undocumented and subject to change.

It is currently available under the GPLv3. Further templates were developed that have not yet been publicly revealed.

PIPES

PIPES is an experimental and networked protocol for rapid development and deployment of audio applications. It allows you to code on one machine, compile on another, and deploy to one or more other nodes with hot-swapping.

A proof-of-concept implementation is available under the GPLv3.

Like Ciaramella, it was developed by Paolo Marrone as part of his doctoral studies, this time also with the support of Elk Audio and their CTO, Stefano Zambon, in particular.

Related papers

audioWidgets.js

audioWidgets.js is a minimal JavaScript library providing HTML5 Canvas-based GUI widgets for audio applications. It supports simultaneous mouse and multi-touch interaction, different and pluggable control mappings (e.g., radial or vertical, absolute or differential knob mapping), redefinition of widget functionality — including drawing — by monkey patching, and Web Components encapsulation.

It is released under an ISC-style license.

canvasPlot.js

canvasPlot.js is a minimal JavaScript library for 2D data plotting over HTML5 Canvas. It is designed for maximum extensibility and supports different axis scales (linear, logarithmic), manually- and automatically-defined grids, and data resampling, making it suitable for waveform and spectrum visualization.

It is released under an ISC-style license.

vinci

vinci is a tiny, unsupported, cross-platform windowing library, currently used to test GUI support in Tibia and released under the GPLv3 license.

Other development tools

During the years I have scratched my own itches, technology-wise, whenever it made sense (or so I thought). Some of the items I created that I always keep in my toolbox include:

  • vino — cross-platform plugin GUI library based on system web views and facilitating UI-DSP communication
  • erwin — plugin preset/state storage library using tarballs of multiple key-value pair dictionaries
  • dedukt — JavaScript library that extracts key-value pairs from plain text and source code, used for generating the official documentation of Brickworks algorithms

None of which has been publicly released.

Contact

For professional inquiries about using or licensing these tools, or for research and engineering collaborations, please get in touch by email at s@dangelo.audio.

For experimental feedback and informal discussion, the Telegram channel is the preferred place.