A Rust implementation of the Freeverb algorithm
Switch branches/tags
Nothing to show
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
app_gtk Initial commit Nov 21, 2018
app_juce Initial commit Nov 21, 2018
audio_module Initial commit Nov 21, 2018
clib Remove accidentally checked in compiled library Nov 22, 2018
freeverb Initial commit Nov 21, 2018
freeverb_module Initial commit Nov 21, 2018
wasm Initial commit Nov 21, 2018
.gitignore Initial commit Nov 21, 2018
Cargo.lock Initial commit Nov 21, 2018
Cargo.toml Initial commit Nov 21, 2018
LICENSE Initial commit Nov 21, 2018
README.md Initial commit Nov 21, 2018

README.md

freeverb-rs

A Rust implementation of the Freeverb algorithm.

About Freeverb

Freeverb was originally written in C++ by "Jezar at Dreampoint", and was released into the public domain in June 2000. It is now widely used in various incarnations in multiple software packages.

About freeverb-rs

This implementation of Freeverb in Rust is an almost direct conversion of the original source, created as a demonstration project for a talk I gave about Rust at the Audio Developer Conference 2018.

There are a couple of (intentional) differences to the original implementation:

  • delay line buffers are dynamically allocated for simplicity. This may have a performance impact, and once generic constants are available I would like to make the buffer static.
  • 64 bit processing is used internally whereas the original is 32 bit. I might make the sample type configurable at some point, but for now 64 bit processing seemed like a sensible default.

Folder structure

freeverb/

This contains the core implementation of Freeverb, with a simple interface.

app_gtk

A very basic audio+GUI application that runs the freeverb::Freeverb processor.

You will need portaudio and gtk installed on your system for this to work.

audio_module

This contains a (very) experimental generic module+parameter library, which I really only added as an excuse to explore approaches to polymorphism. The audio_module approach is currently only used by app_gtk, it might go away in the future, or maybe I'll decide I like it and continue to work on it. At this point I don't know!

freeverb_module

The freeverb processor wrapped up as an AudioModule, currently only used by app_gtk.

app_juce

A very basic JUCE application that runs the freeverb::Freeverb processor via a statically linked library.

clib

A static library that provides C bindings to the freeverb::Freeverb processor, used by app_juce.

wasm

A library that provides a wasm-bindgen interface to the freeverb::Freeverb processor.

Also in the folder is a small web application that runs the wasm processor.