Skip to content

Latest commit

 

History

124 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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. It prefers an NVIDIA CUDA GPU, uses a dedicated AMD ROCm runtime for gfx1010 cards such as the Radeon RX 5700 XT, and otherwise falls back to CPU inference. CPU output uses the same model weights but can take roughly 40–50 minutes for all eight stems from a 100-second clip on a Ryzen 7 3700X. On the first stem split, GAW uses uv to create a pinned Python 3.12 runtime in its own application-data directory and reuses it across projects. Install uv once, or set GAW_UV to its executable; no project-specific Python environment is needed. The initial setup downloads several gigabytes and is shown as INSTALLING X-LANCE… in the asset sidebar.

The bundled adapter and hashed dependency lock pin the upstream code, Python packages, 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_PYTHON to use an existing Python environment, GAW_XLANCE_RUNTIME_ROOT to relocate the managed runtime, or GAW_XLANCE_TIMEOUT_HOURS to change the default six-hour job limit. Set GAW_XLANCE_DEVICE to cpu, cuda, or rocm to override automatic selection, and GAW_XLANCE_CPU_THREADS to tune CPU inference concurrency.

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

About

Gabe's Audio Workstation — a DAW from my dreams

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages