xtc/docs/BUILTIN_DEVICES.md

3.6 KiB
Raw Blame History

Internal instruments and effects

No plugin downloads, search paths or external libraries are needed. The original built-in sine remains available for existing projects.

Choose Internal: Soft Keys or Internal: Sub Bass in a MIDI track's instrument dropdown. Soft Keys blends a sine with a third harmonic; Sub Bass uses a pure sine. Both are fixed presets with 32 voices, velocity sensitivity, short attack/release envelopes, sustain pedal, note-off and panic handling. High harmonics are omitted near Nyquist. These basic instruments have no preset editor, pitch bend, sample library or oscillator/filter controls.

In Modular Graph, select a wire and choose Edit → Insert internal delay on wire or Insert internal reverb on wire. This preserves the route and inserts the effect into the signal path. File → Add internal delay/reverb creates an unconnected device for manual wiring. Select its node and use Edit → Selected plugin control to edit it, or Selected plugin automation to automate it. Changes use the existing stopped-engine preparation and undo workflow.

  • Delay: time (1–2000 ms), feedback (0–0.95), dry/wet mix (0–1).
  • Reverb: four parallel damped feedback combs, with decay (0–0.95), damping (0–0.95) and dry/wet mix (0–1). Decay is a feedback coefficient, not seconds.

These are basic mono processors; stereo plans use independent instances. Reverb is deliberately simple and has no room model or stereo diffusion. Delay time changes can click; there is no crossfade or tempo sync. Transport seeks retain existing effect history, like LADSPA. Effect tails require continued rendering; playback/export does not automatically extend the song for tails.

Project format 13 stores internal devices as format 4 with reserved module path /xtc/internal, stable numeric identity and index (0 keys, 1 bass, 2 delay, 3 reverb). This is a virtual identifier, never an external binary. Effect controls and automation are saved using the existing plugin records; instruments are fixed presets. Readers still accept formats 1–12. Older xtc builds reject format 13. All buffers are allocated during preparation; processing performs no allocation, file access, library loading, locking or GUI calls.

Validation: make BUILD_DIR=build/phase38 all gui test test-gui-instruments test-gui-modern-plugins test-gui-plugins analyze (join onto one line). test-builtins checks impulse tails, dry mix, feedback bounds, block partition consistency, note release/panic and instrument/effect project round trips.

Phase 40 acceptance checks

make BUILD_DIR=build/phase40 all gui test test-reliability test-gui builtin-preview checks all four device identities and GUI paths without external plugin binaries. The reliability runner fails each internal preparation allocation in turn and forbids allocation/free, direct file I/O and blocking locks during processing. Core tests compare persisted rendering for both instruments and both automated effects, corrupt an internal module identity transactionally, and cover voice exhaustion, sustain, repeated notes, partitioning and transport reset/seek/panic. The existing portability suite verifies older project migrations.

For repeatable manual listening, run make builtin-preview and audition build/builtin-{0,1,2,3}.wav at a conservative level: 0 is Soft Keys, 1 Sub Bass, 2 Delay and 3 Reverb. Each six-second file includes held tones or two impulses followed by silence for tails. Check onset/release, unwanted discontinuities, finite decay and the documented mono character. Generation is verified; human listening and physical-device qualification remain pending.