Audio fingerprint discrimination and resynthesis via Haar wavelets.


gcc, make, libsndfile, libgsl

for disco/designer native version: libsdl2, opengl

for disco/designer web version: emscripten


make                  # native versions
make disco-designer   # native version
make designer.html    # web version


Timbre stamp white noise with energy per octave of a control input:

./timbre-stamp input.wav output.wav

Compute energy per octave (audio) per octave (rhythm) fingerprint:

./rhythm-analysis input.wav output.dat

Resynthesize from fingerprint by stamping on white noise:

./rhythm-synthesis input.dat output.wav

Compute energy per octave (audio) Markov chain via self-organizing map:

./markov-analysis input.wav output.dat

Resynthesize from Markov chain by stamping on white noise:

./markov-synthesis input.dat output.wav

Normalize an audio file to peak value 1.0:

./normalize input.wav output.wav

Run disco/designer interactive demo native version:


Run disco/designer interactive demo web version:

python -m SimpleHTTPServer 8080 &   # wasm needs http(s) server
sensible-browser http://localhost:8080/index.html


Uses large stack-allocated arrays: if it crashes, try running this first:

ulimit -s unlimited

Copyright (C) 2019 Claude Heiland-Allen mailto:claude@mathr.co.uk

Copyleft: This is a free work, you can copy, distribute, and modify it under the terms of the Free Art License http://artlibre.org/licence/lal/en/