# Preludes Cagire has two levels of prelude: a **project prelude** shared by all banks, and **bank preludes** that travel with each bank. ## Bank Prelude Each bank can carry its own prelude script. Press `p` to open the current bank's prelude editor. Press `Esc` to save, evaluate, and close. Bank preludes make banks self-contained. When you share a bank, its prelude travels with it — recipients get all the definitions they need without merging anything into their own project. ```forth : bass pulse sound 0.8 gain 400 lpf 1 lpd 8 lpe 0.6 width . ; : pad sine sound 0.5 gain 2 spread 1.5 attack 0.4 verb . ; ``` Every step in that bank can now use `bass` and `pad`. Share the bank and the recipient gets these definitions automatically. ## Project Prelude The project prelude is a global script shared across all banks. Press `P` (Shift+p) to open it. Use it for truly project-wide definitions, variables, and settings that every bank should see. ```forth c2 !root 0 !mode 42 seed ``` ## Evaluation Order When preludes are evaluated (on playback start, project load, or pressing `d`): 1. **Project prelude** runs first 2. **Bank 0 prelude** runs next (if non-empty) 3. **Bank 1 prelude**, then **Bank 2**, ... up to **Bank 31** Only non-empty bank preludes are evaluated. Last-evaluated wins for name collisions — a bank prelude can override a project-level definition. ## Keybindings | Key | Action | |-----|--------| | `p` | Open current bank's prelude editor | | `P` | Open project prelude editor | | `d` | Re-evaluate all preludes (project + all banks) | ## Naming Your Sounds The most common use of a bank prelude is to define words for your instruments. Without a prelude, every step that plays a bass has to spell out the full sound design: ```forth pulse sound c2 note 0.8 gain 400 lpf 1 lpd 8 lpe 0.6 width . ``` In the bank prelude, define it once: ```forth : bass pulse sound 0.8 gain 400 lpf 1 lpd 8 lpe 0.6 width . ; ``` Now every step just writes `c2 note bass`. Change the sound in one place, every step follows. ## Building a Vocabulary ```forth ;; instruments : bass pulse sound 0.8 gain 400 lpf 1 lpd 8 lpe 0.6 width . ; : pad sine sound 0.5 gain 2 spread 1.5 attack 0.4 verb . ; : lead tri sound 0.6 gain 5000 lpf 2 decay . ; ;; musical helpers : octup 12 + ; : octdn 12 - ; : quiet 0.3 gain ; : loud 0.9 gain ; ``` Steps become expressive and short. The prelude carries the design decisions; steps carry the composition. ## Setting Initial State The project prelude is the right place for global state: ```forth c2 !root 0 !mode 42 seed ``` Every step can then read `@root` and `@mode`. And `42 seed` makes randomness reproducible. ## When Preludes Run Preludes evaluate at three moments: 1. When you press **Space** to start playback 2. When you **load** a project 3. When you press **d** manually They run once at these moments, not on every step. If you edit a prelude while playing, press `d` to push changes into the running session. ## What Not to Put Here Preludes have no access to sequencer state. Words like `step`, `beat`, `iter`, and `phase` are meaningless here because no step is playing yet. Use preludes for definitions and setup, not for logic that depends on timing. Preludes also should not emit sounds — any `.` calls here would fire before the sequencer clock is running.