🎛 Phausto
DSP Programming in Pharo

An embedded FAUST engine inside a live Smalltalk image. Build oscillators, filters, physical models and full synthesisers from objects, hear them the instant you evaluate them, and export the result as a CMajor patch, a JUCE plugin or a Bela binary.

Install
Metacello new baseline: 'Phausto'; repository: 'github://lucretiomsp/phausto:main'; load

What Phausto is

FAUST is a functional language for real-time signal processing, and one of the richest DSP standard libraries in existence. Phausto embeds the FAUST compiler in Pharo and puts a Smalltalk object in front of it. You assemble Unit Generators — over five hundred of them, from SineOsc to MoogLadder to a bidirectional waveguide clarinet — send them ordinary Pharo messages, and Phausto compiles the result to native audio code at runtime.

There is no separate toolchain, no build step and no file to save. A patch is an object graph that exists in your image; changing it is a message send. That makes Phausto equally suited to learning synthesis, to designing a sound for a piece, and to live coding a performance.

A first taste

Three oscillators, an envelope, a filter and a reverb — evaluated line by line in a Playground:

"An oscillator, shaped by an envelope, through a Moog filter, into a reverb"
synth := PulseOsc new => ADSREnv new => MoogVcf new => GreyHole new.

dsp := synth stereo asDsp.
dsp init.
dsp start.
dsp displayUI.   "press the trigger button, turn the knobs"

dsp stop.
dsp destroy.
New here? Read Installation, then First Sounds. If you would rather be taught inside the image than read a manual, install MasterLu and evaluate MasterLu go.