Short answers to the questions that come up most, each pointing at the page that answers them properly.

1. About the project

What is Phausto, in one sentence?

An embedded FAUST compiler inside a live Pharo image, with a Smalltalk object layer over it, so you can build and hear DSP interactively and export the result.

Do I need to install FAUST?

No. A compiled FAUST runtime ships in the platform library bundle. See Installation §3.

Do I need to know FAUST?

No. The Unit Generator layer is a complete API in its own right. Knowing FAUST helps when you want something Phausto does not wrap — see Raw FAUST & the Box API.

Which Pharo versions work?

Pharo 11, 12 and 13.

How is it related to Coypu?

Coypu decides when and what to play; Phausto decides how it sounds. They are separate packages designed to be used together — see TurboPhausto §6.

Is it ready for real work?

It is used for performance and research, and the DSP underneath is mature FAUST. The Pharo API is still moving, so pin a commit for anything that must keep running — see Changelog §1.1.

2. Installing

What is the fastest way to try it?

The Pharo Music image from Pharo Launcher — everything is already in place. See Installation §1.

The package loaded but nothing works

The native libraries are missing. librariesBundle goes in the same folder as your .image file — Installation §3.2.

macOS will not open the library

Right-click it in Finder and choose Open once — the binaries are unsigned. Installation §3.3.

Is Windows or Linux supported?

Yes, with the corresponding library bundle. See the table in Installation §3.1.

main or master?

The Phausto branch is main.

3. Why is there no sound?

By far the most common question. Work down this list in order.

CheckFix
Did you evaluate line by line?Running the whole snippet at once starts and stops within microseconds
Did you call init and then start?Both are required, in that order
Does the UGen need triggering?Envelopes, drums and plucked models are silent until gated — dsp displayUI and press the button
Is uLevel above zero?Every UGen has one
Is it an effect with no input?Effects need something chucked into them
Are the native libraries in place?Installation §3

The long form is in First Sounds §8.

Sound keeps playing after I stopped it

An earlier DSP is still running. DSP initializedDSPs do: [ :d | d stop ] silences everything — DSP API §2.3.

The audio crackles

Raise the buffer size — Internals §4.

4. Finding your way around the API

The class I want has almost no methods. Where is its API?

In traits. SineOsc defines only initialize; freq: comes from PhFrequencySetter. See Setter Traits.

How do I find out what a UGen can do?

Three lines:

dsp := SomeUGen new asDsp.
dsp init.
dsp traceAllParams.

How do I find a UGen for a job?

The UGen Library lists all 533 with a filter box. In the image, PhaustoClassReference new openInSpace browses them by family if CoypuIDE is installed.

doesNotUnderstand on a setter I am sure exists

Either that trait is not composed into this class, or the name differs — try freq:, frequency:, fr:, cutoff:. See Setter Traits §9.

Why do some classes start with Ph and others not?

Historical inconsistency. When a name is not understood, try adding the prefix — PhImpulsify, PhModeFilter, PhFlangerMono. See Changelog §3.

5. Building patches

Why can I not change a value while it plays?

You passed a number, so it was compiled in as a constant. Pass a symbol or a UI primitive instead — Parameters §1. This is the single most common misunderstanding in Phausto.

What is the difference between , and +?

, puts signals side by side as separate channels; + mixes them into one. See Connecting §2.

Why does 100 + someUGen fail?

FAUST arithmetic needs signals on both sides. Write 100 asBox + someUGenConnecting §3.1.

Why is a + b * c not what I expected?

Pharo binary operators are all equal precedence, left to right. Parenthesise — Connecting §1.2.

Should stereo go before or after an effect?

Before, if you want the effect to process two channels. After, it merely duplicates the result — Connecting §7.

How do I see what my patch actually compiled to?

dsp generatedCode. It is the best debugging tool in the system — Raw FAUST §5.

Do I need to call destroy?

Yes. stop silences, destroy frees. Undestroyed DSPs accumulate and slow the image — Internals §7.

6. Performing and sequencing

How do I play a melody?

Label the instrument's frequency and gate with symbols, then use playNote:prefix:dur: in a forked loop — MIDI §2.

Why did my loop freeze the image?

It was not forked. Wrap it in [ ... ] forkSequencing §3.2.

My two rhythms drift apart

One is on the audio thread and one on Pharo's scheduler. Pick one clock per rhythmic layer — Sequencing §1.

Can I use a MIDI keyboard?

Yes — build with asDspMIDI and declare midiCtrl: on your widgets. For MIDI in and out to hardware, add Pharo-Sound. See MIDI §3.

Is there something more immediate for playing live?

TurboPhausto — a pre-compiled rack driven entirely by parameter changes, so nothing is rebuilt mid-performance.

Can Phausto be polyphonic?

A patch is one voice. Polyphony comes from playing several instruments in the rack, or from the polyphonic wrapper at export — Exporting §3.2.

7. Beyond Pharo

Can I make a VST out of my patch?

Yes — Phausto generates a complete JUCE project with an automatable parameter tree. You build it with JUCE's toolchain. See Exporting §4.

Can I run a patch on hardware?

Yes, on a Bela board, with analogue inputs bound through belaPin:Exporting §5.

My exported plugin has no parameters

The patch used literal numbers, so there was nothing to expose. Use widgets — Exporting §6.

My exported plugin is silent

If the rhythm lived in a forked Pharo loop, it did not travel. Move time into the signal graph — Exporting §6.

Can I use a FAUST library function Phausto has no class for?

Yes — write FAUST source and wrap it with DSP create:. The result is an ordinary DSP — Raw FAUST §2.

8. Where to go next

DocumentWhat it covers
First SoundsThe lifecycle, and the answer to most silence problems.
Parameters & ControlWhy a value can or cannot be changed at runtime.
UGen LibraryEvery class, filterable.
CommunityWhere to ask what is not answered here.