# Settings The audio engine can be configured through the Engine page or via command-line arguments. Settings are saved and restored between sessions. ## Engine Page Press `Ctrl+Right` until you reach the Engine page. Here you can see the engine status and adjust settings. ### Display The right side of the page shows visualizations: - **Scope**: oscilloscope showing the audio waveform - **Spectrum**: 32-band frequency analyzer ### Settings Navigate with arrow keys, adjust values with left/right: - **Output Device**: where sound goes (speakers, headphones, interface). - **Input Device**: what audio input source to use (microphone, line-in, etc.). - **Channels**: number of output channels (2 for stereo). - **Buffer Size**: audio buffer in samples (64-4096). - **Max Voices**: polyphony limit (1-128, default 32). ### Buffer Size Smaller buffers mean lower latency but higher CPU load. Larger buffers are safer but feel sluggish. | Buffer | Latency at 44.1kHz | |--------|-------------------| | 64 | ~1.5ms | | 128 | ~3ms | | 256 | ~6ms | | 512 | ~12ms | | 1024 | ~23ms | Start with 512. Lower it if you need tighter timing. Raise it if you hear glitches. ## Samples The engine indexes audio files from your sample directories. Add directories with `A`, remove with `D`. The sample count shows how many files are indexed. ### Supported Formats - WAV (.wav) - MP3 (.mp3) - OGG Vorbis (.ogg) - FLAC (.flac) - AIFF (.aiff, .aif) - AAC (.aac) - M4A (.m4a) ### Lazy Loading Samples are not loaded into memory at startup. They are decoded on demand when first played. This means you can have thousands of samples indexed without using much RAM until you actually use them. ### Folder Organization The scanner looks at top-level files and one level of subdirectories: ``` samples/ ├── kick.wav -> "kick" ├── snare.wav -> "snare" ├── hats/ │ ├── closed.wav -> "hats" n 0 │ ├── open.wav -> "hats" n 1 │ └── pedal.wav -> "hats" n 2 └── breaks/ ├── amen.wav -> "breaks" n 0 └── think.wav -> "breaks" n 1 ``` Top-level files are named by their filename (without extension). Files inside folders are sorted alphabetically and numbered starting from 0. ### Playing Samples Reference samples by name: ```forth kick snd . ;; play kick.wav snare snd 0.5 gain . ;; play snare at half volume ``` For samples in folders, use `n` to select which one: ```forth hats snd 0 n . ;; play hats/closed.wav (index 0) hats snd 1 n . ;; play hats/open.wav (index 1) hats snd 2 n . ;; play hats/pedal.wav (index 2) ``` The index wraps around. If you have 3 samples and request `5 n`, you get index 2 (because 5 % 3 = 2). ### Sample Variations with Bank The `bank` parameter lets you organize variations: ``` samples/ ├── kick.wav -> default ├── kick_a.wav -> bank "a" ├── kick_b.wav -> bank "b" └── kick_hard.wav -> bank "hard" ``` ```forth kick snd . ;; plays kick.wav kick snd a bank . ;; plays kick_a.wav kick snd hard bank . ;; plays kick_hard.wav ``` If the banked version does not exist, it falls back to the default. ## Troubleshooting * **No sound**: Check output device selection. * Try the test sound (`t`) on Engine page). * **Glitches/crackling**: Increase buffer size, restart the Engine. * **High CPU**: Reduce max voices. Disable scope/spectrum. Increase buffer size. * **Samples not found**: Check sample directories on Engine page. Filenames are case-sensitive on some systems.