MasterLu is an interactive Phausto tutorial that runs inside Pharo itself. Every lesson opens in a Playground where the code is not an example to read but a program to evaluate.
1. What MasterLu is
MasterLu is built on ProfStef, Pharo's own in-image tutorial framework. Each lesson is displayed in a live Playground rather than a document viewer, so you step through it the way you would step through your own code — selecting a line and evaluating it.
That difference matters more for audio than for most subjects. A written description of a filter sweep tells you very little; the same three lines evaluated with the sound running tell you everything. MasterLu is the recommended companion to this manual rather than a replacement for it: the manual is organised by topic and meant to be searched, MasterLu is organised as a path and meant to be walked.
2. Installing it
Evaluate in a Playground:
Metacello new
baseline: 'MasterLu';
repository: 'github://lucretiomsp/MasterLu:main';
load.
The baseline pulls in Phausto, Coypu and CoypuIDE alongside MasterLu itself, so a bare image ends up with the whole music stack. If you already have Phausto working, that is fine — Metacello will not disturb it.
librariesBundle folder in place first — see
Installation §3. The lessons make sound from the very first one, so
a half-installed Phausto becomes obvious immediately.
3. Running the tutorial
One line starts it:
MasterLu go.
A window titled Master Lu opens with the first lesson loaded. The window is a real Playground: select any line and evaluate it with Cmd-D or Ctrl-D. You can edit the code, add to it, and inspect results exactly as you would anywhere else in Pharo.
4. The sixteen lessons
The tutorial has a fixed order, designed so that each lesson introduces exactly one new idea. The right-hand column points at the part of this manual that covers the same ground in reference form.
| # | Lesson | Introduces | See also |
|---|---|---|---|
| 1 | Hello Phausto | SineOsc, asDsp, the lifecycle | First Sounds |
| 2 | Hello Stereo | stereo before asDsp | First Sounds |
| 3 | At the Controls | setValue:parameter:, traceAllParams | Parameters |
| 4 | Display the UI | displayUI, the Djembe model | UI Primitives |
| 5 | Unit Generators 101 | Noise, uLevel, what a UGen is | Unit Generators |
| 6 | chuckInto | The => operator | Connecting |
| 7 | PlayNotes 101 | playNote:prefix:dur:, symbol labels | MIDI & Notes |
| 8 | Our First Synthesiser | osc ⇒ env ⇒ filter | Synthesis §2 |
| 9 | Additive Synthesis | Summing with + | Synthesis §3 |
| 10 | Additive with an Array | asSumOfUGen | Synthesis §3 |
| 11 | Modal Synthesis | PhModeFilter, t60 | Synthesis §4 |
| 12 | TpSampler basics | Sample folders, algorithmic triggering | Sequencing §4 |
| 13 | Basic waveforms | , and PhSelect4 | Synthesis §1 |
| 14 | Basic waveforms with SelectN | PhSelectN | Synthesis §1 |
| 15 | Pitch Envelope | asBox, envelopes as modulators | Envelopes |
| 16 | 2-Operator FM Synthesis | Dx7Op, phaseMod: | Synthesis §5 |
5. Synthesis Fundamentals
MasterLu ships a second, separate track: theory chapters rendered as Microdown rather than executed as code. Where the sixteen lessons teach the Phausto API, these explain the concepts underneath it.
SynthesisFundamentals new open.
Three chapters are available, each also reachable as a class-side example:
| Chapter | Covers |
|---|---|
| Five Types of Synthesis Modules | Generators, Combiners, Modifiers, Time-Variant Controllers, Storers — a vocabulary for taking any synthesiser apart |
| Five Types of Synthesis | Subtractive, additive, modulation/distortion, physical modelling and sample-based, each mapped to the Phausto classes that implement it |
| Time-Variant Controllers | Envelope generators and LFOs, and why Phausto has no separate control rate |
PhHSlider, which update more slowly. This is why an LFO and an
oscillator are the same kind of object here, and why either can be used anywhere the other
can.
6. Known issues
MasterLu is a teaching package under active development. A few rough edges are worth knowing about before you meet them.
| Where | Issue |
|---|---|
| Lesson 11, Modal Synthesis | Calls Impulsify and ModeFilter. The classes are PhImpulsify and PhModeFilter; add the prefix and the lesson runs. |
| Lesson 12, TpSampler | The sample path is hardcoded to the author's machine. Substitute a folder of your own. |
| Lesson 14, SelectN | Five oscillators but an index capped at 3, so the noise source is unreachable. Change max: 3 to max: 4. |
| Several lessons | A missing full stop after dsp destroy means selecting a whole snippet at once fails to parse. Evaluate line by line, as intended. |
| Baseline | ProfStef is not declared as a dependency even though MasterLu subclasses it. On an image without ProfStef, load it first. |
Corrected, runnable versions of every lesson's material appear throughout this manual — see the "See also" column in §4.
8. Troubleshooting
MasterLu go raises doesNotUnderstand
ProfStef, MasterLu's superclass, is missing from the image. The baseline does not declare it, so on a minimal image you must load ProfStef yourself. See §6.
The lesson window opens but the code does nothing
Lessons are meant to be evaluated line by line, not read. Select a line and press Cmd-D; opening the window runs nothing by itself.
Selecting a whole lesson at once gives a parse error
A missing full stop in the lesson text — see §6. Evaluate the lines individually and the problem disappears.
Lesson 1 makes no sound although the code runs cleanly
Phausto's native libraries are not in place. MasterLu loads the Pharo side only; check Installation §3.
I have several windows all titled "Master Lu"
There should only ever be one — the view reuses its window. Close them all and evaluate
MasterLu go again to restart cleanly.