Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Designing Sound — Interactive Faust WASM Demonstrations

38 interactive sound-design demonstrations based on the procedural audio techniques from Andy Farnell's Designing Sound (MIT Press, 2010). Every demo is a self-contained HTML page running Faust DSP compiled to WebAssembly — no server, no samples, no external dependencies. Pure procedural audio, in your browser.

Hub Page — Demo Index

The hub index — 38 demonstrations organized by section, each linking to a self-contained interactive page.

Live Demos

Part Section Demonstrations
I Theory & Synthesis Techniques Additive Synthesis, Wavetable Synthesis, Waveshaping, AM/FM Synthesis, Granular Synthesis
II Fundamental DSP Concepts Aliasing, Bitcrushing, Masking, Doppler Effect, Room Modes, Consonance
III Envelopes & Modulation ADSR Envelope, Pulse Code Modulation, Cascade PM
IV Artificial & Electronic Pedestrian Crossing, Telephone Ringing, DTMF Dial Tones, Alarm Bells
IV Objects & Materials Bouncing Ball, Rolling, Creaking Door, Toys, Utensils, Impacts, Breaking Glass, Scraping & Grinding
IV Nature Fire & Crackling, Water & Bubbles, Rain, Wind
IV Machines Motors, Cars, Fans, Jet Engine, Helicopter
IV Lifeforms & Mayhem Footsteps, Gunshot, Explosion

Demo Pages

Each demo is a single page with:

  • Slider controls for real-time parameter adjustment (frequency, rate, gain, spread, etc.)
  • Start button to activate the Faust WASM audio engine
  • Live DSP source display with copy-to-clipboard

Impacts Demo — Controls and DSP Source

The Impacts demo — pitch, hardness, and rate sliders controlling a triggered resonant bandpass impact model, with full Faust source below.

Granular Synthesis Demo — Grain Cloud Controls

Granular Synthesis — four overlapping grain streams controlled by frequency, rate, duration, spread, and gain parameters.

Quick Start

No build required for deployment — all deploy directories are pre-built, self-contained HTML+WASM pages.

# Clone the repo
git clone https://github.com/materializepath/designing-sound-experiments.git
cd designing-sound-experiments

# Serve locally (Python or any static server)
python3 -m http.server 8000 --directory deploy-hub
# Open http://localhost:8000 in your browser

Or serve any individual demo:

python3 -m http.server 8000 --directory deploy-impacts

Building from Source

If you have the Faust compiler installed, you can rebuild the WASM modules:

# Build a single demo
faust -lang wasm -ct 1 -o deploy-my-demo/module.wasm dsp/my-demo.dsp

# Or use a build script
./build-single.sh dsp/impacts.dsp deploy-impacts/module.wasm

Prerequisites:

Page Generation

The gen_pages.py script auto-generates individual HTML pages from a template for the machine/lifeform demos:

python3 gen_pages.py

This reads .dsp source, .dsp.json UI metadata, and the compiled .wasm binary for each demo, then produces a standalone HTML page with:

  • Correct slider definitions and parameter ranges
  • Base64-encoded WASM fallback (future use)
  • Full DSP source code embedded

Architecture

designing-sound-experiments/
├── dsp/                    # Faust DSP source files (.dsp + .dsp.json metadata)
├── deploy-hub/             # Main index page (hub/index of all demos)
├── deploy-*/               # Pre-built demo directories (index.html + .wasm)
├── boilerplate/            # Template HTML for new demos
├── assets/                 # Screenshots and media
│   └── screenshots/
├── gen_pages.py            # Auto-generates HTML pages from DSP source
├── generate_pages.py       # Legacy page generator
├── deploy-demo.sh          # DreamHost deployment script
├── docs/                   # Documentation
│   ├── ARCHITECTURE.md
│   ├── BUILD.md
│   ├── DEMO_CATALOG.md
│   ├── DSP_REFERENCE.md
│   └── PLANNING.md
├── AGENTS.md               # AI agent context
├── CLAUDE.md               # Claude-specific instructions
├── CONTRIBUTING.md
└── LICENSE

Tech Stack

  • Faust DSP — Domain-specific language for real-time audio synthesis and processing
  • WebAssembly — Faust compiles directly to WASM for in-browser execution
  • Web Audio APIAudioContext + ScriptProcessorNode for real-time audio output
  • Vanilla HTML/CSS/JS — No frameworks, no build step for the deployed demos

Why Faust WASM?

Faust's -lang wasm -ct 1 compiler mode produces extremely compact WebAssembly modules (typically 3–12 KB) with deterministic real-time performance. Each demo is a single <canvas>-free HTML file that works offline and requires nothing but a modern browser. The DSP source is displayed and copyable on every page — the code is the documentation.

Deployment

The project includes a deployment script for DreamHost (or any rsync target):

./deploy-demo.sh deploy-additive additive-synthesis

This pushes the demo directory to a remote host. The hub is available at:

https://mcv09.materialize.fun/

Acknowledgments

  • Andy FarnellDesigning Sound (MIT Press, 2010). The foundational text on procedural audio that inspired every demo in this collection.
  • GRAME — The Faust team for creating an extraordinary DSP compilation framework.
  • MIT Press — For publishing and supporting open-access models for technical knowledge.

License

MIT — see LICENSE. The Faust DSP code, HTML pages, and build scripts in this repository are freely available for use, modification, and distribution.

About

*Work-in-progress* - 38 interactive Faust DSP → WebAssembly demonstrations based on Andy Farnell's Designing Sound (MIT Press, 2010). Self-contained HTML+WASM, procedural audio in the browser.

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages