Update.
This commit is contained in:
parent
320addd5c9
commit
02e27a33a2
47 changed files with 882 additions and 62 deletions
41
docs/BUILTIN_DEVICES.md
Normal file
41
docs/BUILTIN_DEVICES.md
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
# 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.
|
||||
|
|
@ -21,7 +21,7 @@ may be quoted, with `\\` and `\"` escapes. Apply rewrites comments and formattin
|
|||
| interface | `width=1280`, `height=800`, `piano_width=900`, `piano_height=620`, `refresh_ms=100` |
|
||||
| editing | `sequencer_snap=240`, `piano_snap=240`, `sequencer_zoom=48`, `clip_ticks=3840`, `note_ticks=960`, `note_velocity=100`, `note_channel=0`, `filter_channel=-1`, `filter_low=0`, `filter_high=127` |
|
||||
| project_defaults | `tempo=120000` (milli-BPM), `volume_cc=7`, `pan_cc=10`, `sustain_cc=64` (128 disables a mapping) |
|
||||
| transport | `loop_start=0`, `loop_end=3840`, `loop_enabled=0` |
|
||||
| transport | `loop_start=0`, `loop_end=3840`, `loop_enabled=0`, `follow_playhead=0` |
|
||||
|
||||
Audio client name, block capacity, output channels and fades take effect on
|
||||
**Reconnect**. JACK chooses the actual device, rate and hardware buffer size;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Project format v12 (reads v1–v11)
|
||||
# Project format v13 (reads v1–v12)
|
||||
|
||||
Phases 5–31 use a bounded text format implemented in C99 without a parser library.
|
||||
The extension is `.xtc`. File operations run exclusively on the control thread.
|
||||
|
|
@ -389,3 +389,10 @@ migrate to no bindings and built-in live sine. Parsing/inspection never executes
|
|||
modules; preparing playback verifies binary identity and configuration. Deleting
|
||||
tracks removes bindings; reordering preserves stable track identities. Undo
|
||||
snapshots include bindings. Public clients must rebuild for the new spec field.
|
||||
|
||||
## Version 13 internal devices
|
||||
|
||||
Format value 4 identifies dependency-free internal devices at `/xtc/internal`.
|
||||
Indices 0/1 bind fixed Soft Keys/Sub Bass instruments; 2/3 are Delay/Reverb
|
||||
effects with three controls and existing automation records. Identity and control
|
||||
ranges are validated without loading libraries. See [BUILTIN_DEVICES.md](BUILTIN_DEVICES.md).
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ undo/redo and a generic LADSPA editor. JACK is the only live audio/MIDI backend;
|
|||
core validation and offline rendering work without it. Native/LADSPA processors
|
||||
are trusted in-process code. No proprietary energyXT resources are included.
|
||||
|
||||
Project format v12 reads versions 1–12 transactionally. Syntax diagnostics identify
|
||||
Project format v13 reads versions 1–13 transactionally. Syntax diagnostics identify
|
||||
records and lines. `xtc-check --inspect` lists dependency paths without executing
|
||||
plugins. Phase 29 adds timing/CPU/RSS reports, repeatable stress runs and virtual
|
||||
endurance. Phase 30 adds configurable install directories, shared install/remove
|
||||
|
|
@ -85,3 +85,13 @@ vertical dB faders, flat pan knobs, mute/solo, routing and stereo meters on ever
|
|||
track and bus, plus a pinned master monitor. Selected-track automation remains
|
||||
below the strips. No project format or engine changes. Screenshots are refreshed;
|
||||
see MIXER.md and screenshots/README.md.
|
||||
|
||||
|
||||
Phase 37 adds searchable Commands (Ctrl+P), editable project BPM, a live track
|
||||
inspector, session statistics, Fit song and an optional persistent Follow
|
||||
playhead control. Numeric input remains intact during display refreshes.
|
||||
Screenshots are refreshed, including the command palette. See WORKSPACE.md.
|
||||
|
||||
Phase 38 adds dependency-free Soft Keys/Sub Bass instruments and Delay/Reverb
|
||||
effects with saved controls and automation. Choose instruments in track headers;
|
||||
insert effects on selected graph wires from Edit. See [BUILTIN_DEVICES.md](BUILTIN_DEVICES.md).
|
||||
|
|
|
|||
|
|
@ -1038,6 +1038,52 @@ and the updated [screenshots](../screenshots/README.md).
|
|||
|
||||
---
|
||||
|
||||
## Phase 37 — Workspace Navigation and Direct Editing
|
||||
|
||||
### Goal
|
||||
Reduce menu hunting and make the workspace useful for everyday project editing
|
||||
with a direct transport, track inspector and searchable commands.
|
||||
|
||||
### Tasks and acceptance criteria
|
||||
- [x] Add Ctrl+P command search with filtering, keyboard navigation, Enter and Escape.
|
||||
- [x] Expose active menu actions through existing callbacks, without duplicating command implementations.
|
||||
- [x] Make project BPM editable from the transport with validation, undo and failed-preparation rollback.
|
||||
- [x] Replace the passive sidebar with a context-aware gain/pan/mute/solo inspector.
|
||||
- [x] Preserve unfinished numeric input across timer refreshes and avoid no-op history edits.
|
||||
- [x] Add a session summary, Fit song and optional Follow playhead navigation.
|
||||
- [x] Persist Follow playhead through the existing Preferences / Apply workflow.
|
||||
- [x] Test command selection/cancellation, inspector edits, tempo rollback/undo and navigation.
|
||||
- [x] Refresh all screenshots, including a command-palette view, and document the workflow.
|
||||
|
||||
### Implementation status
|
||||
Implemented over the existing C model, history and backend APIs, with no new
|
||||
dependencies or project format change. Tempo edits stop and rewind transport;
|
||||
track/clip and piano selections survive. Fit song uses the supported 24..384
|
||||
pixels-per-beat zoom levels; very long projects still require scrolling.
|
||||
The inspector targets the selected mixer channel in Mixer and the arrangement
|
||||
track in other views. Command search lists active menu actions; it is not a
|
||||
plugin scanner or a key-binding editor. See WORKSPACE.md.
|
||||
|
||||
### Future usability work
|
||||
Dockable editor panels, arrangement multiselection, independent track inserts,
|
||||
resizable pinned track headers and customizable shortcuts remain future work.
|
||||
They require separate model/layout designs and acceptance tests.
|
||||
|
||||
---
|
||||
|
||||
## Phase 38 — Internal instruments and effects
|
||||
|
||||
- [x] Add always-available Soft Keys and Sub Bass MIDI instrument presets.
|
||||
- [x] Add Delay and Reverb with bounded controls and effect automation.
|
||||
- [x] Integrate track selection, graph wire insertion, undo and saved projects.
|
||||
- [x] Preserve older projects; reserve format 13 internal device identities.
|
||||
- [x] Verify DSP tails, block partition consistency, note release/panic and persistence.
|
||||
- [x] Refresh application screenshots and add internal device editor views.
|
||||
|
||||
See [BUILTIN_DEVICES.md](BUILTIN_DEVICES.md) for controls and explicit limitations.
|
||||
|
||||
---
|
||||
|
||||
## Recommended Execution Order
|
||||
|
||||
Reorder the phases when the audit reveals a blocking dependency. Do not mark a phase complete merely because code exists: its acceptance criteria must be demonstrated by builds, tests, or documented manual verification.
|
||||
|
|
|
|||
|
|
@ -108,3 +108,44 @@ horizontally for larger projects; the master output monitor stays visible.
|
|||
Select a channel name to edit its gain/pan automation below the bank. Existing
|
||||
undo, keyboard controls and project persistence remain available. See
|
||||
[MIXER.md](MIXER.md) for fader units, metering, automation and limits.
|
||||
|
||||
|
||||
## Phase 37 direct editing and navigation
|
||||
|
||||
**Commands** (Ctrl+P) searches active menu actions by case-insensitive substring.
|
||||
Type part of an action path such as `mixer`, `import` or `preferences`, use
|
||||
Up/Down to select, then Enter or **Run command**. Double-click also runs an
|
||||
entry. Escape or Cancel leaves the project unchanged. The palette closes before
|
||||
executing the existing menu callback; context and recording guards still apply.
|
||||
|
||||
The transport **BPM** field edits project tempo from 20 to 300 BPM, stored in
|
||||
milli-BPM. Enter or release commits one undoable change. It stops and rewinds
|
||||
transport and prepares the project, including converting loop ticks to samples
|
||||
at the new tempo. Failed validation/preparation retains the previous project;
|
||||
the field returns to its actual value. Existing track/clip and piano-roll
|
||||
selection survives. This is project tempo, separate from Preferences' new-project
|
||||
default. Tempo automation is not added.
|
||||
|
||||
The **Track inspector** now edits the selected track's linear Gain (0..4), Pan
|
||||
(-1..1), Mute and Solo. In Mixer it follows the selected channel; in Sequencer
|
||||
and Graph it follows arrangement selection. Controls synchronize with model
|
||||
changes and undo, while typing is protected from the display refresh timer.
|
||||
Only the edited field is committed. Unchanged values create no history entry.
|
||||
These are static values; automation still overrides gain and pan. Recording
|
||||
prevents edits. Track instruments and routing retain their existing selectors.
|
||||
|
||||
The session row shows track/bus count, clip count and the arrangement's bar span.
|
||||
**Fit song** (Ctrl+0) returns to the start and selects the largest supported zoom
|
||||
that fits the arrangement plus a beat of padding. Supported zoom remains
|
||||
24, 48, 96, 192 or 384 pixels per beat; a sufficiently long arrangement requires
|
||||
scrolling even at the minimum. Empty projects fit one bar.
|
||||
|
||||
**Follow playhead** pages the arrangement horizontally during playback, retaining
|
||||
vertical scroll. It operates only in Sequencer and waits while a mouse drag is
|
||||
active. It is off by default; Preferences / Apply persists it in
|
||||
`[transport] follow_playhead=0` or `1`. Manual scrolling remains available and
|
||||
Fit song resets the viewport without editing the project.
|
||||
|
||||
Verification covers real FLTK palette filtering, empty searches and cancellation,
|
||||
tempo callbacks/undo/failed adoption, inspector edits and in-progress numeric
|
||||
input, fit and follow navigation, and existing core/GUI/live JACK workflows.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue