Where the code lives, where to ask, and how to report something that does not work in a way that gets it fixed.
1. The project
Phausto is written by Domenico Cipriani, who performs and publishes as Lucretio. It sits alongside two sibling packages, and the three are designed to be used together.
| Resource | What it is |
|---|---|
| lucretiomsp/phausto | The source |
| The wiki | Installation notes, kept current with the code |
| Issues | Bug reports and feature discussion |
| Music with Pharo | The site this manual is part of, with a development blog |
1.1 The wider family
| Package | Role |
|---|---|
| Phausto | Synthesis and DSP — this manual |
| Coypu | Live-coding client: patterns, sequencing, and output to SuperDirt, Kyma, Pure Data, MIDI and Phausto. Its manual |
| Pharo-Sound | MIDI send and receive via PortMidi |
| MasterLu | The in-image tutorial — see Learn in the Image |
| CoypuIDE | Editor and browser tooling, including the Phausto class reference |
Underneath all of it is FAUST, developed at GRAME. The FAUST documentation and its standard library reference are worth knowing about: when Phausto wraps a FAUST module, the FAUST documentation is the deeper description of what it does.
2. Where to ask
| Question | Best place |
|---|---|
| Something in Phausto is broken | Phausto issues |
| Installation trouble | The wiki first, then issues |
| A general Pharo question | Pharo Discord or Pharo Discourse |
| A FAUST language or library question | FAUST documentation and the FAUST community |
| Sequencing and live coding | The Coypu repository |
| An error or omission on this page | The edit link at the foot of it |
dsp generatedCode tells you which: if the generated FAUST is
not what you intended, it is a Phausto question; if it is exactly what you intended but
sounds wrong, it is a FAUST or DSP question.
3. Reporting a problem
Phausto is maintained by one person. A report that can be reproduced in thirty seconds is far more likely to be fixed than one that needs a conversation first.
3.1 What makes a report useful
| Include | Because |
|---|---|
| A minimal snippet | The shortest code that shows the problem, ready to paste into a Playground |
| Pharo version | 11, 12 and 13 are all supported and can differ |
| Platform and architecture | The native libraries are platform-specific |
| How Phausto was installed | Music image, or Metacello from which commit |
| What you expected, and what happened | Silence, an exception, or the wrong sound are three different bugs |
getLastError | For build failures, the FAUST compiler's own message — see Internals §3.3 |
generatedCode | For wrong-sound bugs, what was actually compiled |
4. Contributing
4.1 To this manual
Every page has an Edit this page on GitHub link at the foot, which opens the source file directly in GitHub's editor. A typo fix is a two-minute pull request.
Things that are always welcome:
phausto-nav.js. Adding a page means adding one line to the
PHAUSTO_PAGES array — the sidebar, quick links, search and previous/next
navigation all follow from it. Do not hand-edit navigation into a page.
4.2 To Phausto
Phausto is a Pharo package developed with Iceberg. Clone the repository, load the baseline, and work in the image as usual.
| Convention | Detail |
|---|---|
| Branch | main |
| Commit messages | Prefixed feature: or fix: |
| Tests | 45 test classes; the expectation is that the suite stays green |
| Class comments | Expected on new classes — they are the package's documentation and this manual's source |
| Setters | Prefer composing an existing trait over defining a new selector |
The most valuable contribution for a new UGen is usually not the UGen: it is the class comment and the test. Both are what make it findable and keep it working.
5. Exploring the package
With CoypuIDE installed, Phausto ships a visual class browser organised by UGen family:
PhaustoClassReference new openInSpace.
It groups classes the way the UGen Library does — oscillators, effects, envelopes and so on — and shows each class comment, many of which include a runnable example. It is the in-image counterpart to this manual, and often the faster route when you are already working.
PhaustoClassReference for browsing by family,
MasterLu for a guided path, and
traceAllParams for the ground truth about any single UGen.
6. Credit where it is due
Phausto is a thin and careful layer over a great deal of other people's work. When a patch sounds good, much of the credit belongs upstream:
| Whose work | What it gave us |
|---|---|
| GRAME | The FAUST language, compiler and standard libraries |
| The FAUST library authors | Filters, reverbs, physical models and effects — the algorithms this manual catalogues |
| Julius O. Smith | Much of the physical modelling and filter theory the libraries implement |
| Fons Adriaensen | Zita-Rev1, wrapped as ZitaRevStereo |
| Jon Dattorro | The plate reverb behind DattorroRev |
| Max Mathews | The Unit Generator itself, at Bell Labs in the 1950s |
| The ChucK team | The => operator, borrowed with affection |
| The Pharo community | The live image that makes all of this immediate |
If you use Phausto in a performance, a release or a paper, crediting Phausto and FAUST is appreciated — and hearing about it more so.
8. Troubleshooting
I am not sure whether my problem is Phausto or FAUST
Read dsp generatedCode — §2.
PhaustoClassReference is not understood
CoypuIDE is not installed. It is a separate package — §5.
My issue has not had a reply
The project is maintained by one person alongside other work. A minimal reproducible snippet is the single biggest thing that speeds up a response — §3.1.
I found a mistake in this manual
Use the edit link at the foot of the page — §4.1.
I wrote a UGen and want it included
Open a pull request with a class comment and a test. Compose an existing setter trait rather than inventing new selectors — §4.2.