Skip to content

Latest commit

 

History

History
112 lines (84 loc) · 4.8 KB

File metadata and controls

112 lines (84 loc) · 4.8 KB

GAW

Gabe's Audio Workstation is an agent-native, hierarchical DAW built around transparent JSON projects, immutable audio assets, recursive compositions, and ordered first-party processing stacks.

Audio-to-MIDI transcription

GAW can convert a materialized audio asset into editable MIDI event data with Spotify Basic Pitch. Install the Basic Pitch CLI in the environment used to launch GAW:

uv tool install --python 3.11 --with 'setuptools<81' basic-pitch==0.4.0

The setuptools pin works around Basic Pitch 0.4.0's use of the deprecated pkg_resources API.

Right-click an audio asset and choose CONVERT TO MIDI. GAW runs transcription in the background and adds <source> (MIDI) to the Assets sidebar without changing the source audio. If the executable is not on PATH, set GAW_BASIC_PITCH to its path before launching GAW.

Drag the resulting MIDI asset onto an event track to create a piano-roll clip. Dropping it elsewhere creates a new event track with an empty sampler, ready for you to assign sounds. To export the canonical notes as a Standard MIDI File, use gaw midi-export <project> <event-data-id> <destination.mid>; the stable ID is shown in the asset inspector.

Basic Pitch's CSV represents pitch bends per detected note, while GAW's canonical event stream uses one track-wide bend lane. GAW currently imports note pitch, timing, and velocity and omits those per-note bends rather than merging overlapping bends incorrectly.

X-LANCE stem splitting

GAW can split a materialized audio asset into the eight targets provided by X-LANCE MSR: vocals, guitars, keyboards, bass, synthesizers, drums, percussions, and orchestral elements. Select an audio asset and choose STEM SPLITTER… in its inspector or context menu. The generated assets are added atomically under SPLIT - <original file name> and retain immutable, content-addressed WAV storage.

The bundled integration currently supports Linux with an NVIDIA CUDA GPU; upstream documents inference on an RTX 4090. Create a dedicated Python 3.12 environment before launching GAW:

uv venv --python 3.12 .venv-xlance
uv pip install --python .venv-xlance/bin/python \
  -r scripts/xlance-requirements-linux.lock
GAW_XLANCE_PYTHON="$PWD/.venv-xlance/bin/python" cargo run -p gaw-app -- ./projects/my-song

The bundled adapter pins the upstream code and checkpoint revisions. On the first split it clones the pinned X-LANCE source and downloads only the selected checkpoints from the official checkpoint repository. A complete eight-stem setup uses about 4.3 GB of model weights. Set GAW_XLANCE_CACHE to relocate the cache, GAW_XLANCE_REPO to use an existing checkout, or GAW_XLANCE to replace the bundled adapter with a compatible executable. Long recordings use a project-local staging area under .gaw/xlance; set GAW_XLANCE_TIMEOUT_HOURS to change the default six-hour job limit.

The product source of truth is design.md.

Workspace

  • gaw-core: canonical domain model, IDs, time, commands, and validation
  • gaw-project: project storage, media import, recovery journal, and derived cache
  • gaw-dsp: instruments, effects, analyzers, and render-safe processor contracts
  • gaw-stretch: safe single-owner Signalsmith Stretch backend
  • gaw-audio: render graph, transport, scheduling, device I/O, and background rendering
  • gaw-app: native egui application
  • gaw-cli: structured agent and developer command-line interface

Development

cargo test --workspace
cargo run -p gaw-cli -- --help

Agent usage

Before constructing an edit, inspect the machine-readable Draft 2020-12 schemas:

gaw schema transaction
gaw schema processor

Processor-bearing schemas include a top-level x-gaw-processor-catalog extension. It is the authoritative catalog for defaults, exact numeric and unit-specific bounds, array limits, enum choices, automation support, indexed band/step paths, and cross-field constraints to satisfy before gaw apply.

Create and open a persistent project:

cargo run -p gaw-cli -- create ./projects/my-song --name "My Song" --bpm 120 --sample-rate 48000
cargo run -p gaw-app -- ./projects/my-song

The app recovers a pending crash journal by default. Recovery can also be inspected or replayed explicitly before startup, and startup can instead discard or reject pending recovery:

cargo run -p gaw-cli -- recover ./projects/my-song --dry-run
cargo run -p gaw-cli -- recover ./projects/my-song
cargo run -p gaw-app -- ./projects/my-song --recovery recover
cargo run -p gaw-app -- ./projects/my-song --recovery discard
cargo run -p gaw-app -- ./projects/my-song --recovery abort

Run the bundled non-persistent UI fixture with:

cargo run -p gaw-app -- --demo