diff --git a/BACKLOG.md b/BACKLOG.md
index 7c07ba75..470d5fb0 100644
--- a/BACKLOG.md
+++ b/BACKLOG.md
@@ -4,7 +4,7 @@ Source: `active/sonic-architect-app` (keep in `active/` as reference). Most of t
## Shipped — Data
- ✅ `data/genreProfiles.ts` — 35 EDM genre spectral targets, LUFS/crest factor/PLR ranges. **Landed:** [`apps/ui/src/data/genreProfiles.ts`](apps/ui/src/data/genreProfiles.ts).
-- ✅ `data/abletonDevices.ts` — 14 spectral-band → Ableton Live 12 device mappings + FX rule engine. **Landed:** [`apps/ui/src/data/abletonDevices.ts`](apps/ui/src/data/abletonDevices.ts).
+- ✅ `data/abletonDevices.ts` — 14 spectral-band → Ableton Live 12 device mappings + FX rule engine. **Landed:** [`apps/ui/src/data/abletonDevices.ts`](apps/ui/src/data/abletonDevices.ts). *Ported but demoted to a research-only scoring baseline (owner decision 2026-06-11): imported by no product code, consumed only by the recommendation-eval bridge. See the NEEDS-WIRING decision in [`apps/backend/NEEDS.md`](apps/backend/NEEDS.md).*
## Shipped — Mix Analysis
- ✅ `services/mixDoctor.ts` + `components/MixDoctorPanel.tsx` — spectral-balance scoring against genre profiles. **Landed:** [`apps/ui/src/services/mixDoctor.ts`](apps/ui/src/services/mixDoctor.ts), [`apps/ui/src/components/MixDoctorPanel.tsx`](apps/ui/src/components/MixDoctorPanel.tsx).
diff --git a/CLAUDE.md b/CLAUDE.md
index bfac519d..63487f41 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -378,7 +378,7 @@ ASA_MOSS_MODEL_ID="" # optional MOSS model id forwarded to t
ASA_MOSS_SIDECAR_MODE="mock" # sidecar-side (its own venv): `mock` (default, deterministic schema-valid Phase-1-grounded output) or `model` (a 501 licence-gated stub that executes no OpenMOSS code).
ASA_CLAUDE_CLI="claude" # path to the Claude Code CLI binary used when ASA_PHASE2_PROVIDER=claude; defaults to `claude` on PATH.
ASA_CLAUDE_MODEL="" # optional model override for the claude provider (e.g. `sonnet`); empty = the CLI's default model. The subprocess runs sandboxed: --safe-mode, --tools "", --no-session-persistence, schema enforced via --json-schema.
-ASA_CLAUDE_TIMEOUT_SECONDS="600" # per-call timeout for the claude provider subprocess (a full producer_summary prompt on the CLI default model measures ~6 min).
+ASA_CLAUDE_TIMEOUT_SECONDS="600" # per-call timeout for the claude provider subprocess (a full producer_summary prompt on the CLI default model measures ~6 min). For headless runs also set MAX_THINKING_TOKENS=0 — a thinking-enabled model can spend the entire budget deliberating before the structured output starts (see docs/PHASE2_PROVIDER.md, 2026-06-11 addendum).
```
Phase 2 is gated by `VITE_ENABLE_PHASE2_GEMINI`. `GEMINI_API_KEY` is backend-only. `SONIC_ANALYZER_ADMIN_KEY` is backend-only and never exposed to clients.
@@ -400,7 +400,7 @@ Things that look like normal code changes but silently break the contract. Most
1. **`print(...)` in [analyze.py](apps/backend/analyze.py) without `file=sys.stderr`.** Stdout is the JSON contract. Any stray print corrupts it and the server reports a parse error with no useful trace. The existing code is consistent about this — match the pattern (`print(f"[warn] ...", file=sys.stderr)`).
2. **Calling `analyze.py` as a subprocess without `--yes`.** The CLI prompts for confirmation when stdin is a TTY. Subprocess invocations must pass `--yes` or hang waiting for input. `server.py` already does; new callers must too.
-3. **Renaming a field on only one side.** Python emits *camelCase* JSON directly (`bpmConfidence`, not `bpm_confidence`) — there is no conversion layer. A rename in [analyze.py](apps/backend/analyze.py) without a matching update in [src/types.ts](apps/ui/src/types.ts) is undetectable by either type system; the field just disappears from the UI.
+3. **Renaming a field on only one side.** Python emits *camelCase* JSON directly (`bpmConfidence`, not `bpm_confidence`) — there is no conversion layer. A rename in [analyze.py](apps/backend/analyze.py) without a matching update in [src/types.ts](apps/ui/src/types.ts) is undetectable by either type system; the field just disappears from the UI. A subtler variant: the ~12 `parseOptional*` reconstructors in [src/services/backendPhase1Client.ts](apps/ui/src/services/backendPhase1Client.ts) rebuild their block field-by-field, so a backend field one of them forgets to forward is *silently dropped* — and if Phase 2 cites it, the citation fails the existence check (this bit `reverbDetail.preDelayMs` + the vocal stem proxies). The executable guard is [tests/services/phase1CitationContract.test.ts](apps/ui/tests/services/phase1CitationContract.test.ts): it parses a comprehensive payload and asserts every citable path survives `collectPhase1FieldPaths`. Add a new citable field to both its fixture and its `CITABLE_DETAIL_PATHS` list.
4. **Adding a top-level key without updating `EXPECTED_TOP_LEVEL_KEYS`.** [tests/test_analyze.py](apps/backend/tests/test_analyze.py) holds a snapshot of every root key. New fields require updating that set *and* [JSON_SCHEMA.md](apps/backend/JSON_SCHEMA.md). The same test enforces that `--fast` only populates `FAST_MODE_POPULATED_FIELDS`. A change to *measured values* (not just keys) can also trip the golden-snapshot regression gate in [tests/test_phase1_golden.py](apps/backend/tests/test_phase1_golden.py) (fixture `tests/fixtures/golden/phase1_default.json`) — re-baseline it deliberately, never blindly (from `apps/backend/`): `UPDATE_PHASE1_GOLDEN=1 ./venv/bin/python -m unittest tests.test_phase1_golden`
5. **Using `document` or `window` in `tests/services/`.** Vitest runs in `node`, not `jsdom`. Service-layer tests are pure logic; if you need DOM, it's a Playwright test in `tests/smoke/` instead.
6. **Hard-coding `Path(...)` for artifacts in new code.** Artifact access must go through [artifact_storage.py](apps/backend/artifact_storage.py). Direct paths work in `local` profile and break silently in `hosted`.
@@ -440,7 +440,7 @@ A quick map from intent to the right place to start:
## Backport Candidates
-The full original `sonic-architect-app` backlog is **shipped** — genre profiles, Ableton device mappings, mix doctor, eight detectors, Phase 3 audition-sample generation, and `patchSmith.ts` (Phase 3 Vital preset generation, [`apps/ui/src/services/patchSmith.ts`](apps/ui/src/services/patchSmith.ts)). See [`BACKLOG.md`](BACKLOG.md) for the landed inventory. Consult it before re-implementing genre detection, mix analysis, acid/reverb/vocal/supersaw/bass/kick detection — they're already in [`apps/backend/analyze_detection.py`](apps/backend/analyze_detection.py) and emit fields visible in `EXPECTED_TOP_LEVEL_KEYS`.
+The full original `sonic-architect-app` backlog is **shipped** — genre profiles, Ableton device mappings (`abletonDevices.ts` — ported but **research-only** since the 2026-06-11 demotion decision: a scoring baseline for the recommendation-proof harness, imported by no product code; see the NEEDS-WIRING decision in `apps/backend/NEEDS.md`), mix doctor, eight detectors, Phase 3 audition-sample generation, and `patchSmith.ts` (Phase 3 Vital preset generation, [`apps/ui/src/services/patchSmith.ts`](apps/ui/src/services/patchSmith.ts)). See [`BACKLOG.md`](BACKLOG.md) for the landed inventory. Consult it before re-implementing genre detection, mix analysis, acid/reverb/vocal/supersaw/bass/kick detection — they're already in [`apps/backend/analyze_detection.py`](apps/backend/analyze_detection.py) and emit fields visible in `EXPECTED_TOP_LEVEL_KEYS`.
## Companion Agent Docs
diff --git a/apps/backend/NEEDS.md b/apps/backend/NEEDS.md
index de91b4e0..b5a8b89a 100644
--- a/apps/backend/NEEDS.md
+++ b/apps/backend/NEEDS.md
@@ -85,8 +85,9 @@ citations**, so the chain-of-custody penalty drives its adjusted aggregate to
#2). The rules **are** feature-triggered, so attaching the triggering measurement
as a citation is a concrete, harness-rewarded improvement — a candidate
sub-goal-3 "score-driven change" (frontend edit to `abletonDevices.ts` →
- `npm run verify`). But see the dead-code finding under NEEDS-WIRING before
- investing in this path.
+ `npm run verify`). Moot since 2026-06-11: the NEEDS-WIRING decision below
+ demoted `abletonDevices.ts` to a research-only baseline, so this candidate is
+ no longer a *product* improvement path.
This is the first real signal toward the Gemini verdict — likely Gemini earns its
place on citation + full-surface coverage. Confirm on real renders; the synthetic
@@ -169,22 +170,23 @@ factor, onset density) is the app's own projection (`analyzer.ts`); reuse it rat
than re-deriving, and only then is the deterministic score a real verdict input
rather than the synthetic illustration above.
-**FINDING — the deterministic source is currently dead code (affects sub-goal 3
-framing).** `apps/ui/src/data/abletonDevices.ts` is imported **nowhere** in the UI
-(no component, no test) — verified by grep. ASA's product recommendations come
-entirely from Gemini (`Phase2Result`); the deterministic engine is unwired,
-ported-but-unused. Consequence: a "score-driven improvement" to `abletonDevices.ts`
-(e.g. the citation-emit fix flagged above) would **not reach any user** — it would
-raise a harness number for code nobody runs, which is harness-gaming, not a product
-improvement (PURPOSE.md decision #5). So before sub-goal 3 treats the deterministic
-path as a real recommendation source, decide one of:
-1. **Wire `abletonDevices.ts` into the product** (so its recs — and any citation
- improvement — actually reach users), then score + improve it; or
-2. **Treat it as a research-only baseline** in the three-source comparison (score
- it, but land score-driven *product* improvements on the **Gemini** path
- instead — which needs the `chore/...` branch + renders).
-This is the honest reason no score-driven improvement was "landed" this session:
-the only render-free candidate would have improved dead code.
+**FINDING — the deterministic source is dead code on the product path. ✅ DECIDED
+2026-06-11: demoted to research-only baseline (option 2).**
+`apps/ui/src/data/abletonDevices.ts` is imported **nowhere** in the UI (no
+component, no test) — verified by grep. ASA's product recommendations come
+entirely from the Phase 2 providers (`Phase2Result`); the deterministic engine is
+unwired, ported-but-unused. Consequence: a "score-driven improvement" to
+`abletonDevices.ts` (e.g. the citation-emit fix flagged above) would **not reach
+any user** — it would raise a harness number for code nobody runs, which is
+harness-gaming, not a product improvement (PURPOSE.md decision #5). The owner
+resolved the wire-or-demote choice: **demote**. Standing consequences:
+1. The module stays where it is as the scored free baseline in the three-source
+ comparison (its file header now records the status); it is **not** to be
+ wired into the product.
+2. Score-driven *product* improvements land on the **Phase 2 provider** path
+ instead. The citation-emit candidate above is off the table as a product
+ change (it remains a legitimate baseline-fairness tweak if the comparison
+ ever needs it).
---
@@ -201,8 +203,19 @@ known-settings axes (role recall / value accuracy) — those need rendered fixtu
so the *complete* "does Gemini recover the actual settings?" verdict remains
render-gated.
-Mechanism is in place: `--source baseline|gemini|deterministic` on the same
-corpus. To deliver the **full** verdict:
+**Claude provider scored on the proxy corpus — 2026-06-11, zero Gemini cost.**
+The `--source claude` harness path plus `scripts/gen_claude_phase2.py` generated
+and scored fully-cited, zero-warning recommendations on the three
+proxy-fingerprint fixtures: **acid 0.485, house 0.424, melodic_techno 0.424**
+vs recorded Gemini 0.172 / 0.343 / 0.000 on identical fingerprints (text-only
+vs audio+JSON — full table and caveats in `RECOMMENDATION_VERDICT.md`). The
+melodic_techno "Gemini 0 recs" outlier is resolved as Gemini-side: Claude
+produced 13 cards from the same fingerprint. Evidence committed as
+`phase2.claude.json` in each fixture dir. Real-render re-runs remain the
+authoritative step for both providers.
+
+Mechanism is in place: `--source baseline|gemini|claude|deterministic` on the
+same corpus. To deliver the **full** verdict:
1. Render the fixtures (NEEDS-FIXTURE #1–2).
2. Wire the deterministic adapter (NEEDS-WIRING).
3. For each fixture, produce a live Gemini `phase2.json` (needs `GEMINI_API_KEY`;
diff --git a/apps/backend/RECOMMENDATION_VERDICT.md b/apps/backend/RECOMMENDATION_VERDICT.md
index 2587bc9d..e4ac8dc4 100644
--- a/apps/backend/RECOMMENDATION_VERDICT.md
+++ b/apps/backend/RECOMMENDATION_VERDICT.md
@@ -80,12 +80,65 @@ recs cited and path-valid** against the real fingerprint (custody 1.000), full-s
coverage. Consistent with the corpus verdict — Gemini's custody advantage is real,
not a synthesis artifact.
+## Claude provider head-to-head (2026-06-11 — same proxy corpus, zero Gemini cost)
+
+The selectable Claude provider (`ASA_PHASE2_PROVIDER=claude`,
+`phase2_provider.ClaudeCliProvider`) was scored on the three fixtures whose proxy
+fingerprints survived the 2026-06-10 corpus re-authoring, via the exact server
+path (`server._run_interpretation_request`) and the same scorer. Generation:
+`scripts/gen_claude_phase2.py`; scoring: `--source claude` (reads the committed
+`phase2.claude.json` evidence in each fixture dir). Model `sonnet`
+(claude-sonnet-4-6), **text-only** (grounds purely on the embedded Phase 1 JSON,
+no audio), `MAX_THINKING_TOKENS=0`, 300–365 s per fixture.
+
+| Fixture | Claude | Gemini (recorded above) |
+|---|---|---|
+| acid_303_128 | **0.485** | 0.172 |
+| house_sidechain_pluck_124 | **0.424** | 0.343 |
+| melodic_techno_arp_124 | **0.424** | 0.000 (zero cards) |
+| **Mean (shared subset)** | **0.444** | 0.172 |
+
+All three Claude results are fully cited (custody penalty 1.000) with **zero**
+`validationWarnings` — both the citation-path check and the Live 12 catalogue
+gates came back clean.
+
+Findings:
+1. **The melodic_techno outlier was Gemini-side, not fixture-side.** From the
+ identical fingerprint where Gemini returned 0 structured cards, Claude
+ produced 13 rec cards + 14 chain cards + 5 workflow steps (32 envelope
+ entries) and scored 0.424. The fixture's fingerprint is interpretable.
+2. **Kick role recall 1.00 on all three** (the recorded gemini/deterministic
+ table above shows kick 0.00/0.00): Claude's kick cards name `Operator`,
+ matching the specs' source synth. Whether genuine inference or
+ electronic-genre convention, it softens the "source instrument is
+ unrecoverable from audio" ceiling — notably, Claude never heard any audio.
+3. The groove/fx/stereo zeros persist for Claude too (cards exist — `Drum Buss`
+ groove cards, a `Hybrid Reverb` that lands in `unknown` domain — but miss
+ the spec devices), consistent with the domain-attribution limitation in
+ `NEEDS.md`. Provider-agnostic and scorer-consistent.
+
+Caveats, honestly: the SYNTHETIC-PROXY warning at the top applies in full. The
+comparison is like-for-like on *inputs* (identical fingerprints, same scorer)
+but not on *modality*: Gemini received the unrepresentative proxy audio
+alongside the Phase 1 JSON, while Claude's text-only grounding may have
+shielded it from proxy-audio artifacts. Model classes also differ (sonnet vs
+gemini-2.5-flash). Re-run both on real renders before treating this as a
+provider verdict. What it does establish: the zero-Gemini-cost route produces
+fully-cited, catalogue-clean, schema-valid recommendations at
+competitive-or-better measured quality on every fixture it has seen.
+
## Where real input is needed (retroactive)
1. **Real Ableton renders** of the 5 specs (48 kHz/24-bit) replace the proxies →
makes the known-settings axes (role recall, value accuracy) authoritative. The
proxies have artifacts: dnb BPM read half-time (174→116), `acidDetail` fires on
all (synth is saw-heavy), melodic_techno key mis-detected.
2. **`melodic_techno_arp_124` Gemini 0 recs** — investigate the parse/shape outlier
- on a real render before trusting that fixture's contribution.
+ on a real render before trusting that fixture's contribution. *(Partially
+ resolved 2026-06-11: Claude produced a full 13-card result from the same
+ fingerprint — see the head-to-head section above — so the outlier is
+ Gemini-side, not fixture-side. Still verify Gemini on a real render.)*
3. The deterministic `AudioFeatures` projection is approximate (not the app's
- `analyzer.ts`); reconcile when wiring the deterministic path for real.
+ `analyzer.ts`). The wire-or-demote question was resolved 2026-06-11: the
+ deterministic engine is a research-only baseline and will not be wired into
+ the product (see `NEEDS.md`), so reconciling the projection matters only for
+ baseline fairness in this comparison, not for any product path.
diff --git a/apps/backend/scripts/emit_deterministic_recs.ts b/apps/backend/scripts/emit_deterministic_recs.ts
index f295db0c..141868b9 100644
--- a/apps/backend/scripts/emit_deterministic_recs.ts
+++ b/apps/backend/scripts/emit_deterministic_recs.ts
@@ -1,8 +1,10 @@
/**
* Deterministic recommendation source bridge (GOAL.md sub-goal 3 inner loop).
*
- * EVAL / RESEARCH ONLY. Wraps the product's deterministic recommendation engine
- * (`apps/ui/src/data/abletonDevices.ts`) and emits the scorer's normalized rec
+ * EVAL / RESEARCH ONLY. Wraps the deterministic recommendation engine
+ * (`apps/ui/src/data/abletonDevices.ts` — itself research-only since the
+ * 2026-06-11 demotion decision; see apps/backend/NEEDS.md) and emits the
+ * scorer's normalized rec
* shape so `scripts/evaluate_recommendations.py --source deterministic` can grade
* the *free* path without a Gemini call. Importing the real module keeps a single
* source of truth — no Python re-port to drift from the TS.
diff --git a/apps/backend/scripts/evaluate_recommendations.py b/apps/backend/scripts/evaluate_recommendations.py
index de09bd24..b6f534e9 100644
--- a/apps/backend/scripts/evaluate_recommendations.py
+++ b/apps/backend/scripts/evaluate_recommendations.py
@@ -9,7 +9,7 @@
catalog-valid (the always-runnable half of ingest), pulls recommendations from a
chosen **source**, and scores how well they recover the known device settings.
-The ``--source`` switch is the mechanism sub-goal 3 needs to compare three
+The ``--source`` switch is the mechanism sub-goal 3 needs to compare
recommendation sources on the same corpus:
* ``baseline`` — trivial no-op source (empty rec set). Runs now, no deps.
@@ -20,6 +20,12 @@
``GET /api/analysis-runs/{run_id}/export/phase2`` works.
Producing it live needs GEMINI_API_KEY + rendered audio
(needs-fixture).
+ * ``claude`` — score a stored ``Phase2Result`` JSON from the Claude CLI
+ provider (``--phase2`` or a sibling ``phase2.claude.json``
+ in the fixture dir). Produce it at zero Gemini cost with
+ ``scripts/gen_claude_phase2.py`` (text-only, grounds on the
+ stored Phase 1 fingerprint; needs a logged-in Claude Code
+ CLI, no API key).
* ``deterministic`` — score the ``abletonDevices.ts`` path. Wiring the node
bridge that emits normalized recs from a real Phase 1
fingerprint is a documented follow-on (NEEDS.md); until
@@ -82,13 +88,17 @@ def _resolve_recs(
if source == "baseline":
return rev.normalize_baseline(fixture), "trivial baseline (empty)"
- if source == "gemini":
+ if source in ("gemini", "claude"):
+ sibling_name = "phase2.json" if source == "gemini" else "phase2.claude.json"
candidate = phase2_path
if candidate is None and fixture.source_path is not None:
- sibling = fixture.source_path.parent / "phase2.json"
+ sibling = fixture.source_path.parent / sibling_name
candidate = sibling if sibling.exists() else None
if candidate is None or not candidate.exists():
- return None, "no Phase2Result JSON (pass --phase2 or drop phase2.json in the fixture dir)"
+ return None, (
+ f"no Phase2Result JSON (pass --phase2 or drop {sibling_name} "
+ "in the fixture dir)"
+ )
phase2 = rev.coerce_phase2_payload(
json.loads(candidate.read_text(encoding="utf-8"))
)
@@ -162,11 +172,12 @@ def run_self_test() -> int:
def main() -> int:
parser = argparse.ArgumentParser(description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
- parser.add_argument("--source", choices=["baseline", "gemini", "deterministic"],
+ parser.add_argument("--source", choices=["baseline", "gemini", "claude", "deterministic"],
default="baseline", help="recommendation source to score")
parser.add_argument("--fixture", help="limit to one fixture slug")
parser.add_argument("--corpus-dir", type=Path, default=DEFAULT_CORPUS_DIR)
- parser.add_argument("--phase2", type=Path, help="Phase2Result JSON for --source gemini")
+ parser.add_argument("--phase2", type=Path,
+ help="Phase2Result JSON for --source gemini/claude")
parser.add_argument("--recommendations", type=Path,
help="pre-normalized rec list JSON (overrides --source resolution)")
parser.add_argument("--report", type=Path, help="write a markdown report to this path")
diff --git a/apps/backend/scripts/gen_claude_phase2.py b/apps/backend/scripts/gen_claude_phase2.py
new file mode 100644
index 00000000..b0ddd263
--- /dev/null
+++ b/apps/backend/scripts/gen_claude_phase2.py
@@ -0,0 +1,136 @@
+#!/usr/bin/env python3
+"""Generate Claude-provider Phase 2 recommendations for the ground-truth corpus.
+
+EVAL / RESEARCH ONLY (mirrors scripts/evaluate_*.py). Off the product path;
+deleting this restores the product exactly.
+
+For each fixture under ``tests/fixtures/recommendation_tracks/`` that has a
+stored ``phase1_fingerprint.json``, this runs the producer_summary interpretation
+through the EXACT server path (``server._run_interpretation_request``) with
+``ASA_PHASE2_PROVIDER=claude`` — the text-only Claude Code CLI provider — and
+writes the fully validated ``Phase2Result`` (including ``validationWarnings``
+and the ``recommendations.v1`` envelope) to ``phase2.claude.json`` in the
+fixture dir, where ``evaluate_recommendations.py --source claude`` picks it up.
+
+Zero Gemini cost: the Claude provider grounds entirely on the prompt's embedded
+Phase 1 JSON and never receives audio, so missing renders are fine — this is
+what makes a provider comparison possible on the pre-render corpus. Needs a
+logged-in Claude Code CLI (``ASA_CLAUDE_CLI``/``ASA_CLAUDE_MODEL``/
+``ASA_CLAUDE_TIMEOUT_SECONDS`` are honored as usual). Expect ~6 minutes per
+fixture on the CLI default model.
+
+Examples:
+ ./venv/bin/python scripts/gen_claude_phase2.py --fixture acid_303_128
+ ./venv/bin/python scripts/gen_claude_phase2.py # all fingerprinted fixtures
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+import os
+import sys
+import time
+from pathlib import Path
+
+BACKEND_DIR = Path(__file__).resolve().parent.parent
+if str(BACKEND_DIR) not in sys.path:
+ sys.path.insert(0, str(BACKEND_DIR))
+
+# The provider seam resolves at call time, but set it before importing server so
+# a partially-imported Gemini path can never be selected by mistake.
+os.environ["ASA_PHASE2_PROVIDER"] = "claude"
+# Headless-run defaults learned from the 2026-06-11 scoring run (overridable):
+# a thinking-enabled model spends the whole timeout deliberating before the
+# structured output starts, and the provider's 600s default assumes no thinking.
+# With thinking off, sonnet measured 300-365s per fixture.
+os.environ.setdefault("MAX_THINKING_TOKENS", "0")
+os.environ.setdefault("ASA_CLAUDE_TIMEOUT_SECONDS", "1800")
+
+import server # noqa: E402 (path bootstrap + env above)
+
+DEFAULT_CORPUS_DIR = BACKEND_DIR / "tests" / "fixtures" / "recommendation_tracks"
+OUTPUT_NAME = "phase2.claude.json"
+
+
+def _card_counts(result: dict) -> str:
+ recs = result.get("abletonRecommendations") or []
+ chain = result.get("mixAndMasterChain") or []
+ secret = (result.get("secretSauce") or {}).get("workflowSteps") or []
+ warnings = result.get("validationWarnings") or []
+ envelope = (result.get("recommendations") or {}).get("recommendations") or []
+ return (
+ f"{len(recs)} rec cards, {len(chain)} chain cards, {len(secret)} workflow steps, "
+ f"{len(envelope)} envelope entries, {len(warnings)} validation warnings"
+ )
+
+
+def generate_for_fixture(fixture_dir: Path) -> bool:
+ slug = fixture_dir.name
+ fingerprint_path = fixture_dir / "phase1_fingerprint.json"
+ if not fingerprint_path.exists():
+ print(f"[skip] {slug}: no phase1_fingerprint.json (spec-only fixture)")
+ return True
+ fingerprint = json.loads(fingerprint_path.read_text(encoding="utf-8"))
+
+ audio_path = fixture_dir / "audio.flac"
+ file_size = audio_path.stat().st_size if audio_path.exists() else 0
+
+ model_label = os.getenv("ASA_CLAUDE_MODEL", "").strip() or "(CLI default)"
+ print(f"[run] {slug}: claude provider, model {model_label} ...", flush=True)
+ started = time.monotonic()
+ execution = server._run_interpretation_request(
+ source_path=str(audio_path),
+ filename="audio.flac",
+ file_size_bytes=file_size,
+ profile_id="producer_summary",
+ measurement_result=fingerprint,
+ pitch_note_result=None,
+ grounding_metadata={"profileId": "producer_summary"},
+ model_name="claude-cli",
+ request_id=f"claude-rec-eval-{slug}",
+ )
+ elapsed = time.monotonic() - started
+
+ if not execution.get("ok"):
+ print(
+ f"[FAIL] {slug}: {execution.get('errorCode')}: {execution.get('message')} "
+ f"({elapsed:.0f}s)"
+ )
+ return False
+ result = execution.get("interpretationResult")
+ if not isinstance(result, dict):
+ print(f"[FAIL] {slug}: provider returned no interpretation result ({elapsed:.0f}s)")
+ return False
+
+ out_path = fixture_dir / OUTPUT_NAME
+ out_path.write_text(json.dumps(result, indent=2) + "\n", encoding="utf-8")
+ print(f"[OK] {slug}: {_card_counts(result)} -> {out_path.name} ({elapsed:.0f}s)")
+ return True
+
+
+def main() -> int:
+ parser = argparse.ArgumentParser(description=__doc__,
+ formatter_class=argparse.RawDescriptionHelpFormatter)
+ parser.add_argument("--fixture", help="limit to one fixture slug")
+ parser.add_argument("--corpus-dir", type=Path, default=DEFAULT_CORPUS_DIR)
+ args = parser.parse_args()
+
+ fixture_dirs = sorted(
+ path.parent for path in args.corpus_dir.glob("*/manifest.json")
+ if not path.parent.name.startswith("_")
+ )
+ if args.fixture:
+ fixture_dirs = [d for d in fixture_dirs if d.name == args.fixture]
+ if not fixture_dirs:
+ print(f"no fixture named {args.fixture!r} under {args.corpus_dir}")
+ return 2
+
+ ok = True
+ for fixture_dir in fixture_dirs:
+ ok = generate_for_fixture(fixture_dir) and ok
+ return 0 if ok else 1
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())
diff --git a/apps/backend/tests/fixtures/recommendation_tracks/acid_303_128/phase2.claude.json b/apps/backend/tests/fixtures/recommendation_tracks/acid_303_128/phase2.claude.json
new file mode 100644
index 00000000..8f0c2fcf
--- /dev/null
+++ b/apps/backend/tests/fixtures/recommendation_tracks/acid_303_128/phase2.claude.json
@@ -0,0 +1,1226 @@
+{
+ "trackCharacter": "A 128.1 BPM monophonic acid-techno loop in A Minor featuring a confirmed supersaw layer (7 voices, 28.5-cent average detune) layered over a distorted high-tuned kick at 96 Hz and a punchy bass with 171 ms decay. The integrated loudness sits at -9.2 LUFS with a near-zero LRA of 0.1 LU, indicating heavy brick-wall limiting \u2014 the true peak measures 1.0 dBTP (an inter-sample over that must be corrected). The entire mix is pure mono (stereoWidth 0.0, correlation 1.0 across all bands), and the acid filter character is strong: isAcid confidence 0.69, resonanceLevel at maximum, centroid oscillating at 36 Hz. The odd-to-even harmonic ratio of 3.75 confirms dominant square/pulse synthesis character throughout.",
+ "projectSetup": {
+ "tempoBpm": 128.1,
+ "timeSignature": "4/4",
+ "sampleRate": 44100,
+ "bitDepth": 24,
+ "headroomTarget": "-18 dBFS peaks pre-master, targeting -14 LUFS short-term during mix to give headroom for the limiter chain",
+ "sessionGoal": "Rebuild a heavily-limited, pure-mono acid-techno loop with supersaw and distorted kick, then correct the measured 1.0 dBTP true-peak over before export."
+ },
+ "trackLayout": [
+ {
+ "order": 1,
+ "name": "Kick",
+ "type": "MIDI",
+ "purpose": "Distorted 96 Hz kick with high THD \u2014 synthesize via Operator with a sine-to-noise transient or drive through Saturator post-oscillator; isDistorted true confirms pre-existing clip character.",
+ "grounding": {
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.isDistorted",
+ "kickDetail.thd",
+ "kickDetail.kickCount"
+ ],
+ "segmentIndexes": [
+ 0
+ ]
+ }
+ },
+ {
+ "order": 2,
+ "name": "Acid Bass",
+ "type": "MIDI",
+ "purpose": "Punchy 113 Hz bass with maximum-resonance acid squelch (resonanceLevel 1.0, centroidOscillationHz 36) driven by Auto Filter modulation \u2014 the primary acid movement generator.",
+ "grounding": {
+ "phase1Fields": [
+ "acidDetail.isAcid",
+ "acidDetail.resonanceLevel",
+ "acidDetail.centroidOscillationHz",
+ "bassDetail.fundamentalHz",
+ "bassDetail.averageDecayMs"
+ ],
+ "segmentIndexes": [
+ 0
+ ]
+ }
+ },
+ {
+ "order": 3,
+ "name": "Supersaw Pad",
+ "type": "MIDI",
+ "purpose": "7-voice supersaw layer with 28.5-cent average detune per measured supersawDetail \u2014 provides mid-range harmonic density and the dominant synthesis texture.",
+ "grounding": {
+ "phase1Fields": [
+ "supersawDetail.isSupersaw",
+ "supersawDetail.voiceCount",
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.spectralComplexity"
+ ],
+ "segmentIndexes": [
+ 0
+ ]
+ }
+ },
+ {
+ "order": 4,
+ "name": "Drum Bus",
+ "type": "AUDIO",
+ "purpose": "Group bus for Kick plus any percussion \u2014 apply Drum Buss Boom at 96 Hz and light Drive to unify distorted kick character measured at THD 0.35.",
+ "grounding": {
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.thd",
+ "kickDetail.harmonicRatio"
+ ],
+ "segmentIndexes": [
+ 0
+ ]
+ }
+ },
+ {
+ "order": 5,
+ "name": "Synth Bus",
+ "type": "AUDIO",
+ "purpose": "Group bus for Acid Bass and Supersaw Pad \u2014 apply width via Utility Stereo Width since the full mix measures stereoWidth 0.0 and requires stereo expansion at the synth layer.",
+ "grounding": {
+ "phase1Fields": [
+ "stereoDetail.stereoWidth",
+ "stereoDetail.stereoCorrelation",
+ "supersawDetail.isSupersaw"
+ ],
+ "segmentIndexes": [
+ 0
+ ]
+ }
+ },
+ {
+ "order": 6,
+ "name": "Master",
+ "type": "AUDIO",
+ "purpose": "Final limiter chain correcting the measured 1.0 dBTP true-peak inter-sample over; target ceiling -0.3 dBTP with True Peak enabled.",
+ "grounding": {
+ "phase1Fields": [
+ "truePeak",
+ "lufsIntegrated",
+ "plr",
+ "saturationDetail.clippedSampleCount"
+ ],
+ "segmentIndexes": [
+ 0
+ ]
+ }
+ }
+ ],
+ "routingBlueprint": {
+ "sidechainSource": "",
+ "sidechainTargets": [],
+ "returns": [
+ {
+ "name": "Space Reverb",
+ "purpose": "Short algorithmic room reverb return justified by the measured completely dry source (reverbDetail.isWet false, rt60 null) \u2014 adding even a small room return on the Kick and Acid Bass will give the flat, pure-mono loop a sense of physical space without washing it out.",
+ "sendSources": [
+ "Kick",
+ "Acid Bass",
+ "Supersaw Pad"
+ ],
+ "deviceFocus": "Hybrid Reverb with small Room Size, Predelay 0 ms (source is dry \u2014 no predelay present to match), Dry/Wet 100% on the return",
+ "levelGuidance": "Send Kick at -18 dB, Acid Bass at -24 dB, Supersaw Pad at -20 dB to keep the tail below the dense mid-band energy"
+ },
+ {
+ "name": "Stereo Width",
+ "purpose": "Dedicated stereo-widening utility return justified by the measured pure-mono mix (stereoWidth 0.0, stereoCorrelation 1.0) \u2014 routing the supersaw through a chorus-ensemble or width utility return creates differentiated stereo depth for the 7-voice detuned layer without widening the kick sub.",
+ "sendSources": [
+ "Supersaw Pad"
+ ],
+ "deviceFocus": "Chorus-Ensemble in widening mode (Mode set for max stereo spread) followed by Utility Bass Mono On to protect sub frequencies below 120 Hz on this return",
+ "levelGuidance": "Send Supersaw Pad at -12 to -6 dB; blend to taste \u2014 the mono source means any width added here is fully additive"
+ }
+ ],
+ "notes": [
+ "No sidechain pumping return is warranted: measured pumpingConfidence 0.128 and pumpingRate null \u2014 sidechain ducking is not present in this track.",
+ "The pure-mono source means all width is additive \u2014 monitor in mono regularly to verify the original character is preserved.",
+ "Sub bass is already mono (subBassMono true, subBassCorrelation 1.0) so Bass Mono on the Stereo Width return is a protective measure, not a corrective one."
+ ]
+ },
+ "warpGuide": {
+ "fullTrack": {
+ "warpMode": "Complex Pro",
+ "settings": "Formants 0%, Envelope 128, Transients on",
+ "reason": "The reference loop must be preserved without pitch-shifting artifacts; Complex Pro gives the highest fidelity for a fully arranged stereo bounce at 128.1 BPM."
+ },
+ "drums": {
+ "warpMode": "Beats",
+ "settings": "Transient Loop mode, Preserve Transients on",
+ "reason": "The distorted kick at 96 Hz with THD 0.35 has sharp sub transients; Beats mode preserves their attack shape without smearing the fundamental."
+ },
+ "bass": {
+ "warpMode": "Tones",
+ "settings": "Channel set to Low",
+ "reason": "The punchy 113 Hz bass with 171 ms decay has a sustained low-end shape best preserved by Tones mode, which tracks the fundamental pitch envelope rather than slicing it."
+ },
+ "melodic": {
+ "warpMode": "Tones",
+ "settings": "Channel set to Low-Mid",
+ "reason": "The 7-voice supersaw layer has harmonically rich sustained content \u2014 Tones mode preserves the chord's spectral shape across the detuned unison stack."
+ },
+ "rationale": "This is a pure-mono, brick-wall-limited acid-techno loop with no reverb tail and flat short-term LUFS (LRA 0.1 LU). The absence of dynamic variation means warp artifacts are most audible on transient events (kick) and on the thick supersaw mid-range, so Beats for percussive stems and Tones for sustained harmonic content gives the cleanest reconstruction. Full-track reference uses Complex Pro to preserve everything in the original bounce."
+ },
+ "detectedCharacteristics": [
+ {
+ "name": "Acid 303-Style Filter Sweep",
+ "confidence": "HIGH",
+ "explanation": "acidDetail.isAcid is true with confidence 0.69, resonanceLevel at maximum 1.0, and centroidOscillationHz at 36 \u2014 consistent with a self-oscillating TB-303-style filter modulated at sub-audio rate."
+ },
+ {
+ "name": "7-Voice Supersaw Layer",
+ "confidence": "HIGH",
+ "explanation": "supersawDetail.isSupersaw is true with confidence 0.85, voiceCount 7, and avgDetuneCents 28.5 \u2014 a textbook stacked-oscillator supersaw with above-average detuning spread creating the measured spectralComplexity of 7.2."
+ },
+ {
+ "name": "Heavily Brick-Wall Limited Master",
+ "confidence": "HIGH",
+ "explanation": "lufsIntegrated -9.2 with lufsRange 0.1 LU and a true peak of 1.0 dBTP (inter-sample over) confirms extreme limiting; the crestFactor of 10.2 and peakRatio95to50 of 2.61 reinforce a heavily processed master with minimal dynamic headroom."
+ },
+ {
+ "name": "Distorted High-Tuned Kick",
+ "confidence": "HIGH",
+ "explanation": "kickDetail.fundamentalHz 96 Hz (above standard 909 range), isDistorted true, and thd 0.35 indicate a deliberately saturated kick with audible harmonic distortion; kickCount 81 confirms consistent presence throughout the 15-second clip."
+ },
+ {
+ "name": "Pure Mono Mix",
+ "confidence": "HIGH",
+ "explanation": "stereoDetail.stereoWidth is exactly 0.0 with stereoCorrelation 1.0 and bandCorrelations at 1.0 across all seven bands \u2014 the entire mix is a perfect mono file with no stereo content at any frequency."
+ }
+ ],
+ "arrangementOverview": {
+ "summary": "A 15-second single-segment acid-techno loop measured at -9.2 LUFS integrated (LRA 0.1 LU), indicating a fully sustained, non-dynamic loop intended for DJ tool or clip-launch use. The noveltyCurve shows six transient novelty peaks between 1.7 s and 14.4 s (strongest at 11.54 s with normalized strength 1.0), corresponding to regular bar-boundary renewal events within the 8-bar phrase grid rather than arrangement sections. The downbeat confidence is near zero (0.0028), so bar-1 placement should be aligned manually to the measured beat grid.",
+ "segments": [
+ {
+ "index": 0,
+ "startTime": 0,
+ "endTime": 15,
+ "lufs": -9.6,
+ "description": "Single continuous loop at -9.6 LUFS with LRA 0.1 LU \u2014 fully sustained acid-techno pattern with no arrangement transitions. The novelty curve shows repeating renewal peaks every ~1.9 s aligned to 2-bar boundaries (nearest downbeats at 1.173, 3.042, 4.923, 6.792, 8.661, 10.542, 12.411, 14.292 s), driven by the acid filter oscillation and kick accent pattern. The spectralBalanceTimeSeries shows brilliance spiking up to -14.5 dB at t=4.03 s and t=14.80 s, coinciding with the strongest novelty peaks and suggesting the supersaw high-end opens periodically.",
+ "sceneName": "Acid Loop",
+ "abletonAction": "Set clip loop length to 8 bars starting at measured downbeat 1.173 s; use 'Set 1.1.1 here' to align the clip warp marker to the first stable downbeat.",
+ "automationFocus": "Acid Bass -> Auto Filter Frequency"
+ }
+ ],
+ "noveltyNotes": "Six novelty peaks are clustered at near-2-bar intervals (1.7 s, 4.5 s, 6.9 s, 9.2 s, 11.5 s, 14.4 s strength 1.0). In Live, map each peak to a Scene launch point or automate Auto Filter Frequency upward into the peak then sweep back to create call-response acid phrases. The strongest peak at 11.54 s is a candidate for a filter-open automation breakpoint \u2014 automate Auto Filter Frequency from ~400 Hz to ~2 kHz ramping into that timestamp."
+ },
+ "sonicElements": {
+ "kick": "Distorted 96 Hz kick (kickDetail.fundamentalHz 96 Hz, isDistorted true, THD 0.35) \u2014 high-tuned above standard 909 territory, giving it a punchy mid-bass thud rather than a deep sub thump. The harmonicRatio of 0.84 indicates a reasonably clean fundamental despite the distortion, meaning the THD is adding audible upper harmonics rather than destroying the pitch. Short attack character consistent with a synthesized or heavily processed sample.",
+ "bass": "Punchy 113 Hz bass (bassDetail.type punchy, averageDecayMs 171 ms, fundamentalHz 113 Hz) with straight groove (swingPercent 0, grooveType straight). The acid detection (isAcid true, resonanceLevel 1.0) means this bass is not static \u2014 its timbre is modulated by a self-oscillating filter sweeping at 36 Hz centroid oscillation rate. The transientRatio of 0.04 is very low, confirming a sustained, dense bass texture rather than a plucked character.",
+ "melodicArp": "Pitch transcription confidence is 0.0655 \u2014 far below the 0.15 threshold for reliable note data. The melody detector reports 54 notes cycling through MIDI 47/48/45 (B3/C4/A3) in the low-mid register, but given the near-zero pitchConfidence this almost certainly reflects the acid filter sweep and supersaw harmonic motion rather than a distinct melodic line. Treat as atonal/experimental reference only \u2014 do not reconstruct a pitched melody from these note values. The supersaw and acid bass are likely the pitch-carrying elements.",
+ "grooveAndTiming": "The beat grid is locked at 128.1 BPM (bpmConfidence 3.75, tempo stabilizes to 129.2 BPM after the first two beats per rhythmDetail.tempoCurve). The downbeat confidence is 0.0028 \u2014 extremely low \u2014 meaning the bar-1 phase cannot be trusted; align the warp marker manually. Per-drum swing: kick 17.6%, snare 22.8%, hihat 20.4% (grooveDetail.perDrumSwing) \u2014 all three instruments carry slight swing, making the groove subtly humanized rather than machine-rigid. beatLoudnessVariation 0.0877 confirms minimal accent variation across beats.",
+ "effectsAndTexture": "No reverb measured (reverbDetail.isWet false, rt60 null) \u2014 the source is entirely dry. No gating detected (effectsDetail.gatingDetected false). The supersaw's spectralComplexity of 7.2 and the acid bass's maximum resonanceLevel together generate the primary textural density. The textureScore of 0.3797 with lowBandFlatness 0.3645 and midBandFlatness 0.3059 indicates a moderately complex, tonally non-flat texture dominated by the low and low-mid bands (spectralBalance.subBass -11.1 dB, lowBass -8.0 dB) relative to the heavily suppressed upper registers.",
+ "widthAndStereo": "The mix is pure mono: stereoWidth 0.0, stereoCorrelation 1.0, and all seven bandCorrelations at 1.0. This is either a mono source file or was rendered to mono during mastering. Sub-bass is already mono (subBassMono true). No width treatment is needed at the sub level, but the supersaw and acid elements will benefit from stereo expansion in the rebuild using Chorus-Ensemble or Utility Stereo Width on the Synth Bus.",
+ "harmonicContent": "Key measured as A Minor (keyConfidence 0.67 \u2014 moderate confidence). The chordTimelineAgreement is false: the librosa Viterbi decoder reads a single Am chord for the full 15 seconds (confidence 0.538) while the chord sequence and dominantChords suggest F, G, Am, Em movement. Given the disagreement and the acid/supersaw nature of the track, treat the harmonic content as A Minor-centered with possible i-VI movement (Am-F) \u2014 keep chord voicings open (sus2 or power-chord) to avoid committing to a specific progression that cannot be confirmed."
+ },
+ "mixAndMasterChain": [
+ {
+ "order": 1,
+ "device": "Operator",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Kick",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Oscillator A Coarse",
+ "value": "C2 (MIDI note 36, ~65 Hz as base oscillator; pitch-bend up to reach the 96 Hz measured fundamental)",
+ "reason": "The kick fundamental is measured at 96 Hz, which is higher than a standard 909 kick, so setting the base oscillator near 65 Hz and tuning Coarse upward to 96 Hz reconstructs the high-tuned character.",
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.kickCount"
+ ]
+ },
+ {
+ "order": 2,
+ "device": "Saturator",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Kick",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Drive",
+ "value": "40\u201355% (Type: Soft Sine or Waveshaper to match THD 0.35)",
+ "reason": "The kick measures isDistorted true with THD 0.35, confirming audible harmonic saturation that must be recreated with a post-oscillator Saturator rather than leaving the kick clean.",
+ "phase1Fields": [
+ "kickDetail.isDistorted",
+ "kickDetail.thd",
+ "kickDetail.harmonicRatio"
+ ]
+ },
+ {
+ "order": 3,
+ "device": "Analog",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Osc 1 Shape",
+ "value": "Square (odd-to-even ratio 3.75 biases strongly toward square/pulse waveform)",
+ "reason": "The synthesisCharacter.oddToEvenRatio of 3.75 is well above 2.0, indicating dominant odd-harmonic content consistent with a square wave, which is the canonical 303 oscillator shape for acid bass reconstruction.",
+ "phase1Fields": [
+ "synthesisCharacter.oddToEvenRatio",
+ "acidDetail.isAcid"
+ ]
+ },
+ {
+ "order": 4,
+ "device": "Auto Filter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Resonance",
+ "value": "95\u2013100% (maximum; resonanceLevel 1.0 measured)",
+ "reason": "The acid detection measures resonanceLevel at exactly 1.0 \u2014 the maximum value \u2014 so the Auto Filter Resonance must be set near maximum to recreate the self-oscillating squelch character.",
+ "phase1Fields": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.confidence",
+ "acidDetail.centroidOscillationHz"
+ ]
+ },
+ {
+ "order": 5,
+ "device": "Auto Filter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "LFO Rate",
+ "value": "36 Hz (centroidOscillationHz 36) with LFO Waveform set to Sine, LFO Amount 60\u201380%",
+ "reason": "The measured centroid oscillation rate of 36 Hz drives the filter modulation speed \u2014 setting the LFO to 36 Hz recreates the measured sub-audio filter sweep rather than a generic slow sweep.",
+ "phase1Fields": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.isAcid",
+ "acidDetail.bassRhythmDensity"
+ ]
+ },
+ {
+ "order": 6,
+ "device": "Wavetable",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Unison Amount",
+ "value": "28\u201330 cents detune (avgDetuneCents 28.5); Unison Mode set to maximum voice spread, Voices 7",
+ "reason": "The measured supersawDetail confirms 7 voices at 28.5 cents average detune \u2014 Wavetable's Unison Amount and Voices directly model this stacked-oscillator configuration.",
+ "phase1Fields": [
+ "supersawDetail.voiceCount",
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.isSupersaw"
+ ]
+ },
+ {
+ "order": 7,
+ "device": "EQ Eight",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "MIX",
+ "parameter": "Band 1 Filter Type",
+ "value": "High-pass at 120 Hz, Band 1 Q 0.7 \u2014 remove low-end below bass fundamental to prevent masking the 113 Hz bass",
+ "reason": "The spectralBalance shows lowBass at -8.0 dB being dominated by the bass element; high-passing the supersaw below 120 Hz prevents the two layers competing at the bass fundamental frequency.",
+ "phase1Fields": [
+ "spectralBalance.lowBass",
+ "bassDetail.fundamentalHz",
+ "supersawDetail.isSupersaw"
+ ]
+ },
+ {
+ "order": 8,
+ "device": "Drum Buss",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Drum Bus",
+ "workflowStage": "MIX",
+ "parameter": "Boom Frequency",
+ "value": "96 Hz (matched to kickDetail.fundamentalHz)",
+ "reason": "Setting the Drum Buss Boom Frequency to the measured kick fundamental of 96 Hz reinforces the specific high-tuned kick pitch rather than a generic 60\u201380 Hz value.",
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.harmonicRatio"
+ ]
+ },
+ {
+ "order": 9,
+ "device": "Utility",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Synth Bus",
+ "workflowStage": "MIX",
+ "parameter": "Stereo Width",
+ "value": "120\u2013140% (source is pure mono at stereoWidth 0.0; expand synth bus only)",
+ "reason": "The entire mix measures stereoWidth 0.0 and stereoCorrelation 1.0 \u2014 adding width at the Synth Bus level via Utility Stereo Width reconstructs the spatial depth expected from a 7-voice supersaw layer without touching the mono kick.",
+ "phase1Fields": [
+ "stereoDetail.stereoWidth",
+ "stereoDetail.stereoCorrelation",
+ "supersawDetail.voiceCount"
+ ]
+ },
+ {
+ "order": 10,
+ "device": "Utility",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Synth Bus",
+ "workflowStage": "MIX",
+ "parameter": "Bass Mono",
+ "value": "On (crossover ~120 Hz) \u2014 protect sub-bass mono integrity after width expansion",
+ "reason": "Although the source measures subBassMono true, the Utility width expansion at the Synth Bus could introduce sub-frequency phase divergence; Bass Mono On ensures the sub stays coherent after widening.",
+ "phase1Fields": [
+ "stereoDetail.subBassMono",
+ "stereoDetail.subBassCorrelation",
+ "stereoDetail.bandCorrelations.subBass"
+ ]
+ },
+ {
+ "order": 11,
+ "device": "EQ Eight",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Master",
+ "workflowStage": "MASTER",
+ "parameter": "Band 1 Gain",
+ "value": "High-pass shelf below 30 Hz (Band 1 Filter Type high-pass, Frequency 30 Hz) to clean up sub-sub rumble before limiting",
+ "reason": "The spectralBalance.subBass reads -11.1 dB, and brick-wall limiting at 1.0 dBTP true peak is active \u2014 removing the sub-30 Hz rumble before the limiter reduces inter-sample over risk from infrasonic energy.",
+ "phase1Fields": [
+ "spectralBalance.subBass",
+ "truePeak",
+ "lufsIntegrated"
+ ]
+ },
+ {
+ "order": 12,
+ "device": "Glue Compressor",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Master",
+ "workflowStage": "MASTER",
+ "parameter": "Threshold",
+ "value": "Threshold -8 dB, Ratio 2:1, Attack 10 ms, Release 200 ms, Makeup 1.5 dB",
+ "reason": "The PLR is 10.2 LU \u2014 within the 8\u201314 LU moderate mastered range \u2014 so a gentle Glue Compressor with 1\u20132 dB of gain reduction adds bus glue before the final limiter without re-crushing the already-limited transients.",
+ "phase1Fields": [
+ "plr",
+ "lufsIntegrated",
+ "crestFactor"
+ ]
+ },
+ {
+ "order": 13,
+ "device": "Limiter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Master",
+ "workflowStage": "MASTER",
+ "parameter": "Ceiling",
+ "value": "-0.3 dBTP; True Peak On; Release 150 ms",
+ "reason": "The measured truePeak of 1.0 dBTP is a confirmed inter-sample over \u2014 a true-peak limiter at -0.3 dBTP is mandatory to correct this defect before export.",
+ "phase1Fields": [
+ "truePeak",
+ "saturationDetail.clippedSampleCount",
+ "plr"
+ ]
+ }
+ ],
+ "secretSauce": {
+ "title": "Dual-Layer Acid Mono-to-Width Rebuild: Maximum-Resonance Filter Over Pure-Mono Supersaw",
+ "icon": "303+SAW",
+ "explanation": "This track's secret is the combination of three measured extremes that rarely coexist: a pure-mono mix (stereoWidth 0.0), a maximum-resonance acid filter (resonanceLevel 1.0, centroidOscillationHz 36), and a 7-voice supersaw at 28.5-cent detune \u2014 all running simultaneously at -9.2 LUFS with 0.1 LU of dynamic range. The reconstruction trick is to build the acid filter sweep and supersaw in mono first (matching the measured source), then deliberately open stereo width only at the Synth Bus level after the acid character is locked in. This preserves the driving, laser-focused mono low-end while giving the mid-range supersaw stack the stereo depth that a 7-voice unison layer naturally produces.",
+ "implementationSteps": [
+ "Build Acid Bass in Analog with square oscillator, Auto Filter at max Resonance, LFO Rate 36 Hz",
+ "Build Supersaw in Wavetable with 7 voices and 28.5-cent Unison Amount",
+ "Confirm both are mono at this stage \u2014 match the measured stereoWidth 0.0 source",
+ "Route both to Synth Bus, apply Utility Stereo Width 120\u2013140% with Bass Mono On at 120 Hz",
+ "Add Chorus-Ensemble on the Space Reverb return, send Supersaw Pad only",
+ "Bus drums separately, set Drum Buss Boom at 96 Hz",
+ "Master chain: EQ Eight HP at 30 Hz \u2192 Glue Compressor \u2192 Limiter at -0.3 dBTP True Peak On"
+ ],
+ "workflowSteps": [
+ {
+ "step": 1,
+ "trackContext": "Acid Bass",
+ "device": "Analog",
+ "parameter": "Osc 1 Shape",
+ "value": "Square",
+ "instruction": "Set Osc 1 to Square waveform to match the measured odd-to-even harmonic ratio of 3.75, which confirms dominant odd-harmonic (square/pulse) synthesis character in the acid bass layer.",
+ "measurementJustification": "synthesisCharacter.oddToEvenRatio 3.75 is well above 2.0 \u2014 classic square-wave territory; the 303 oscillator is canonically a square wave and this measurement confirms it.",
+ "phase1Fields": [
+ "synthesisCharacter.oddToEvenRatio",
+ "acidDetail.isAcid"
+ ]
+ },
+ {
+ "step": 2,
+ "trackContext": "Acid Bass",
+ "device": "Auto Filter",
+ "parameter": "Resonance",
+ "value": "95\u2013100%",
+ "instruction": "Set Resonance to maximum to recreate the measured resonanceLevel of 1.0 \u2014 self-oscillation at the filter cutoff is what produces the characteristic 303 squelch that the acid detection confirmed.",
+ "measurementJustification": "acidDetail.resonanceLevel is exactly 1.0 \u2014 the analyzer's maximum value \u2014 confirming a fully self-oscillating filter state that requires maximum Resonance to recreate.",
+ "phase1Fields": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.confidence"
+ ]
+ },
+ {
+ "step": 3,
+ "trackContext": "Acid Bass",
+ "device": "Auto Filter",
+ "parameter": "LFO Rate",
+ "value": "36 Hz",
+ "instruction": "Set the Auto Filter LFO Rate to 36 Hz (unsynced, free-running) to match the measured centroid oscillation frequency; this sub-audio modulation rate creates the fast pitch-like filter movement characteristic of this track.",
+ "measurementJustification": "acidDetail.centroidOscillationHz is 36 Hz \u2014 a precise sub-audio oscillation rate that distinguishes this acid line from slow-filter or tempo-synced approaches.",
+ "phase1Fields": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.bassRhythmDensity"
+ ]
+ },
+ {
+ "step": 4,
+ "trackContext": "Supersaw Pad",
+ "device": "Wavetable",
+ "parameter": "Unison Amount",
+ "value": "28\u201330 cents, Voices 7",
+ "instruction": "Configure Wavetable Unison with 7 voices and set Unison Amount to 28\u201330 cents to match the measured avgDetuneCents of 28.5 across 7 voices \u2014 this is the exact detuning spread that produces the measured spectralComplexity of 7.2.",
+ "measurementJustification": "supersawDetail.avgDetuneCents 28.5 and supersawDetail.voiceCount 7 are directly actionable Wavetable parameters \u2014 this is the most measurement-precise step in the rebuild.",
+ "phase1Fields": [
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.voiceCount",
+ "supersawDetail.spectralComplexity"
+ ]
+ },
+ {
+ "step": 5,
+ "trackContext": "Synth Bus",
+ "device": "Utility",
+ "parameter": "Stereo Width",
+ "value": "120\u2013140%",
+ "instruction": "After confirming the Acid Bass and Supersaw are locked in mono (matching the pure-mono source), expand the Synth Bus via Utility Stereo Width to 120\u2013140% \u2014 this is the deliberate departure from the mono source that gives the rebuild a modern stereo presentation while keeping kick and sub in mono.",
+ "measurementJustification": "stereoDetail.stereoWidth 0.0 and stereoDetail.stereoCorrelation 1.0 confirm the source is pure mono; expanding at the synth bus rather than globally protects the kick's mono punch while letting the 7-voice supersaw breathe.",
+ "phase1Fields": [
+ "stereoDetail.stereoWidth",
+ "stereoDetail.stereoCorrelation",
+ "supersawDetail.voiceCount"
+ ]
+ },
+ {
+ "step": 6,
+ "trackContext": "Master",
+ "device": "Limiter",
+ "parameter": "Ceiling",
+ "value": "-0.3 dBTP; True Peak On",
+ "instruction": "Place the Limiter last in the master chain with True Peak enabled and Ceiling at -0.3 dBTP to correct the measured 1.0 dBTP inter-sample over \u2014 this is a mandatory correction, not a stylistic loudness move.",
+ "measurementJustification": "truePeak 1.0 dBTP is a confirmed inter-sample over (0.0 dBTP is full scale, so 1.0 is an over); True Peak mode catches the inter-sample reconstruction peaks that a standard sample-peak limiter misses.",
+ "phase1Fields": [
+ "truePeak",
+ "saturationDetail.clippedSampleCount",
+ "plr"
+ ]
+ }
+ ]
+ },
+ "confidenceNotes": [
+ {
+ "field": "BPM",
+ "value": "128.1 BPM (stabilizes to 129.2 after beat 3)",
+ "reason": "bpmConfidence is 3.75 (above 0.4 threshold \u2014 high confidence). The tempoCurve shows a brief ramp from 139.7 BPM at t=0.55 s down to stable 129.2 BPM by t=1.4 s; this is likely a warp artifact at the loop head. No double/half-time correction was applied. The rebuild uses 128.1 BPM as the session tempo (global measurement) and notes the stable internal grid of 129.2 BPM after beat 2."
+ },
+ {
+ "field": "Bar-1 / Downbeat Phase",
+ "value": "Downbeat confidence: 0.0028 (near zero)",
+ "reason": "rhythmDetail.downbeatConfidence is 0.0028 \u2014 effectively zero, consistent with a four-on-the-floor or dense-kick pattern where every beat carries similar kick energy, making beat-1 phase ambiguous. The beat grid positions are reliable; only the bar-1 assignment is uncertain. All bar-aligned arrangement moves should be verified by ear before committing in the session."
+ },
+ {
+ "field": "Time Signature",
+ "value": "4/4 (assumed)",
+ "reason": "timeSignatureConfidence is 0.0 and timeSignatureSource is onset_autocorrelation_low_margin \u2014 the meter could not be determined from the signal with any confidence. The patternBeatsPerBar of 4 and the 32-beat kick accent pattern are consistent with 4/4, but this is an inference, not a measurement. Use 4/4 as the working assumption."
+ },
+ {
+ "field": "Key / Harmonic Content",
+ "value": "A Minor (keyConfidence 0.67) \u2014 moderate confidence only",
+ "reason": "keyConfidence is 0.67, just below the 0.70 threshold for committed key moves. The chordTimelineAgreement is false \u2014 the Viterbi chord timeline reads Am for the full clip (confidence 0.538) while the chord sequence engine detects F, G, Am, Em movement. The acid filter sweep and supersaw harmonics make reliable harmonic analysis difficult. Treat A Minor as the best available reading; use sus2 or open voicings rather than hard-committing to diatonic chord shapes."
+ },
+ {
+ "field": "Melody / Pitch Transcription",
+ "value": "54 notes detected but pitchConfidence 0.0655 \u2014 unreliable",
+ "reason": "melodyDetail.pitchConfidence is 0.0655, far below the 0.15 reliability threshold. The reported note cluster around MIDI 47/48/45 (B3/C4/A3) almost certainly reflects the acid filter sweep harmonic motion rather than a discrete melodic layer. No OPTIONAL_PITCH_NOTE_TRANSLATION_RESULT_JSON was provided (null). These notes should be treated as experimental reference scaffolding only, not reconstructed as a melody."
+ },
+ {
+ "field": "Genre Classification",
+ "value": "genreDetail.genre 'pop' at confidence 0.40 \u2014 not credible; acid-techno reading preferred",
+ "reason": "The top genre score is 'pop' (0.80) but genreDetail.confidence is only 0.40 (low). The third-ranked genre is 'acid-techno' (score 0.758) and fourth is 'dub-techno' (0.737), which align far better with the measured acidDetail, supersawDetail, and kick character. The rebuild plan uses acid-techno as the working genre context \u2014 the classifier likely failed on this track due to the short 15-second duration."
+ },
+ {
+ "field": "Sidechain Pumping",
+ "value": "No sidechain routing recommended \u2014 pumpingConfidence 0.128, pumpingRate null",
+ "reason": "sidechainDetail.pumpingConfidence is 0.128 (well below the 0.20 minimum threshold for recommending a sidechain card). pumpingRate is null. No sidechain compressor routing is warranted; any apparent volume modulation in the source is not detectable as a pumping pattern."
+ },
+ {
+ "field": "Acid Filter Centroid Oscillation Accuracy",
+ "value": "centroidOscillationHz 36 Hz \u2014 treat as approximate",
+ "reason": "The centroidOscillationHz value of 36 Hz is a spectral centroid oscillation estimate, not a direct LFO rate measurement from the synthesis engine. Use it as a starting-point LFO rate (\u00b15 Hz) and fine-tune by ear when matching the acid sweep character in the rebuild."
+ }
+ ],
+ "abletonRecommendations": [
+ {
+ "device": "Auto Filter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "category": "EFFECTS",
+ "parameter": "Resonance",
+ "value": "95\u2013100%; Filter Type Lowpass; Drive 20\u201330%",
+ "reason": "The measured acidDetail.resonanceLevel is exactly 1.0 \u2014 the maximum measured value \u2014 confirming a fully self-oscillating 303-style filter that requires near-maximum Auto Filter Resonance to recreate the squelch character confirmed at confidence 0.69.",
+ "advancedTip": "Add Drive in the Auto Filter to add grit that matches the measured THD from the co-incident distorted kick character bleeding into the bus; keep Envelope Amount at 0 and rely solely on the LFO for the oscillation measured at 36 Hz.",
+ "phase1Fields": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.confidence",
+ "acidDetail.isAcid"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "category": "EFFECTS",
+ "parameter": "LFO Rate",
+ "value": "36 Hz (free-running, unsynced); LFO Waveform Sine; LFO Amount 70%",
+ "reason": "The acidDetail.centroidOscillationHz measures 36 Hz \u2014 a precise sub-audio rate that defines this track's filter animation speed; syncing to tempo would produce a different, slower sweep inconsistent with the measured 36 Hz oscillation.",
+ "advancedTip": "At 128.1 BPM a quarter note is 468 ms (60000/128.1), so 36 Hz is approximately 11 LFO cycles per quarter note \u2014 far faster than any tempo-synced division. Confirm the free-running LFO is not quantized to the grid when setting the rate.",
+ "phase1Fields": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.bassRhythmDensity",
+ "bpm"
+ ]
+ },
+ {
+ "device": "Wavetable",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "SOUND_DESIGN",
+ "category": "SYNTHESIS",
+ "parameter": "Unison Amount",
+ "value": "28\u201330 cents; Voices 7; Unison Mode Classic",
+ "reason": "supersawDetail.avgDetuneCents is exactly 28.5 cents across 7 measured voices \u2014 this is a directly actionable Wavetable Unison configuration that produces the measured spectralComplexity of 7.2.",
+ "advancedTip": "Use a sawtooth wavetable as the primary oscillator shape to complement the measured square-wave acid bass (synthesisCharacter.oddToEvenRatio 3.75 dominates the bass; the supersaw's even harmonics fill the mid-range gap). Set a gentle high-pass on Oscillator 2 to avoid stacking low-end over the 113 Hz bass fundamental.",
+ "phase1Fields": [
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.voiceCount",
+ "supersawDetail.spectralComplexity"
+ ]
+ },
+ {
+ "device": "Saturator",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Kick",
+ "workflowStage": "SOUND_DESIGN",
+ "category": "EFFECTS",
+ "parameter": "Drive",
+ "value": "40\u201355%; Type Soft Sine",
+ "reason": "kickDetail.isDistorted is true and thd measures 0.35 \u2014 audible harmonic distortion is present and must be recreated with a post-oscillator Saturator rather than leaving the kick clean; kickDetail.harmonicRatio of 0.84 indicates the fundamental is still present beneath the THD, so Soft Sine preserves pitch while adding harmonics.",
+ "advancedTip": "Do not stack Drum Buss Crunch on top of this Saturator: the harmonicRatio of 0.84 is above 0.5, which means the kick is already clean-dominant \u2014 adding Drum Buss Crunch would introduce unwanted grit beyond the measured THD character.",
+ "phase1Fields": [
+ "kickDetail.isDistorted",
+ "kickDetail.thd",
+ "kickDetail.harmonicRatio"
+ ]
+ },
+ {
+ "device": "Drum Buss",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Drum Bus",
+ "workflowStage": "MIX",
+ "category": "DYNAMICS",
+ "parameter": "Boom Frequency",
+ "value": "96 Hz (matched to measured kickDetail.fundamentalHz)",
+ "reason": "The kick fundamental is measured at 96 Hz \u2014 above the standard 909 60\u201380 Hz range \u2014 so setting Drum Buss Boom Frequency to 96 Hz reinforces the specific measured pitch of this kick rather than applying a generic low-end boost.",
+ "advancedTip": "Keep Boom amount modest (30\u201340%) since the kick already measures isDistorted true; excessive Boom at 96 Hz will compound the THD 0.35 distortion and push the Drum Bus toward the inter-sample overs already present at the master truePeak 1.0 dBTP.",
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.isDistorted",
+ "truePeak"
+ ]
+ },
+ {
+ "device": "Compressor",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "MIX",
+ "category": "DYNAMICS",
+ "parameter": "Attack",
+ "value": "2\u20134 ms Attack, Release 120\u2013150 ms, Ratio 4:1, Threshold -14 dB",
+ "reason": "bassDetail.type is punchy with averageDecayMs 171 ms \u2014 punchy basses benefit from a fast-attack Compressor to catch transients; the 171 ms decay maps to a Release of approximately 120\u2013150 ms so the compressor recovers before the next note onset at bassDetail.bassRhythmDensity 3.1 onsets/second.",
+ "advancedTip": "At 128.1 BPM a 16th note is 117 ms (quarter 468 ms / 4); a Release of 150 ms returns gain before the next 16th-note onset. Confirm the compressor is not over-pumping by watching the gain-reduction meter \u2014 target 2\u20134 dB of GR maximum to tighten without squashing the acid filter movement.",
+ "phase1Fields": [
+ "bassDetail.averageDecayMs",
+ "bassDetail.type",
+ "acidDetail.bassRhythmDensity"
+ ]
+ },
+ {
+ "device": "Utility",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Synth Bus",
+ "workflowStage": "MIX",
+ "category": "STEREO",
+ "parameter": "Stereo Width",
+ "value": "120\u2013140%",
+ "reason": "The full mix stereoWidth is exactly 0.0 with stereoCorrelation 1.0 \u2014 the source is pure mono; a 7-voice supersaw at 28.5-cent detune naturally produces stereo spread when rendered by Wavetable, so expanding the Synth Bus to 120\u2013140% recovers the stereo character that was collapsed in the original mastered file.",
+ "advancedTip": "Apply Utility width only on the Synth Bus, not globally, so the kick and bass remain mono-locked and the expansion does not introduce phase issues at low frequencies. Cross-check in mono after widening by temporarily setting Stereo Width back to 0% \u2014 the sum should not lose perceived loudness by more than 0.5 dB.",
+ "phase1Fields": [
+ "stereoDetail.stereoWidth",
+ "stereoDetail.stereoCorrelation",
+ "supersawDetail.voiceCount"
+ ]
+ },
+ {
+ "device": "Scale",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "ARRANGEMENT",
+ "category": "MIDI",
+ "parameter": "Scale Name",
+ "value": "Natural Minor; Base A (A Minor per measured key)",
+ "reason": "keyConfidence is 0.67 \u2014 just below the 0.70 commit threshold, but the key A Minor is consistently reported across both the global key measurement and the per-segment key; use Scale to loosely constrain the MIDI notes with Use Current Scale as a safety net rather than hard-locking.",
+ "advancedTip": "Because keyConfidence is 0.67 (not above 0.70), enable Use Current Scale rather than hard-coding Scale Name and Base \u2014 this lets you override the key per-clip if the chord timeline reveals an F Major or G Major movement without touching the Scale device. The chordTimelineAgreement is false, so stay flexible.",
+ "phase1Fields": [
+ "key",
+ "keyConfidence",
+ "chordDetail.chordTimelineAgreement"
+ ]
+ },
+ {
+ "device": "EQ Eight",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "MIX",
+ "category": "EQ",
+ "parameter": "Band 1 Filter Type",
+ "value": "High-pass at 120 Hz, Q 0.7 \u2014 roll off below bass fundamental to prevent masking",
+ "reason": "spectralBalance.lowBass is -8.0 dB (the dominant band alongside subBass at -11.1 dB) and bassDetail.fundamentalHz is 113 Hz \u2014 without a high-pass on the supersaw, both elements compete in the same 100\u2013150 Hz register, blurring the punch of the measured punchy bass type.",
+ "advancedTip": "Set the high-pass at 120 Hz rather than 100 Hz because the bass fundamental measured at 113 Hz gives a 7 Hz safety margin; lowering to 100 Hz would cut into the bass's own harmonic overtones if the two tracks are not perfectly gain-staged.",
+ "phase1Fields": [
+ "spectralBalance.lowBass",
+ "bassDetail.fundamentalHz",
+ "supersawDetail.isSupersaw"
+ ]
+ },
+ {
+ "device": "Hybrid Reverb",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Return:Space Reverb",
+ "workflowStage": "MIX",
+ "category": "EFFECTS",
+ "parameter": "Predelay",
+ "value": "0 ms; Decay 0.8\u20131.2 s; High Cut 4 kHz",
+ "reason": "reverbDetail.isWet is false and reverbDetail.preDelayMs is null \u2014 the source is completely dry, so Predelay on the return should be 0 ms to avoid an artificial pre-echo that would not match the dry source character. A short Decay of 0.8\u20131.2 s adds just enough space without clouding the dense mid-range from the spectralBalance.",
+ "advancedTip": "Since the spectralBalance shows upperMids at -32.1 dB and highs at -29.4 dB are already suppressed, set High Cut to 4 kHz on the Hybrid Reverb to keep the reverb tail from adding artificial brightness above the naturally dark spectral centroid mean of 1143.7 Hz.",
+ "phase1Fields": [
+ "reverbDetail.isWet",
+ "reverbDetail.preDelayMs",
+ "spectralDetail.spectralCentroidMean"
+ ]
+ },
+ {
+ "device": "Limiter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Master",
+ "workflowStage": "MASTER",
+ "category": "MASTERING",
+ "parameter": "Ceiling",
+ "value": "-0.3 dBTP; True Peak On; Release 150 ms",
+ "reason": "The measured truePeak is 1.0 dBTP \u2014 a confirmed inter-sample over (0.0 dBTP is full scale, so 1.0 is 1 dB above) that must be corrected before export; a Limiter with True Peak enabled and Ceiling -0.3 dBTP catches inter-sample reconstruction peaks that a standard sample-peak ceiling misses.",
+ "advancedTip": "Enable True Peak (not just sample-peak limiting) because the inter-sample over at 1.0 dBTP was measured in the reconstructed waveform, not at a sample boundary \u2014 standard Ceiling limiting would not catch it. Set Release to 150 ms to match the PLR of 10.2 LU (moderate mastered range); slower release avoids audible pumping given the already-limited dynamic range (LRA 0.1 LU).",
+ "phase1Fields": [
+ "truePeak",
+ "plr",
+ "lufsIntegrated"
+ ]
+ },
+ {
+ "device": "Chorus-Ensemble",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Return:Stereo Width",
+ "workflowStage": "MIX",
+ "category": "EFFECTS",
+ "parameter": "Mode",
+ "value": "Ensemble (maximum stereo spread mode); Rate 0.8 Hz; Amount 40%; Dry/Wet 100%",
+ "reason": "The source stereoWidth is 0.0 and the supersaw measures 7 voices at 28.5-cent detune \u2014 a Chorus-Ensemble on the dedicated Stereo Width return creates the natural pitch-spread stereo image that a real 7-voice detuned supersaw would produce, without touching the mono kick bus.",
+ "advancedTip": "Keep Rate below 1 Hz (try 0.8 Hz) so the chorus modulation rate does not audibly clash with the 36 Hz acid LFO from the Acid Bass; at higher rates the two modulation sources can create beating artifacts in the 200\u2013400 Hz shared register.",
+ "phase1Fields": [
+ "stereoDetail.stereoWidth",
+ "supersawDetail.voiceCount",
+ "acidDetail.centroidOscillationHz"
+ ]
+ }
+ ],
+ "audioObservations": {
+ "soundDesignFingerprint": "A dense, pure-mono acid-techno loop built from three interlocking synthesis layers: a distorted, high-pitched synthesized kick with a short punch and audible harmonic crunch, a maximum-resonance acid bass with fast sub-audio filter oscillation, and a thick 7-voice supersaw chord pad filling the mid-register. The overall timbre is dark and mid-heavy with almost no high-frequency content above 5 kHz, consistent with the spectral centroid mean of 1143.7 Hz and the suppressed upperMids and highs in the spectral balance. The complete absence of stereo image gives the loop a focused, tunneling mono presence.",
+ "elementCharacter": [
+ {
+ "element": "Kick",
+ "description": "Short, punchy transient with a perceptible mid-bass thump rather than a deep sub kick \u2014 consistent with the 96 Hz fundamental. The distortion is audible but not harsh: it adds a gritty click at the transient apex before the tone body. Tail is brief (under 100 ms perceptually), reinforcing the punchy classification."
+ },
+ {
+ "element": "Acid Bass",
+ "description": "The dominant textural element: a thick, monophonic bass line with a continuously self-oscillating filter creating a fast, vocal-like squelch. The resonance is so high that the filter almost contributes its own pitch \u2014 a thin, whistling tone rides above the bass body. The filter sweep is fast and rhythmic, feeling almost tremolo-like at the measured 36 Hz modulation rate, creating a tonal shimmer rather than a slow cinematic sweep."
+ },
+ {
+ "element": "Supersaw Pad",
+ "description": "A sustained, harmonically dense chord layer occupying the 200\u20132000 Hz range. The seven voices are perceptibly spread in pitch \u2014 you can hear the beating between detuned oscillators as a slow chorus pulse underlying the static chord. The sound is warm and slightly nasal, lacking high-frequency air, which matches the dark spectral balance (highs at -29.4 dB average). No modulation or movement beyond the detuning beat."
+ },
+ {
+ "element": "Closed Hi-Hat / Percussion",
+ "description": "Very short closed hat events (meanDecaySeconds 0.048 s \u2014 approximately 48 ms) punctuate the groove with a dry, snappy character. The high snap ratio (0.803) means the transient dominates over the body \u2014 these hats sound more like a metallic click than a traditional open hat swish. They sit high in the mix at 7860 Hz center but are quiet relative to the bass-heavy balance."
+ }
+ ],
+ "productionSignatures": [
+ "Pure mono across all frequency bands \u2014 every element is center-panned with no stereo information at any frequency",
+ "Extreme brick-wall limiting with 0.1 LU dynamic range \u2014 consistent with a DJ-tool or stem master optimized for peak loudness rather than dynamics",
+ "Fast sub-audio filter modulation (36 Hz) on the acid bass creating a tremolo-like tonal animation that is characteristic of TB-303 style overdrive at high resonance",
+ "Dark spectral profile with deliberate suppression above 5 kHz \u2014 the brilliance band averages -21.8 dB, giving the track a vintage, analog-filtered quality",
+ "Repeating 2-bar renewal pattern in the novelty curve suggesting a looped 8-bar phrase structure designed for clip-launch use"
+ ],
+ "mixContext": "The mix is extremely flat in dynamics (LRA 0.1 LU) and mono across the full spectrum, suggesting this is a finished loop master or DJ tool rather than a stem for further arrangement. The low-end is dense (subBass -11.1 dB, lowBass -8.0 dB) relative to an almost silent upper register, making the mix dark and punchy. The lack of reverb (isWet false) keeps every element dry and immediate. The measured inter-sample over at 1.0 dBTP suggests the original was run hot through a hard clipper before export."
+ },
+ "styleProfile": {
+ "genre": "Techno",
+ "subGenre": "Acid Techno",
+ "mood": [
+ "Dark",
+ "Driving",
+ "Hypnotic",
+ "Distorted",
+ "Relentless"
+ ],
+ "instruments": [
+ "Synthesized Kick (96 Hz distorted)",
+ "Acid Bass (303-style, maximum resonance)",
+ "Supersaw Pad (7-voice, 28.5-cent detune)",
+ "Closed Hi-Hat"
+ ],
+ "productionTechniques": [
+ "Brick-wall limiting to -9.2 LUFS",
+ "Maximum-resonance acid filter sweep at 36 Hz modulation",
+ "7-voice supersaw stacking",
+ "Kick distortion / saturation (THD 0.35)",
+ "Pure mono mix (stereoWidth 0.0)"
+ ],
+ "description": "Hard-driving acid techno loop at 128.1 BPM in A Minor. Characterized by a distorted high-tuned kick at 96 Hz, a self-oscillating 303-style acid bass at maximum resonance, and a thick 7-voice supersaw pad. The mix is pure mono, extremely limited, and dark-spectral \u2014 a DJ tool designed for maximum punch and loop compatibility.",
+ "generationPrompt": "Acid techno loop, 128 BPM, A Minor, distorted high-tuned kick, TB-303 acid bass at maximum resonance with fast sub-audio filter sweep, 7-voice supersaw pad, dark mix, pure mono, heavily limited, no reverb, industrial-hypnotic feel",
+ "authoritativeMeasurements": {
+ "bpm": 128.1,
+ "key": "A Minor",
+ "timeSignature": "4/4"
+ }
+ },
+ "recommendations": {
+ "version": "recommendations.v1",
+ "recommendations": [
+ {
+ "device": "Auto Filter",
+ "parameter": "Resonance",
+ "value": 95.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.confidence",
+ "acidDetail.isAcid"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "parameter": "LFO Rate",
+ "value": 36.0,
+ "unit": "Hz",
+ "range": [
+ 28.8,
+ 43.2
+ ],
+ "cited_measurements": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.bassRhythmDensity",
+ "bpm"
+ ]
+ },
+ {
+ "device": "Wavetable",
+ "parameter": "Unison Amount",
+ "value": 28.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.voiceCount",
+ "supersawDetail.spectralComplexity"
+ ]
+ },
+ {
+ "device": "Saturator",
+ "parameter": "Drive",
+ "value": 40.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "kickDetail.isDistorted",
+ "kickDetail.thd",
+ "kickDetail.harmonicRatio"
+ ]
+ },
+ {
+ "device": "Drum Buss",
+ "parameter": "Boom Frequency",
+ "value": 96.0,
+ "unit": "Hz",
+ "range": [
+ 76.8,
+ 115.2
+ ],
+ "cited_measurements": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.isDistorted",
+ "truePeak"
+ ]
+ },
+ {
+ "device": "Compressor",
+ "parameter": "Attack",
+ "value": 4.0,
+ "unit": "ratio",
+ "range": [
+ 3.0,
+ 5.0
+ ],
+ "cited_measurements": [
+ "bassDetail.averageDecayMs",
+ "bassDetail.type",
+ "acidDetail.bassRhythmDensity"
+ ]
+ },
+ {
+ "device": "Utility",
+ "parameter": "Stereo Width",
+ "value": 120.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "stereoDetail.stereoWidth",
+ "stereoDetail.stereoCorrelation",
+ "supersawDetail.voiceCount"
+ ]
+ },
+ {
+ "device": "Scale",
+ "parameter": "Scale Name",
+ "value": "Natural Minor; Base A (A Minor per measured key)",
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "key",
+ "keyConfidence",
+ "chordDetail.chordTimelineAgreement"
+ ]
+ },
+ {
+ "device": "EQ Eight",
+ "parameter": "Band 1 Filter Type",
+ "value": 120.0,
+ "unit": "Hz",
+ "range": [
+ 96.0,
+ 144.0
+ ],
+ "cited_measurements": [
+ "spectralBalance.lowBass",
+ "bassDetail.fundamentalHz",
+ "supersawDetail.isSupersaw"
+ ]
+ },
+ {
+ "device": "Hybrid Reverb",
+ "parameter": "Predelay",
+ "value": 0.0,
+ "unit": "ms",
+ "range": [
+ 0.0,
+ 0.0
+ ],
+ "cited_measurements": [
+ "reverbDetail.isWet",
+ "reverbDetail.preDelayMs",
+ "spectralDetail.spectralCentroidMean"
+ ]
+ },
+ {
+ "device": "Limiter",
+ "parameter": "Ceiling",
+ "value": -0.3,
+ "unit": "dB",
+ "range": [
+ -3.3,
+ 2.7
+ ],
+ "cited_measurements": [
+ "truePeak",
+ "plr",
+ "lufsIntegrated"
+ ]
+ },
+ {
+ "device": "Chorus-Ensemble",
+ "parameter": "Mode",
+ "value": 0.8,
+ "unit": "Hz",
+ "range": [
+ 0.64,
+ 0.96
+ ],
+ "cited_measurements": [
+ "stereoDetail.stereoWidth",
+ "supersawDetail.voiceCount",
+ "acidDetail.centroidOscillationHz"
+ ]
+ },
+ {
+ "device": "Operator",
+ "parameter": "Oscillator A Coarse",
+ "value": 2.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.kickCount"
+ ]
+ },
+ {
+ "device": "Saturator",
+ "parameter": "Drive",
+ "value": 40.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "kickDetail.isDistorted",
+ "kickDetail.thd",
+ "kickDetail.harmonicRatio"
+ ]
+ },
+ {
+ "device": "Analog",
+ "parameter": "Osc 1 Shape",
+ "value": 3.75,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "synthesisCharacter.oddToEvenRatio",
+ "acidDetail.isAcid"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "parameter": "Resonance",
+ "value": 95.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.confidence",
+ "acidDetail.centroidOscillationHz"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "parameter": "LFO Rate",
+ "value": 36.0,
+ "unit": "Hz",
+ "range": [
+ 28.8,
+ 43.2
+ ],
+ "cited_measurements": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.isAcid",
+ "acidDetail.bassRhythmDensity"
+ ]
+ },
+ {
+ "device": "Wavetable",
+ "parameter": "Unison Amount",
+ "value": 28.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "supersawDetail.voiceCount",
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.isSupersaw"
+ ]
+ },
+ {
+ "device": "EQ Eight",
+ "parameter": "Band 1 Filter Type",
+ "value": 120.0,
+ "unit": "Hz",
+ "range": [
+ 96.0,
+ 144.0
+ ],
+ "cited_measurements": [
+ "spectralBalance.lowBass",
+ "bassDetail.fundamentalHz",
+ "supersawDetail.isSupersaw"
+ ]
+ },
+ {
+ "device": "Drum Buss",
+ "parameter": "Boom Frequency",
+ "value": 96.0,
+ "unit": "Hz",
+ "range": [
+ 76.8,
+ 115.2
+ ],
+ "cited_measurements": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.harmonicRatio"
+ ]
+ },
+ {
+ "device": "Utility",
+ "parameter": "Stereo Width",
+ "value": 120.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "stereoDetail.stereoWidth",
+ "stereoDetail.stereoCorrelation",
+ "supersawDetail.voiceCount"
+ ]
+ },
+ {
+ "device": "Utility",
+ "parameter": "Bass Mono",
+ "value": 120.0,
+ "unit": "Hz",
+ "range": [
+ 96.0,
+ 144.0
+ ],
+ "cited_measurements": [
+ "stereoDetail.subBassMono",
+ "stereoDetail.subBassCorrelation",
+ "stereoDetail.bandCorrelations.subBass"
+ ]
+ },
+ {
+ "device": "EQ Eight",
+ "parameter": "Band 1 Gain",
+ "value": 30.0,
+ "unit": "Hz",
+ "range": [
+ 24.0,
+ 36.0
+ ],
+ "cited_measurements": [
+ "spectralBalance.subBass",
+ "truePeak",
+ "lufsIntegrated"
+ ]
+ },
+ {
+ "device": "Glue Compressor",
+ "parameter": "Threshold",
+ "value": 2.0,
+ "unit": "ratio",
+ "range": [
+ 1.0,
+ 3.0
+ ],
+ "cited_measurements": [
+ "plr",
+ "lufsIntegrated",
+ "crestFactor"
+ ]
+ },
+ {
+ "device": "Limiter",
+ "parameter": "Ceiling",
+ "value": -0.3,
+ "unit": "dB",
+ "range": [
+ -3.3,
+ 2.7
+ ],
+ "cited_measurements": [
+ "truePeak",
+ "saturationDetail.clippedSampleCount",
+ "plr"
+ ]
+ },
+ {
+ "device": "Analog",
+ "parameter": "Osc 1 Shape",
+ "value": "Square",
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "synthesisCharacter.oddToEvenRatio",
+ "acidDetail.isAcid"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "parameter": "Resonance",
+ "value": 95.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.confidence"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "parameter": "LFO Rate",
+ "value": 36.0,
+ "unit": "Hz",
+ "range": [
+ 28.8,
+ 43.2
+ ],
+ "cited_measurements": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.bassRhythmDensity"
+ ]
+ },
+ {
+ "device": "Wavetable",
+ "parameter": "Unison Amount",
+ "value": 28.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.voiceCount",
+ "supersawDetail.spectralComplexity"
+ ]
+ },
+ {
+ "device": "Utility",
+ "parameter": "Stereo Width",
+ "value": 120.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "stereoDetail.stereoWidth",
+ "stereoDetail.stereoCorrelation",
+ "supersawDetail.voiceCount"
+ ]
+ },
+ {
+ "device": "Limiter",
+ "parameter": "Ceiling",
+ "value": -0.3,
+ "unit": "dB",
+ "range": [
+ -3.3,
+ 2.7
+ ],
+ "cited_measurements": [
+ "truePeak",
+ "saturationDetail.clippedSampleCount",
+ "plr"
+ ]
+ }
+ ]
+ }
+}
diff --git a/apps/backend/tests/fixtures/recommendation_tracks/house_sidechain_pluck_124/phase2.claude.json b/apps/backend/tests/fixtures/recommendation_tracks/house_sidechain_pluck_124/phase2.claude.json
new file mode 100644
index 00000000..e08cc557
--- /dev/null
+++ b/apps/backend/tests/fixtures/recommendation_tracks/house_sidechain_pluck_124/phase2.claude.json
@@ -0,0 +1,1215 @@
+{
+ "trackCharacter": "A dub-techno track at 124.1 BPM in A Minor, defined by a near-perfectly compressed loudness floor of -9.7 LUFS integrated with a razor-thin LRA of 0.2 LU \u2014 indicating heavy limiting and a wall-of-sound processing approach. The track is entirely mono (stereoWidth 0.0, stereoCorrelation 1.0 across all bands), suggesting either a deliberate mono-production choice or a mono-downmix source. Acid-filter movement is strongly detected (confidence 0.61, resonanceLevel 1.0) on what reads as a sustained bass element with a 1000 ms average decay, alongside a supersaw layer with 8 voices and 27.4 cents average detune. The kick measures a distorted 80 Hz fundamental (THD 0.43, isDistorted true) consistent with a heavily driven dub-techno kick character. The track is short at 15.5 seconds, spanning 8 bars with two DSP-detected structural segments of equal loudness (-10.1 LUFS each).",
+ "projectSetup": {
+ "tempoBpm": 124.1,
+ "timeSignature": "4/4",
+ "sampleRate": 44100,
+ "bitDepth": 24,
+ "headroomTarget": "-9 to -6 dBFS pre-master (matching the -9.7 LUFS integrated reference)",
+ "sessionGoal": "Rebuild a mono dub-techno loop with acid-filtered sustained bass, distorted 80 Hz kick, 8-voice supersaw, and heavy limiting to match the -9.7 LUFS / 0.2 LRA wall-of-sound loudness profile."
+ },
+ "trackLayout": [
+ {
+ "order": 1,
+ "name": "Kick",
+ "type": "MIDI",
+ "purpose": "Distorted 80 Hz kick with high THD (0.43), four-on-the-floor pattern at 124.1 BPM. kickCount 81 confirms dense kick activity across 15.5 s.",
+ "grounding": {
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.thd",
+ "kickDetail.isDistorted",
+ "kickDetail.kickCount"
+ ],
+ "segmentIndexes": [
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "order": 2,
+ "name": "Acid Bass",
+ "type": "MIDI",
+ "purpose": "Sustained mono bass with 1000 ms average decay, 103 Hz fundamental, and strong acid filter movement (isAcid true, confidence 0.61, resonanceLevel 1.0, centroidOscillationHz 38). Bass type 'sustained' with straight groove.",
+ "grounding": {
+ "phase1Fields": [
+ "bassDetail.averageDecayMs",
+ "bassDetail.fundamentalHz",
+ "acidDetail.isAcid",
+ "acidDetail.resonanceLevel"
+ ],
+ "segmentIndexes": [
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "order": 3,
+ "name": "Supersaw Pad",
+ "type": "MIDI",
+ "purpose": "8-voice supersaw layer with 27.4 cents average detune and spectralComplexity 7.6. Synthesized in A Minor at 438.73 Hz tuning reference (-5 cents from A440). Mono output confirmed.",
+ "grounding": {
+ "phase1Fields": [
+ "supersawDetail.voiceCount",
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.spectralComplexity",
+ "tuningCents"
+ ],
+ "segmentIndexes": [
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "order": 4,
+ "name": "Drum Bus",
+ "type": "AUDIO_BUS",
+ "purpose": "Groups Kick for shared bus compression. kickDetail.isDistorted true means no additional saturation here \u2014 focus on transient control and Drum Buss Boom frequency tuned to 80 Hz.",
+ "grounding": {
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.isDistorted",
+ "kickDetail.harmonicRatio"
+ ],
+ "segmentIndexes": [
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "order": 5,
+ "name": "Synth Bus",
+ "type": "AUDIO_BUS",
+ "purpose": "Groups Acid Bass and Supersaw Pad for shared glue compression. The two sustained elements dominate the mid and upper spectrum (spectralBalance.mids -24.3, spectralBalance.brilliance -20.8).",
+ "grounding": {
+ "phase1Fields": [
+ "spectralBalance.mids",
+ "spectralBalance.brilliance",
+ "supersawDetail.isSupersaw",
+ "bassDetail.type"
+ ],
+ "segmentIndexes": [
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "order": 6,
+ "name": "Master",
+ "type": "MASTER",
+ "purpose": "Final limiting and loudness matching to the measured -9.7 LUFS integrated, 0.2 LRA, true peak 1.1 dBTP (over 0.0 dBTP \u2014 requires limiter action). PLR is 10.8 LU, in the 8\u201314 LU typical mastered range.",
+ "grounding": {
+ "phase1Fields": [
+ "lufsIntegrated",
+ "lufsRange",
+ "truePeak",
+ "plr"
+ ],
+ "segmentIndexes": [
+ 0,
+ 1
+ ]
+ }
+ }
+ ],
+ "routingBlueprint": {
+ "sidechainSource": "",
+ "sidechainTargets": [],
+ "returns": [
+ {
+ "name": "Dub Reverb",
+ "purpose": "Short, dry track (reverbDetail.isWet false, rt60 null, measured false) means all space must come from a send reverb. Route Acid Bass and Supersaw Pad to this return at low send amounts to add dub-style room depth without washing the tightly limited master.",
+ "sendSources": [
+ "Acid Bass",
+ "Supersaw Pad"
+ ],
+ "deviceFocus": "Hybrid Reverb \u2014 use a small room or plate preset, keep Decay short (0.4\u20130.8 s to stay below the measured 0.0 LRA tight loudness), High Cut at 4\u20136 kHz for a dark dub tail.",
+ "levelGuidance": "Send from Acid Bass at -18 to -14 dB; Supersaw Pad at -20 to -16 dB. Keep return fader low so reverb sits in the back."
+ },
+ {
+ "name": "Acid Filter Send",
+ "purpose": "Parallel Auto Filter return exploiting the measured acid resonance (isAcid true, resonanceLevel 1.0, centroidOscillationHz 38 Hz oscillation). Sending a parallel dry signal through an aggressively resonant Auto Filter lets the squelch ride on top of the sustained bass without destroying its fundamental.",
+ "sendSources": [
+ "Acid Bass"
+ ],
+ "deviceFocus": "Auto Filter with Lowpass Filter Type, Resonance at maximum, LFO Rate near 38 Hz centroid oscillation, Drive for grit. Return fader sets blend depth.",
+ "levelGuidance": "Send from Acid Bass at -12 to -8 dB. Adjust return fader to taste \u2014 the filtered signal should accent, not dominate."
+ }
+ ],
+ "notes": [
+ "Sidechain pumping confidence is 0.1225 (below 0.2 threshold) and pumpingRate is null \u2014 no sidechain routing is warranted; the low pumpingStrength of 0.1803 does not justify a Glue Compressor sidechain chain.",
+ "The track is fully mono (stereoWidth 0.0, bandCorrelations all 1.0) \u2014 no stereo bus or widening return is needed; any width added in the rebuild will exist only in the Live session, not in the reference.",
+ "The measured true peak of 1.1 dBTP exceeds 0 dBFS \u2014 a Limiter on the Master is mandatory before export."
+ ]
+ },
+ "warpGuide": {
+ "fullTrack": {
+ "warpMode": "Complex Pro",
+ "settings": "Formants enabled; Transients off to preserve the heavy-limited sustain character",
+ "reason": "The integrated loudness is -9.7 LUFS with 0.2 LRA \u2014 an extremely dense, limited signal. Complex Pro best preserves the tonal character of heavily processed full-mix material at this density."
+ },
+ "drums": {
+ "warpMode": "Beats",
+ "settings": "Transient Envelope 100, Decay Time to taste",
+ "reason": "The kick has a measured 80 Hz distorted fundamental with high transient density \u2014 Beats mode preserves the attack integrity at 124.1 BPM without smearing the sub transients."
+ },
+ "bass": {
+ "warpMode": "Tones",
+ "settings": "Grain Size Auto",
+ "reason": "The bass is 'sustained' type with a 1000 ms decay and a 103 Hz fundamental \u2014 Tones mode tracks the dominant low pitch and preserves the sustained low-end shape without the artifacts that Beats or Complex would introduce on a held note."
+ },
+ "melodic": {
+ "warpMode": "Tones",
+ "settings": "Grain Size Auto; watch for vibrato artefacts \u2014 vibratoPresent is false so this is not a concern",
+ "reason": "The supersaw pad and any melodic content are sustained harmonic layers in A Minor. Tones mode preserves harmonic integrity for these held-pitch elements."
+ },
+ "rationale": "The fully mono, heavily limited reference (stereoWidth 0.0, lufsRange 0.2) means warp artefacts will be immediately audible in mono. Complex Pro on the full track avoids phase smearing. Beats on the kick stem and Tones on bass and melodic stems maintain element integrity when working with isolated clips during reconstruction."
+ },
+ "detectedCharacteristics": [
+ {
+ "name": "Fully Mono Signal",
+ "confidence": "HIGH",
+ "explanation": "stereoWidth is 0.0 and stereoCorrelation is 1.0 across the full duration and all seven frequency bands including brilliance. Every windowed correlationCurve entry is 1.0. This is a perfect mono signal."
+ },
+ {
+ "name": "Acid Bass Filter Movement",
+ "confidence": "HIGH",
+ "explanation": "acidDetail.isAcid is true with confidence 0.61, resonanceLevel 1.0 (maximum), and a centroidOscillationHz of 38 Hz. The bassDetail shows a sustained type with 1000 ms decay \u2014 consistent with a held 303-style bass note being filtered rather than a plucked sequence."
+ },
+ {
+ "name": "8-Voice Supersaw Layer",
+ "confidence": "HIGH",
+ "explanation": "supersawDetail.isSupersaw is true with confidence 0.87, voiceCount 8, avgDetuneCents 27.4, and spectralComplexity 7.6. These values are consistent with a detuned stacked-oscillator pad dominating the mid and high spectral content."
+ },
+ {
+ "name": "Heavily Distorted Kick at 80 Hz",
+ "confidence": "HIGH",
+ "explanation": "kickDetail.fundamentalHz is 80 Hz, isDistorted is true, and THD is 0.43. kickCount is 81 across 15.5 seconds, confirming reliable measurement. The 80 Hz fundamental places the kick in the standard/909 register with significant harmonic saturation."
+ },
+ {
+ "name": "Extreme Loudness / Wall-of-Sound Mastering",
+ "confidence": "HIGH",
+ "explanation": "lufsIntegrated is -9.7 with lufsRange of 0.2 LU \u2014 a near-zero dynamic range across both segments. truePeak is 1.1 dBTP (an inter-sample over), PLR is 10.8 LU, and saturationDetail.saturationLikely is false yet the signal is heavily limited. The lufsCurve.shortTerm holds flat at -9.7 \u00b1 0.1 throughout the entire 15.5 s duration."
+ }
+ ],
+ "arrangementOverview": {
+ "summary": "A 15.5-second, 8-bar dub-techno loop running at 124.1 BPM. Both measured segments hold identical loudness at -10.1 LUFS with 0.2 LRA \u2014 the loudness strategy is flat density throughout, consistent with a loop designed for DJ toolbox use. The novelty curve shows recurring high-energy peaks every ~3 bars (0.30 s, 2.72 s, 5.62 s, 8.52 s, 11.42 s, 14.33 s), suggesting a repeating beat-cycle structure rather than a building arrangement. The track has been detected in two structural segments by the DSP analyzer, dividing at 6.896 s (bar 4).",
+ "segments": [
+ {
+ "index": 0,
+ "startTime": 0,
+ "endTime": 6.896,
+ "lufs": -10.1,
+ "description": "Bars 1\u20134: Full loop with Kick, Acid Bass, and Supersaw Pad at full density. Novelty peaks at 0.30 s (strength 0.61), 2.72 s (strength 0.94), and 5.62 s (strength 0.85) mark recurring beat-cycle boundaries every ~2.7 s at 124.1 BPM. Spectral centroid of 1214 Hz with sub/low bass dominating at -9.4 and -9.3 dB.",
+ "spectralNote": "Sub bass (-9.4 dB) and low bass (-9.3 dB) are the loudest spectral bands; brilliance sits at -20.8 dB average, with time-series peaks reaching -13.5 dB on transients.",
+ "sceneName": "Full Loop A",
+ "abletonAction": "Launch all clips simultaneously on Kick, Acid Bass, and Supersaw Pad tracks at bar 1 downbeat (0.766 s)",
+ "automationFocus": "Acid Bass -> Auto Filter Frequency"
+ },
+ {
+ "index": 1,
+ "startTime": 6.896,
+ "endTime": 15.484,
+ "lufs": -10.1,
+ "description": "Bars 5\u20138: Continuation of the loop pattern at identical -10.1 LUFS. Novelty peaks at 8.52 s (strength 0.96) and 11.42 s (strength 0.85) and a maximum-strength peak at 14.33 s (strength 1.0) indicate the loop cycle reaching its highest novelty point near the end \u2014 possibly a filter open or density increase at bar 7/8 boundary.",
+ "spectralNote": "Spectral centroid rises slightly to 1249 Hz vs 1214 Hz in segment 0, and spectral rolloff increases to 1743 Hz vs 1667 Hz, suggesting a marginal brightness increase in the second half consistent with an acid filter opening.",
+ "sceneName": "Full Loop B",
+ "abletonAction": "Automate Auto Filter Frequency on Acid Bass from approximately 400 Hz to 1200 Hz across bars 5\u20138 to recreate the measured centroid oscillation pattern",
+ "automationFocus": "Acid Bass -> Auto Filter Frequency"
+ }
+ ],
+ "noveltyNotes": "Six novelty peaks spaced approximately every 2.7 seconds (matching ~2 bars at 124.1 BPM: quarter_note_ms = 60000/124.1 = 483 ms, 8 beats = 3.87 s, 5.5 beats \u2248 2.66 s) suggest kick-accent-driven transient density changes at the half-phrase level. In Live, place Scene Launch markers at these peaks (0.30 s, 2.72 s, 5.62 s) to align clip launches with natural energy spikes. The peak at 14.33 s with strength 1.0 is the strongest in the track \u2014 use it as the loop-out point or a filter automation peak on Acid Bass."
+ },
+ "sonicElements": {
+ "kick": "Distorted 80 Hz kick (kickDetail.fundamentalHz 80 Hz, THD 0.43, isDistorted true). The kick sits in the standard/909 register but with significant harmonic saturation baked in \u2014 the source already clips so no additional saturation should be applied. kickCount of 81 across 15.5 s at 124.1 BPM indicates four-on-the-floor with additional ghost hits or a dense kick pattern. Reconstruct with Operator (Oscillator A Coarse set near 80 Hz fundamental) run through the Drum Buss for Boom enhancement at 80 Hz, keeping Crunch off (harmonicRatio 0.88 is already high \u2014 Crunch would add unwanted grit to a clean-harmonic kick).",
+ "bass": "Sustained acid bass (bassDetail.type 'sustained', averageDecayMs 1000 ms, fundamentalHz 103 Hz, grooveType 'straight'). bassDetail.transientCount is 0 \u2014 the bass decay is unmeasured from transient analysis. The element is a continuous held tone rather than a plucked sequence, consistent with a 303-style sustained note pattern. acidDetail confirms filter movement (isAcid true, confidence 0.61, resonanceLevel 1.0). Reconstruct with Analog (Osc 1 Shape saw, Fil 1 Type lowpass) + Auto Filter post for the squelch modulation. Set Operator Oscillator A Fine to -5 cents to match the measured 438.73 Hz tuning reference.",
+ "melodicArp": "The pitch confidence is 0.0337 \u2014 this is critically low and far below the 0.15 threshold for reliable transcription. The 29 detected notes cluster tightly around MIDI 45 (A2), 47 (B2), and 48 (C3), which may reflect the bass fundamental and its harmonics rather than a separate melodic voice. These should be treated as atonal or experimental reference points only, not a definitive melody. No arpeggiator reconstruction is recommended from this data alone.",
+ "grooveAndTiming": "Four-on-the-floor kick pattern at 124.1 BPM (bpmConfidence 4.0). perDrumSwing.kick is 0.1561 (slight swing), perDrumSwing.snare is 0.2457 (moderate), and perDrumSwing.hihat is 0.3246 (noticeable swing on the hi-hats). The tempoCurve shows an initial ramp from 136 BPM at 0.57 s settling to 123 BPM by 1.45 s \u2014 this is a measurement artifact at the track start, not a real ritardando. Set Live's global tempo to 124.1 BPM and program the hi-hat MIDI with approximately 16% swing to match the measured hihat swing.",
+ "effectsAndTexture": "No reverb is present (reverbDetail.isWet false, measured false). No gating detected (effectsDetail.gatingDetected false). The acid filter movement (centroidOscillationHz 38 Hz) is the primary textural motion \u2014 a slow LFO at ~38 Hz driving Auto Filter cutoff. synthesisCharacter.oddToEvenRatio is 2.27 (biasing toward odd harmonics / square-wave character), which is consistent with a saw wave being heavily filtered. The supersaw's spectralComplexity of 7.6 contributes the dense mid-range texture. textureCharacter.textureScore is 0.33 with relatively uniform flatness across bands (low 0.34, mid 0.31, high 0.28) \u2014 a moderately complex, not noise-dominated texture.",
+ "widthAndStereo": "The track is completely mono: stereoWidth 0.0, stereoCorrelation 1.0, subBassMono true, and all bandCorrelations at 1.0. The correlationCurve holds at 1.0/1.0 throughout every windowed measurement. Any stereo widening in the Live reconstruction will be a creative departure from the reference \u2014 label it clearly. Utility is not needed for bass mono correction since subBassMono is already true.",
+ "harmonicContent": "Key is A Minor (keyConfidence 0.65, moderate). Chord timeline shows a G major reading for the full 15.5 s (chordTimelineAgreement is false \u2014 the timeline disagrees with the dominant chord summary which lists F, Am, G, Em). Treat the harmonic content as ambiguous: the track likely oscillates between F major and Am (dominant in the chordSequence array) over a static bass drone. Use sus2 or minor voicings to stay neutral. chordDetail.chordChangeCount is 0 \u2014 a completely static harmonic bed, supporting pad/drone treatments over active chord-stab reconstruction."
+ },
+ "mixAndMasterChain": [
+ {
+ "order": 1,
+ "device": "Operator",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Kick",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Oscillator A Coarse",
+ "value": "80 Hz equivalent (C2 = 65.4 Hz + tune up; or use Fixed mode and enter 80 Hz)",
+ "reason": "kickDetail.fundamentalHz measures 80 Hz, placing the kick in the standard/909 register, so Operator's oscillator must be pitched to match this fundamental before any further processing.",
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.kickCount"
+ ]
+ },
+ {
+ "order": 2,
+ "device": "Operator",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Kick",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Oscillator A Fine",
+ "value": "-5 cents",
+ "reason": "tuningCents is -5.0 (tuningFrequency 438.73 Hz), so setting Fine to -5 cents on the kick oscillator matches the reference source's pitch offset from A440.",
+ "phase1Fields": [
+ "tuningCents",
+ "tuningFrequency"
+ ]
+ },
+ {
+ "order": 3,
+ "device": "Drum Buss",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Drum Bus",
+ "workflowStage": "MIX",
+ "parameter": "Boom Frequency",
+ "value": "80 Hz",
+ "reason": "kickDetail.fundamentalHz is 80 Hz \u2014 tuning Drum Buss Boom to the kick's measured fundamental ensures the sub enhancement reinforces the actual kick pitch rather than a generic 50 Hz default.",
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.harmonicRatio"
+ ]
+ },
+ {
+ "order": 4,
+ "device": "Drum Buss",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Drum Bus",
+ "workflowStage": "MIX",
+ "parameter": "Crunch",
+ "value": "0 (fully off)",
+ "reason": "kickDetail.harmonicRatio is 0.88 (high \u2014 clean/sub-heavy classification), so adding Crunch would introduce unwanted grit to an already harmonically clean kick. kickDetail.isDistorted is true, meaning the source already carries its own THD of 0.43.",
+ "phase1Fields": [
+ "kickDetail.harmonicRatio",
+ "kickDetail.isDistorted"
+ ]
+ },
+ {
+ "order": 5,
+ "device": "Analog",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Osc 1 Shape",
+ "value": "Saw (sawtooth)",
+ "reason": "synthesisCharacter.oddToEvenRatio is 2.27, biasing toward odd harmonics. A sawtooth oscillator (which contains both odd and even harmonics) filtered heavily by a resonant lowpass will create the measured odd-harmonic dominated spectrum after significant low-pass filtering.",
+ "phase1Fields": [
+ "synthesisCharacter.oddToEvenRatio",
+ "acidDetail.isAcid"
+ ]
+ },
+ {
+ "order": 6,
+ "device": "Analog",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Osc 1 Detune",
+ "value": "-5 cents",
+ "reason": "tuningCents is -5.0 cents from A440 (tuningFrequency 438.73 Hz) \u2014 matching the reference source tuning requires detuning the oscillator by -5 cents from standard.",
+ "phase1Fields": [
+ "tuningCents",
+ "tuningFrequency"
+ ]
+ },
+ {
+ "order": 7,
+ "device": "Auto Filter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Resonance",
+ "value": "Maximum (or near-maximum)",
+ "reason": "acidDetail.resonanceLevel is 1.0 (measured maximum) and acidDetail.confidence is 0.61, confirming a high-resonance acid squelch character on the bass element. The Auto Filter Resonance should be set near maximum to recreate this measured 303-style character.",
+ "phase1Fields": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.confidence"
+ ]
+ },
+ {
+ "order": 8,
+ "device": "Auto Filter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "LFO Rate",
+ "value": "38 Hz (free-running, not synced)",
+ "reason": "acidDetail.centroidOscillationHz is 38 Hz \u2014 the measured spectral centroid oscillation rate defines the Auto Filter LFO speed needed to recreate the filter-sweep movement of the acid bass.",
+ "phase1Fields": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.bassRhythmDensity"
+ ]
+ },
+ {
+ "order": 9,
+ "device": "Wavetable",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Unison Amount",
+ "value": "27.4 cents spread across 8 voices",
+ "reason": "supersawDetail.avgDetuneCents is 27.4 and voiceCount is 8 \u2014 Wavetable's Unison mode with Amount set to recreate 27.4 cents average detune across 8 stacked voices reproduces the measured supersaw density.",
+ "phase1Fields": [
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.voiceCount"
+ ]
+ },
+ {
+ "order": 10,
+ "device": "Wavetable",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Unison Mode",
+ "value": "Unison (Voices = 8)",
+ "reason": "supersawDetail.voiceCount is 8 and spectralComplexity is 7.6 \u2014 an 8-voice Wavetable unison patch matches the measured voice stack that generates this high spectral complexity.",
+ "phase1Fields": [
+ "supersawDetail.voiceCount",
+ "supersawDetail.spectralComplexity"
+ ]
+ },
+ {
+ "order": 11,
+ "device": "Glue Compressor",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Synth Bus",
+ "workflowStage": "MIX",
+ "parameter": "Release",
+ "value": "Auto",
+ "reason": "bassDetail.type is 'sustained' with averageDecayMs 1000 ms (sustained band: 600+ ms) \u2014 with bassDetail.transientCount at 0 the bass decay cannot be precisely measured, so Auto Release on the Glue Compressor is the safest choice to avoid the compressor working against an unmeasured sustain tail.",
+ "phase1Fields": [
+ "bassDetail.type",
+ "bassDetail.averageDecayMs"
+ ]
+ },
+ {
+ "order": 12,
+ "device": "EQ Eight",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Synth Bus",
+ "workflowStage": "MIX",
+ "parameter": "Band 1 Filter Type",
+ "value": "High-pass at 30 Hz, steep (12 dB/oct or 24 dB/oct)",
+ "reason": "spectralBalance.subBass is -9.4 dB \u2014 the sub bass is already very loud relative to the mix; a gentle high-pass below 30 Hz on the synth bus removes any DC offset or subsonic rumble from the Wavetable supersaw without touching the measured sub-bass energy from the kick.",
+ "phase1Fields": [
+ "spectralBalance.subBass",
+ "spectralBalance.lowBass"
+ ]
+ },
+ {
+ "order": 13,
+ "device": "Limiter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Master",
+ "workflowStage": "MASTER",
+ "parameter": "Ceiling",
+ "value": "-0.3 dBTP",
+ "reason": "truePeak is 1.1 dBTP (an inter-sample over above 0.0 dBTP full scale) \u2014 a true-peak Limiter at -0.3 dBTP is mandatory to correct the measured inter-sample overs before export. PLR of 10.8 LU places this in the typical mastered range where a transparent Limiter fits.",
+ "phase1Fields": [
+ "truePeak",
+ "plr"
+ ]
+ },
+ {
+ "order": 14,
+ "device": "Limiter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Master",
+ "workflowStage": "MASTER",
+ "parameter": "True Peak",
+ "value": "On",
+ "reason": "truePeak of 1.1 dBTP is a measured inter-sample over \u2014 enabling True Peak mode in the Limiter ensures inter-sample reconstruction overs at 4x oversampling are caught on lossy export (AAC/MP3 encoding raises true peaks further).",
+ "phase1Fields": [
+ "truePeak",
+ "saturationDetail.clippedSampleCount"
+ ]
+ }
+ ],
+ "secretSauce": {
+ "title": "Mono Acid-Filter Sidechain Illusion via LFO-Pumped Auto Filter",
+ "icon": "303+MONO",
+ "explanation": "This track is fully mono (stereoWidth 0.0, stereoCorrelation 1.0) with a near-zero loudness range (lufsRange 0.2 LU) \u2014 meaning all perceived motion and depth must come from spectral animation rather than stereo or dynamic contrast. The acid filter (isAcid true, resonanceLevel 1.0, centroidOscillationHz 38 Hz) running on a sustained bass (averageDecayMs 1000 ms, type 'sustained') creates the illusion of forward motion in a fully compressed, fully mono signal. The secret is stacking the Auto Filter's LFO movement at 38 Hz with a slow envelope follower modulating the filter depth, so the squelch breathes in response to the kick transient density (transientDensityDetail.lowBass.eventCount 94 events) rather than a fixed LFO. This converts a static loop into a dynamically reactive texture without widening or dynamic headroom.",
+ "implementationSteps": [
+ "Set Auto Filter on Acid Bass to Lowpass, Resonance at maximum, Frequency starting around 400 Hz",
+ "Set LFO Rate to 38 Hz (matching acidDetail.centroidOscillationHz) with LFO Amount around 40\u201360%",
+ "Insert Envelope Follower (M4L) sidechain from the Kick track output into Auto Filter LFO Amount via Max for Live routing, so kick transients cause a momentary LFO depth bump",
+ "Set the Envelope Follower Rise to ~5 ms, Fall to ~80 ms to match the kick's measured transient density cycle at 124.1 BPM (quarter_note_ms = 483 ms)",
+ "Automate Auto Filter Frequency from 300 Hz to 1200 Hz across the 8-bar loop, peaking at the 14.33 s novelty maximum (strength 1.0)"
+ ],
+ "workflowSteps": [
+ {
+ "step": 1,
+ "trackContext": "Acid Bass",
+ "device": "Auto Filter",
+ "parameter": "Filter Type",
+ "value": "Lowpass",
+ "instruction": "Set Filter Type to Lowpass to recreate the 303-style squelch character indicated by the acid detection.",
+ "measurementJustification": "acidDetail.isAcid is true with confidence 0.61 and resonanceLevel 1.0 \u2014 a lowpass filter in maximum-resonance mode is the correct reconstruction for this measured bass character.",
+ "phase1Fields": [
+ "acidDetail.isAcid",
+ "acidDetail.resonanceLevel"
+ ]
+ },
+ {
+ "step": 2,
+ "trackContext": "Acid Bass",
+ "device": "Auto Filter",
+ "parameter": "Resonance",
+ "value": "Maximum",
+ "instruction": "Turn Resonance to maximum to recreate the measured peak resonance level.",
+ "measurementJustification": "acidDetail.resonanceLevel is 1.0 (the maximum measured value), directly setting the Resonance parameter target.",
+ "phase1Fields": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.confidence"
+ ]
+ },
+ {
+ "step": 3,
+ "trackContext": "Acid Bass",
+ "device": "Auto Filter",
+ "parameter": "LFO Rate",
+ "value": "38 Hz",
+ "instruction": "Set LFO Rate to 38 Hz free-running (not synced to BPM) to match the measured centroid oscillation rate of the acid movement.",
+ "measurementJustification": "acidDetail.centroidOscillationHz is 38 Hz \u2014 this is the measured rate at which the spectral centroid oscillates, defining the required LFO speed for a faithful reconstruction.",
+ "phase1Fields": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.bassRhythmDensity"
+ ]
+ },
+ {
+ "step": 4,
+ "trackContext": "Acid Bass",
+ "device": "Envelope Follower",
+ "parameter": "Rise",
+ "value": "5 ms",
+ "instruction": "Insert an M4L Envelope Follower on the Acid Bass track, sidechain-triggered by the Kick track, with Rise set to 5 ms to catch the kick attack.",
+ "measurementJustification": "transientDensityDetail.lowBass.eventCount is 94 events in 15.5 s (6.07 per second), indicating the kick-bass transient interaction is dense enough for the Envelope Follower to meaningfully modulate the filter. A 5 ms rise matches the fast logAttackTime of -4.70 (dynamicCharacter.logAttackTime).",
+ "phase1Fields": [
+ "transientDensityDetail.lowBass.eventCount",
+ "dynamicCharacter.logAttackTime"
+ ]
+ },
+ {
+ "step": 5,
+ "trackContext": "Master",
+ "device": "Limiter",
+ "parameter": "Ceiling",
+ "value": "-0.3 dBTP with True Peak On",
+ "instruction": "Place Limiter last in the Master chain with Ceiling at -0.3 dBTP and True Peak enabled to correct the measured inter-sample over at 1.1 dBTP.",
+ "measurementJustification": "truePeak is 1.1 dBTP \u2014 an inter-sample over that will distort on lossy export. The PLR of 10.8 LU is within the typical mastered range where a transparent Limiter ceiling corrects the defect without over-squashing transients.",
+ "phase1Fields": [
+ "truePeak",
+ "plr"
+ ]
+ }
+ ]
+ },
+ "confidenceNotes": [
+ {
+ "field": "BPM",
+ "value": "124.1 BPM",
+ "reason": "bpmConfidence is 4.0 (normalized value well above the 0.4 threshold \u2014 high confidence). bpmAgreement is true (bpmPercival 123.8 \u2248 bpmRawOriginal 124.1). The tempoCurve shows an apparent ramp from 136 BPM at t=0.57 s to 123 BPM by t=1.45 s \u2014 this is a measurement edge artifact at the track start, not a real tempo change; the curve holds at 123 BPM for the remaining 13+ seconds. The rebuild plan uses 124.1 BPM (the authoritative measurement) as the Live session tempo."
+ },
+ {
+ "field": "Key / Harmonic Reading",
+ "value": "A Minor (keyConfidence 0.65)",
+ "reason": "keyConfidence 0.65 is below the 0.7 threshold for full commitment. Both segments return A Minor at 0.65\u20130.66 confidence. chordTimelineAgreement is false \u2014 the Viterbi timeline reads G major for the full track while the chordSequence array shows alternating G, F, and Am. The chord detection on a heavily filtered, mono, limited loop is unreliable. Treat A Minor as the working key but keep pad and melodic voicings harmonically neutral (sus2 or minor) rather than committing to a specific chord."
+ },
+ {
+ "field": "Pitch Transcription / Melody",
+ "value": "pitchConfidence 0.0337 \u2014 critically unreliable",
+ "reason": "melodyDetail.pitchConfidence is 0.0337, far below the 0.15 threshold for reliable note data. The 29 detected notes (MIDI 45\u201348, A2\u2013C3) cluster around what is likely the bass fundamental and its harmonics, not a separate melodic voice. No melodic reconstruction should be built from this data; the notes are offered as experimental reference points only. sourceSeparated is false, confirming the pitch extractor ran on the full mix."
+ },
+ {
+ "field": "Sidechain / Pumping",
+ "value": "pumpingConfidence 0.1225 \u2014 too low to act on",
+ "reason": "sidechainDetail.pumpingConfidence is 0.1225 (below the 0.2 omission threshold) and pumpingRate is null. pumpingStrength is 0.1803. No sidechain routing has been recommended. The measured envelope shape shows a regular ~4-step cycle (envelopeShape32 peaks at steps 4, 12, 20, 28) consistent with four-on-the-floor kick accent shaping, but the low confidence means this could be the kick's own amplitude modulation rather than a true sidechain pump."
+ },
+ {
+ "field": "Time Signature",
+ "value": "4/4 (timeSignatureConfidence 0.0)",
+ "reason": "timeSignature is 4/4 from onset_autocorrelation_low_margin with timeSignatureConfidence 0.0 \u2014 effectively unconfirmed by the measurement algorithm. However, the rhythmDetail.beatGrid, downbeats, phraseGrid (8 bars, 4 beats per bar), and beatsLoudness.patternBeatsPerBar all independently confirm a 4/4 structure. The 4/4 reading is treated as reliable despite the confidence score of 0.0 from the primary method."
+ },
+ {
+ "field": "Downbeat / Bar-1 Phase",
+ "value": "downbeatConfidence 0.0067 \u2014 uncertain",
+ "reason": "rhythmDetail.downbeatConfidence is 0.0067, which is far below the ~0.4 threshold for confident bar-1 identification. The downbeat source is kick_accent, and on a four-on-the-floor pattern where every beat carries a kick, distinguishing beat 1 from beats 2/3/4 is inherently ambiguous. Scene launch points and arrangement markers should be treated as approximate; the bar grid is solid but which beat is 'bar 1' carries uncertainty."
+ },
+ {
+ "field": "Reverb / Space",
+ "value": "No reverb measured (reverbDetail.measured false)",
+ "reason": "reverbDetail.isWet is false, rt60 is null, and measured is false. The track is either fully dry or the reverb tail is inaudible below the analysis threshold. All spatial recommendations (the Dub Reverb return) are additive production choices, not reconstructions of a measured reverb. This is consistent with the extremely flat lufsCurve (0.2 LRA) which would mask any reverb decay."
+ },
+ {
+ "field": "Supersaw Voice Count",
+ "value": "8 voices (supersawDetail.confidence 0.87)",
+ "reason": "supersawDetail.isSupersaw is true with confidence 0.87 and voiceCount 8. This is a high-confidence reading. avgDetuneCents 27.4 is a typical production detune range for a full supersaw. The underlying spectralComplexity of 7.6 corroborates a dense multi-voice oscillator stack."
+ }
+ ],
+ "abletonRecommendations": [
+ {
+ "device": "Auto Filter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "category": "EFFECTS",
+ "parameter": "Resonance",
+ "value": "Maximum; Filter Type Lowpass; LFO Rate 38 Hz; LFO Amount 40\u201360%",
+ "reason": "acidDetail.isAcid is true with resonanceLevel 1.0 and centroidOscillationHz 38 Hz \u2014 the maximum resonance and a 38 Hz LFO directly reconstruct the measured 303-style acid squelch on the sustained bass.",
+ "advancedTip": "At 124.1 BPM the quarter note is ~483 ms; a 38 Hz LFO completes approximately 18 cycles per quarter note, creating a sub-audio tremolo on the filter rather than a swept-filter effect. For a slower, more musical sweep, reduce LFO Rate to 0.5\u20132 Hz and use the Envelope Amount parameter to follow the kick's transient instead.",
+ "phase1Fields": [
+ "acidDetail.isAcid",
+ "acidDetail.resonanceLevel",
+ "acidDetail.centroidOscillationHz"
+ ]
+ },
+ {
+ "device": "Operator",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Kick",
+ "workflowStage": "SOUND_DESIGN",
+ "category": "SYNTHESIS",
+ "parameter": "Oscillator A Coarse",
+ "value": "Fixed 80 Hz (use Oscillator A Fixed mode)",
+ "reason": "kickDetail.fundamentalHz is 80 Hz with kickCount 81 \u2014 a reliable measurement confirming the kick's tuned sub fundamental. Setting Oscillator A to Fixed mode at 80 Hz matches the reference kick pitch precisely.",
+ "advancedTip": "kickDetail.isDistorted is true and THD is 0.43 \u2014 do NOT add a Saturator after the Operator kick, as the distortion is already baked into the source. Instead, use Operator's Filter Drive lightly (3\u20136 dB) to add harmonic grit inside the instrument rather than from an external device, keeping the kick's harmonicRatio of 0.88 intact.",
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.thd",
+ "kickDetail.isDistorted"
+ ]
+ },
+ {
+ "device": "Drum Buss",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Drum Bus",
+ "workflowStage": "MIX",
+ "category": "DYNAMICS",
+ "parameter": "Boom Frequency",
+ "value": "80 Hz; Crunch = 0",
+ "reason": "kickDetail.fundamentalHz is 80 Hz and harmonicRatio is 0.88 \u2014 tuning Drum Buss Boom to the measured fundamental enhances the kick sub while the high harmonicRatio means Crunch must stay off to avoid adding grit to an already clean-harmonic kick.",
+ "advancedTip": "Set Boom Decay short (50\u2013100 ms) so the sub enhancement decays before the next kick at 124.1 BPM (483 ms per beat). Since the track is mono, the Boom enhancement will appear in the centre and can easily overload the Limiter on Master \u2014 monitor the Limiter gain-reduction meter after enabling Boom.",
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.harmonicRatio",
+ "kickDetail.isDistorted"
+ ]
+ },
+ {
+ "device": "Wavetable",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "SOUND_DESIGN",
+ "category": "SYNTHESIS",
+ "parameter": "Unison Amount",
+ "value": "27.4 cents average detune; Voices = 8; Unison Mode = Unison",
+ "reason": "supersawDetail.avgDetuneCents is 27.4 and voiceCount is 8 with confidence 0.87 \u2014 Wavetable's 8-voice unison mode spread to 27.4 cents directly reconstructs the measured supersaw density and spectralComplexity of 7.6.",
+ "advancedTip": "Use a Saw-based wavetable for Oscillator 1 and optionally a slight wavetable position offset (Oscillator 1 Position ~10%) to add subtle timbral movement without automation. At 27.4 cents average detune the pad will naturally produce beating artefacts around 27 Hz \u2014 this is perceptible at bass frequencies, so high-pass the pad above 100 Hz to prevent it from muddying the Acid Bass's 103 Hz fundamental.",
+ "phase1Fields": [
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.voiceCount",
+ "supersawDetail.spectralComplexity"
+ ]
+ },
+ {
+ "device": "Limiter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Master",
+ "workflowStage": "MASTER",
+ "category": "MASTERING",
+ "parameter": "Ceiling",
+ "value": "-0.3 dBTP; True Peak = On; Release = 150 ms",
+ "reason": "truePeak is 1.1 dBTP \u2014 a measured inter-sample over above 0 dBFS full scale \u2014 and PLR is 10.8 LU (typical mastered range). A Limiter with True Peak mode at -0.3 dBTP corrects the measured overs before export.",
+ "advancedTip": "The lufsCurve.shortTerm is flat at -9.7 \u00b1 0.1 LU throughout the entire 15.5 s \u2014 this is already a heavily limited signal (lufsRange 0.2 LU). Set Limiter Release to 150 ms to avoid adding a secondary pump artifact on top of the existing limiting. If the gain reduction exceeds 1.5 dB on the Limiter, the upstream chain is hitting too hard and you should reduce the Glue Compressor makeup gain on Synth Bus first.",
+ "phase1Fields": [
+ "truePeak",
+ "plr",
+ "lufsIntegrated"
+ ]
+ },
+ {
+ "device": "Utility",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "MIX",
+ "category": "STEREO",
+ "parameter": "Stereo Width",
+ "value": "0% (mono collapse)",
+ "reason": "stereoDetail.stereoWidth is 0.0 and stereoCorrelation is 1.0 across the entire track and all frequency bands \u2014 the reference is fully mono. Any Wavetable supersaw output is naturally stereo; insert Utility at the end of the Supersaw Pad chain and set Stereo Width to 0% to match the mono reference.",
+ "advancedTip": "If you want to introduce creative stereo widening in your rebuild, set Utility Stereo Width on the Supersaw Pad to 100\u2013120% but monitor the Master in mono (Utility on Master set to Stereo Width 0%) to verify the widened pad folds back without phase issues. The fully mono reference means there is no stereo information to preserve \u2014 all width is your addition.",
+ "phase1Fields": [
+ "stereoDetail.stereoWidth",
+ "stereoDetail.stereoCorrelation",
+ "stereoDetail.bandCorrelations.brilliance"
+ ]
+ },
+ {
+ "device": "Analog",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "category": "SYNTHESIS",
+ "parameter": "Fil 1 Type",
+ "value": "Lowpass 24 dB; Fil 1 Resonance high (0.7\u20130.9 of maximum); Amp 1 Sustain = maximum (sustained note)",
+ "reason": "bassDetail.type is 'sustained' with averageDecayMs 1000 ms and acidDetail.resonanceLevel 1.0 \u2014 Analog's 24 dB lowpass with near-maximum resonance and a fully sustained amp envelope reconstructs the measured held-note acid character at the measured 103 Hz fundamental.",
+ "advancedTip": "bassDetail.fundamentalHz is 103 Hz \u2014 set Analog Osc 1 to roughly G#2/Ab2 (103.8 Hz) without pitch correction, as the measured tuningCents is -5 cents from A440. Cross-reference: an A2 (110 Hz) detuned by -5 cents lands at ~109.7 Hz, which is above the measured 103 Hz \u2014 manually tune the oscillator to 103 Hz using Osc 1 Semi and Osc 1 Detune combination.",
+ "phase1Fields": [
+ "bassDetail.averageDecayMs",
+ "bassDetail.type",
+ "bassDetail.fundamentalHz"
+ ]
+ },
+ {
+ "device": "Glue Compressor",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Synth Bus",
+ "workflowStage": "MIX",
+ "category": "DYNAMICS",
+ "parameter": "Release",
+ "value": "Auto; Threshold -20 dB; Ratio 2:1",
+ "reason": "bassDetail.type is 'sustained' (averageDecayMs 1000 ms) and bassDetail.transientCount is 0 \u2014 the sustained bass has no measured transients, so a Glue Compressor with Auto Release provides gentle level glue without needing precision release timing. Threshold -20 dB and 2:1 ratio provide gentle bus cohesion matching the measured -9.7 LUFS integrated loudness floor.",
+ "advancedTip": "Monitor the Glue Compressor's gain reduction \u2014 at 2:1 with Threshold -20 dB on a signal already at -9.7 LUFS, you may see 2\u20134 dB of gain reduction. Keep Soft Clip off; the track's distortion comes from the kick (kickDetail.isDistorted true), not the synth bus, and engaging Soft Clip would add unwanted harmonic content to the Wavetable pad.",
+ "phase1Fields": [
+ "bassDetail.type",
+ "bassDetail.averageDecayMs",
+ "lufsIntegrated"
+ ]
+ },
+ {
+ "device": "Scale",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "ARRANGEMENT",
+ "category": "MIDI",
+ "parameter": "Scale Name",
+ "value": "Natural Minor; Base = A",
+ "reason": "key is A Minor with keyConfidence 0.65 \u2014 just below the 0.7 commit threshold but consistent across both structural segments (segmentKey[0] and [1] both return A Minor at 0.65\u20130.66). Using Scale with Natural Minor and Base A locks MIDI content to A Minor while hedging against the slight confidence gap; setting Use Current Scale = Off ensures the device works independently of the session's global scale.",
+ "advancedTip": "keyConfidence is 0.65 \u2014 slightly below the 0.7 threshold for full commitment. If the rebuilt MIDI sounds harmonically clashing, loosen Scale's Quantizer approach by using lower Quantizer Strength (if using Auto Shift instead) or check the chordDetail: the chordTimeline reads G major for the full track (chordTimelineAgreement false) which hints the actual tonal center may function more as G Mixolydian than A Aeolian. Try both and compare against the reference.",
+ "phase1Fields": [
+ "key",
+ "keyConfidence"
+ ]
+ },
+ {
+ "device": "EQ Eight",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "MIX",
+ "category": "EQ",
+ "parameter": "Band 1 Filter Type",
+ "value": "High-pass at 100 Hz, Q 0.7",
+ "reason": "spectralBalance.lowMids is -30.1 dB (significantly recessed vs sub/low bass at -9.4/-9.3 dB) and bassDetail.fundamentalHz is 103 Hz \u2014 high-passing the Supersaw Pad above 100 Hz prevents the detuned unison voices from creating beating artifacts that conflict with the Acid Bass's measured 103 Hz fundamental.",
+ "advancedTip": "The spectralBalanceTimeSeries shows brilliance band values reaching as high as -13.5 dB at t=0.22 s \u2014 this is the supersaw's upper harmonic content. If the pad sounds too bright after high-passing the lows, add a gentle high-shelf cut at 8 kHz (-2 to -3 dB) to tame the measured brilliance energy without dulling the characteristic supersaw shimmer.",
+ "phase1Fields": [
+ "spectralBalance.lowMids",
+ "spectralBalance.subBass",
+ "bassDetail.fundamentalHz"
+ ]
+ },
+ {
+ "device": "Hybrid Reverb",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Return:Dub Reverb",
+ "workflowStage": "MIX",
+ "category": "EFFECTS",
+ "parameter": "Decay",
+ "value": "0.5\u20130.8 s; High Cut 4000 Hz; Dry/Wet = 100% (return track)",
+ "reason": "reverbDetail.isWet is false and measured is false \u2014 the reference is completely dry, so all reverb must be added via a send/return to preserve the option of bypassing it. A short 0.5\u20130.8 s decay with a dark high cut at 4 kHz creates dub-style depth consistent with the measured dub-techno genre classification.",
+ "advancedTip": "Since the track is fully mono (stereoWidth 0.0, stereoCorrelation 1.0), set Hybrid Reverb's Stereo to centre (or fold to mono with a Utility on the return) so the reverb tail does not introduce phantom stereo width. At 124.1 BPM the bar is 1.933 s \u2014 keep Decay below 1.0 s to prevent reverb buildup from washing the tight -9.7 LUFS loudness floor.",
+ "phase1Fields": [
+ "reverbDetail.isWet",
+ "lufsIntegrated",
+ "genreDetail.genre"
+ ]
+ },
+ {
+ "device": "Echo",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "MIX",
+ "category": "EFFECTS",
+ "parameter": "Delay Time (L)",
+ "value": "1/8 (dotted) synced to 124.1 BPM; Feedback 25%; Sync = On",
+ "reason": "bpm is 124.1 \u2014 at this tempo a dotted-eighth echo (dotted_eighth_ms = 60000/124.1 * 0.75 = 362 ms) adds a subtle dub echo to the supersaw pad that locks to the measured beat grid. The rhythmDetail.tempoCurve stabilises at 123 BPM after the initial ramp, making tempo-synced Echo appropriate over free-running delay.",
+ "advancedTip": "Set Echo Filter Frequency to approximately 4 kHz and Filter On to true so the echo repeats roll off the high end \u2014 this keeps the echo tail from competing with the dry supersaw's spectralBalance.brilliance (-20.8 dB average). At 25% Feedback the echo decays within 2 bars, maintaining the measured flat -9.7 LUFS loudness without audible buildup.",
+ "phase1Fields": [
+ "bpm",
+ "rhythmDetail.tempoCurve",
+ "spectralBalance.brilliance"
+ ]
+ }
+ ],
+ "audioObservations": {
+ "soundDesignFingerprint": "A mono dub-techno loop built from three principal layers: a driven, slightly distorted sub-kick with a deep thud and fast decay; a long, held acid bass line with maximum resonance filter movement at a rapid (~38 Hz) sub-audio rate creating a continuous metallic buzz rather than a swept filter; and an 8-voice supersaw pad with heavy detune creating a thick, smeared harmonic cloud in the mids and upper mids. All elements have been heavily limited to a wall-of-sound density.",
+ "elementCharacter": [
+ {
+ "element": "Kick",
+ "description": "The kick has a tight, punchy transient with a slightly gritty THD texture audible in the body \u2014 the distortion is subtle but present, adding a worn, slightly overdriven character. The sub fundamental sits firmly around 80 Hz with a fast decay consistent with a punchy, driven 909-style kick that has been saturated, not a clean sub thud."
+ },
+ {
+ "element": "Acid Bass",
+ "description": "The bass is a sustained, held note rather than a melodic sequence \u2014 the pitch appears static or nearly static while the filter performs a very rapid oscillatory sweep (measured at ~38 Hz centroid oscillation). This creates a continuous, metallic buzzing quality rather than a traditional slow 303-style filter sweep. The resonance is at or near maximum, generating a sharp self-oscillation tone at the filter cutoff that is audible as a high-pitched whine over the fundamental."
+ },
+ {
+ "element": "Supersaw Pad",
+ "description": "A dense, detuned oscillator stack with noticeable beating between the eight voices \u2014 the chorus-like detune wobble is audible as a slow amplitude tremor across the mid and upper frequency range. The texture is thick and slightly harsh in the upper mids, with no audible filter movement; the pad appears fully open. It contributes the bulk of the brilliance energy measured at up to -13.5 dB on transients."
+ },
+ {
+ "element": "Hi-hat / Percussion",
+ "description": "A closed hi-hat pattern is audible with short, dry transients (hihatDetail.meanDecaySeconds 0.048 s \u2014 closed hat character) appearing at roughly 2 hits per second (hitsPerSecond 2.07). The hats are quiet relative to the kick and bass but provide the high-frequency accent pattern that gives the groove its rhythmic definition above 2 kHz."
+ }
+ ],
+ "productionSignatures": [
+ "Fully mono mixdown \u2014 no stereo width at any frequency band, suggesting a deliberate mono master or a mono-recorded chain",
+ "Wall-of-sound limiting: lufsRange 0.2 LU across the full track, lufsCurve entirely flat within 0.2 dB variation",
+ "Acid filter at sub-audio rate (38 Hz) \u2014 creates timbral buzz rather than a musical sweep; an unusual application of 303-style processing",
+ "Heavy kick saturation (THD 0.43) applied at the source \u2014 the kick distortion is pre-limiter, giving it an analogue-worn character",
+ "No reverb or spatial processing detected \u2014 completely dry signal chain with all texture derived from synthesis and filter modulation"
+ ],
+ "mixContext": "The mix is a pure mono loop with all frequency content stacked vertically. Sub and low bass (-9.4 and -9.3 dB) dominate the spectrum, followed by the supersaw's mid and upper-mid content. The low-mids are heavily recessed (-30.1 dB) \u2014 a typical dub-techno scooped mid design. The limiting is brick-wall aggressive: the entire 15.5-second track holds within a 0.2 LU dynamic range, which is tighter than most mastered records. This is almost certainly a DJ tool or loop designed for blending over other material rather than standalone listening."
+ },
+ "styleProfile": {
+ "genre": "Dub-Techno",
+ "subGenre": "Ambient Techno",
+ "mood": [
+ "hypnotic",
+ "mechanical",
+ "dark",
+ "dense",
+ "monotone"
+ ],
+ "instruments": [
+ "synthesized kick drum",
+ "acid bass (303-style sustained)",
+ "8-voice supersaw pad",
+ "closed hi-hat"
+ ],
+ "productionTechniques": [
+ "wall-of-sound limiting (0.2 LU dynamic range)",
+ "mono mixdown",
+ "acid filter at sub-audio oscillation rate",
+ "kick saturation (THD 0.43)",
+ "heavily detuned supersaw (27.4 cents avg)",
+ " dry signal chain (no reverb)"
+ ],
+ "description": "A 124.1 BPM dub-techno loop in A Minor built entirely in mono with three core elements: a distorted 80 Hz kick, a maximum-resonance sustained acid bass with rapid filter oscillation, and an 8-voice detuned supersaw pad. The production targets extreme loudness (-9.7 LUFS, 0.2 LU LRA) and full mono compatibility \u2014 designed as a DJ tool rather than a standalone composition.",
+ "generationPrompt": "124 BPM dub-techno loop, A Minor, fully mono, distorted 909-style sub kick at 80 Hz, sustained acid bass with maximum resonance and rapid LFO filter at ~38 Hz, thick 8-voice detuned supersaw pad, brick-wall limited to -9.7 LUFS, no reverb, hypnotic and mechanical",
+ "authoritativeMeasurements": {
+ "bpm": 124.1,
+ "key": "A Minor",
+ "timeSignature": "4/4"
+ }
+ },
+ "recommendations": {
+ "version": "recommendations.v1",
+ "recommendations": [
+ {
+ "device": "Auto Filter",
+ "parameter": "Resonance",
+ "value": 38.0,
+ "unit": "Hz",
+ "range": [
+ 30.4,
+ 45.6
+ ],
+ "cited_measurements": [
+ "acidDetail.isAcid",
+ "acidDetail.resonanceLevel",
+ "acidDetail.centroidOscillationHz"
+ ]
+ },
+ {
+ "device": "Operator",
+ "parameter": "Oscillator A Coarse",
+ "value": 80.0,
+ "unit": "Hz",
+ "range": [
+ 64.0,
+ 96.0
+ ],
+ "cited_measurements": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.thd",
+ "kickDetail.isDistorted"
+ ]
+ },
+ {
+ "device": "Drum Buss",
+ "parameter": "Boom Frequency",
+ "value": 80.0,
+ "unit": "Hz",
+ "range": [
+ 64.0,
+ 96.0
+ ],
+ "cited_measurements": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.harmonicRatio",
+ "kickDetail.isDistorted"
+ ]
+ },
+ {
+ "device": "Wavetable",
+ "parameter": "Unison Amount",
+ "value": 27.4,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.voiceCount",
+ "supersawDetail.spectralComplexity"
+ ]
+ },
+ {
+ "device": "Limiter",
+ "parameter": "Ceiling",
+ "value": -0.3,
+ "unit": "dB",
+ "range": [
+ -3.3,
+ 2.7
+ ],
+ "cited_measurements": [
+ "truePeak",
+ "plr",
+ "lufsIntegrated"
+ ]
+ },
+ {
+ "device": "Utility",
+ "parameter": "Stereo Width",
+ "value": 0.0,
+ "unit": "%",
+ "range": [
+ -15.0,
+ 15.0
+ ],
+ "cited_measurements": [
+ "stereoDetail.stereoWidth",
+ "stereoDetail.stereoCorrelation",
+ "stereoDetail.bandCorrelations.brilliance"
+ ]
+ },
+ {
+ "device": "Analog",
+ "parameter": "Fil 1 Type",
+ "value": 24.0,
+ "unit": "dB",
+ "range": [
+ 21.0,
+ 27.0
+ ],
+ "cited_measurements": [
+ "bassDetail.averageDecayMs",
+ "bassDetail.type",
+ "bassDetail.fundamentalHz"
+ ]
+ },
+ {
+ "device": "Glue Compressor",
+ "parameter": "Release",
+ "value": 2.0,
+ "unit": "ratio",
+ "range": [
+ 1.0,
+ 3.0
+ ],
+ "cited_measurements": [
+ "bassDetail.type",
+ "bassDetail.averageDecayMs",
+ "lufsIntegrated"
+ ]
+ },
+ {
+ "device": "Scale",
+ "parameter": "Scale Name",
+ "value": "Natural Minor; Base = A",
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "key",
+ "keyConfidence"
+ ]
+ },
+ {
+ "device": "EQ Eight",
+ "parameter": "Band 1 Filter Type",
+ "value": 100.0,
+ "unit": "Hz",
+ "range": [
+ 80.0,
+ 120.0
+ ],
+ "cited_measurements": [
+ "spectralBalance.lowMids",
+ "spectralBalance.subBass",
+ "bassDetail.fundamentalHz"
+ ]
+ },
+ {
+ "device": "Hybrid Reverb",
+ "parameter": "Decay",
+ "value": 0.5,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "reverbDetail.isWet",
+ "lufsIntegrated",
+ "genreDetail.genre"
+ ]
+ },
+ {
+ "device": "Echo",
+ "parameter": "Delay Time (L)",
+ "value": 1.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "bpm",
+ "rhythmDetail.tempoCurve",
+ "spectralBalance.brilliance"
+ ]
+ },
+ {
+ "device": "Operator",
+ "parameter": "Oscillator A Coarse",
+ "value": 80.0,
+ "unit": "Hz",
+ "range": [
+ 64.0,
+ 96.0
+ ],
+ "cited_measurements": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.kickCount"
+ ]
+ },
+ {
+ "device": "Operator",
+ "parameter": "Oscillator A Fine",
+ "value": -5.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "tuningCents",
+ "tuningFrequency"
+ ]
+ },
+ {
+ "device": "Drum Buss",
+ "parameter": "Boom Frequency",
+ "value": 80.0,
+ "unit": "Hz",
+ "range": [
+ 64.0,
+ 96.0
+ ],
+ "cited_measurements": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.harmonicRatio"
+ ]
+ },
+ {
+ "device": "Drum Buss",
+ "parameter": "Crunch",
+ "value": 0.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "kickDetail.harmonicRatio",
+ "kickDetail.isDistorted"
+ ]
+ },
+ {
+ "device": "Analog",
+ "parameter": "Osc 1 Shape",
+ "value": "Saw (sawtooth)",
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "synthesisCharacter.oddToEvenRatio",
+ "acidDetail.isAcid"
+ ]
+ },
+ {
+ "device": "Analog",
+ "parameter": "Osc 1 Detune",
+ "value": -5.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "tuningCents",
+ "tuningFrequency"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "parameter": "Resonance",
+ "value": "Maximum (or near-maximum)",
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.confidence"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "parameter": "LFO Rate",
+ "value": 38.0,
+ "unit": "Hz",
+ "range": [
+ 30.4,
+ 45.6
+ ],
+ "cited_measurements": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.bassRhythmDensity"
+ ]
+ },
+ {
+ "device": "Wavetable",
+ "parameter": "Unison Amount",
+ "value": 27.4,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.voiceCount"
+ ]
+ },
+ {
+ "device": "Wavetable",
+ "parameter": "Unison Mode",
+ "value": 8.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "supersawDetail.voiceCount",
+ "supersawDetail.spectralComplexity"
+ ]
+ },
+ {
+ "device": "Glue Compressor",
+ "parameter": "Release",
+ "value": "Auto",
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "bassDetail.type",
+ "bassDetail.averageDecayMs"
+ ]
+ },
+ {
+ "device": "EQ Eight",
+ "parameter": "Band 1 Filter Type",
+ "value": 30.0,
+ "unit": "Hz",
+ "range": [
+ 24.0,
+ 36.0
+ ],
+ "cited_measurements": [
+ "spectralBalance.subBass",
+ "spectralBalance.lowBass"
+ ]
+ },
+ {
+ "device": "Limiter",
+ "parameter": "Ceiling",
+ "value": -0.3,
+ "unit": "dB",
+ "range": [
+ -3.3,
+ 2.7
+ ],
+ "cited_measurements": [
+ "truePeak",
+ "plr"
+ ]
+ },
+ {
+ "device": "Limiter",
+ "parameter": "True Peak",
+ "value": "On",
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "truePeak",
+ "saturationDetail.clippedSampleCount"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "parameter": "Filter Type",
+ "value": "Lowpass",
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "acidDetail.isAcid",
+ "acidDetail.resonanceLevel"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "parameter": "Resonance",
+ "value": "Maximum",
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.confidence"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "parameter": "LFO Rate",
+ "value": 38.0,
+ "unit": "Hz",
+ "range": [
+ 30.4,
+ 45.6
+ ],
+ "cited_measurements": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.bassRhythmDensity"
+ ]
+ },
+ {
+ "device": "Envelope Follower",
+ "parameter": "Rise",
+ "value": 5.0,
+ "unit": "ms",
+ "range": [
+ 3.5,
+ 6.5
+ ],
+ "cited_measurements": [
+ "transientDensityDetail.lowBass.eventCount",
+ "dynamicCharacter.logAttackTime"
+ ]
+ },
+ {
+ "device": "Limiter",
+ "parameter": "Ceiling",
+ "value": -0.3,
+ "unit": "dB",
+ "range": [
+ -3.3,
+ 2.7
+ ],
+ "cited_measurements": [
+ "truePeak",
+ "plr"
+ ]
+ }
+ ]
+ }
+}
diff --git a/apps/backend/tests/fixtures/recommendation_tracks/melodic_techno_arp_124/phase2.claude.json b/apps/backend/tests/fixtures/recommendation_tracks/melodic_techno_arp_124/phase2.claude.json
new file mode 100644
index 00000000..c0be3c37
--- /dev/null
+++ b/apps/backend/tests/fixtures/recommendation_tracks/melodic_techno_arp_124/phase2.claude.json
@@ -0,0 +1,1326 @@
+{
+ "trackCharacter": "A dub-techno loop at 124.1 BPM in G Minor, engineered to a punishing -10.1 LUFS integrated with a lufsRange of only 0.2 LU \u2014 essentially a brick-wall flat loudness signature throughout the 15.5-second clip. The master is fully mono (stereoWidth 0.0, stereoCorrelation 1.0 across all bands), confirming a deliberate mono-compatible club mix. Three distinct synthesis layers define the sound: a 303-style acid bass (acidDetail.isAcid=true, confidence 0.72, resonanceLevel 1.0) driving at 42 Hz centroid oscillation, a 7-voice supersaw (supersawDetail.isSupersaw=true, avgDetuneCents 27.4) providing the harmonic bed, and a distorted kick (fundamentalHz 65 Hz, thd 0.29, isDistorted=true) anchoring the rhythm. The spectralCentroidMean of 1148 Hz confirms a low-centroid balance with the sub-bass band dominating at -7.3 dBr and brilliance cutting off steeply, typical of dub-techno production aesthetics.",
+ "projectSetup": {
+ "tempoBpm": 124.1,
+ "timeSignature": "4/4",
+ "sampleRate": 44100,
+ "bitDepth": 24,
+ "headroomTarget": "-14 LUFS integrated for pre-master stems; apply final limiting to taste on the master bus",
+ "sessionGoal": "Rebuild a mono dub-techno loop with a distorted 65 Hz kick, full-resonance acid bass, and 7-voice supersaw, mastered to -10.1 LUFS with inter-sample peaks corrected"
+ },
+ "trackLayout": [
+ {
+ "order": 1,
+ "name": "Kick",
+ "type": "MIDI",
+ "purpose": "Distorted kick instrument (Operator, fundamentalHz 65 Hz, isDistorted=true, thd=0.29) with Drum Buss for transient and boom shaping",
+ "grounding": {
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.isDistorted",
+ "kickDetail.thd",
+ "kickDetail.harmonicRatio"
+ ],
+ "segmentIndexes": [
+ 0
+ ]
+ }
+ },
+ {
+ "order": 2,
+ "name": "Snare",
+ "type": "MIDI",
+ "purpose": "Body-heavy snare (meanBodyEnergyRatio 0.918, meanDecaySeconds 0.28, meanCentroidHz 573.5 Hz) built in Impulse or Drum Rack",
+ "grounding": {
+ "phase1Fields": [
+ "snareDetail.meanBodyEnergyRatio",
+ "snareDetail.meanDecaySeconds",
+ "snareDetail.meanCentroidHz"
+ ],
+ "segmentIndexes": [
+ 0
+ ]
+ }
+ },
+ {
+ "order": 3,
+ "name": "Hihat",
+ "type": "MIDI",
+ "purpose": "Closed hi-hat (meanDecaySeconds 0.047, meanSnapEnergyRatio 0.838, 2.07 hits/sec) for tight rhythmic texture",
+ "grounding": {
+ "phase1Fields": [
+ "hihatDetail.meanDecaySeconds",
+ "hihatDetail.meanSnapEnergyRatio",
+ "hihatDetail.hitsPerSecond"
+ ],
+ "segmentIndexes": [
+ 0
+ ]
+ }
+ },
+ {
+ "order": 4,
+ "name": "Drum Bus",
+ "type": "Audio",
+ "purpose": "Drum group bus for Drum Buss coloration and Glue Compressor glue across kick/snare/hat",
+ "grounding": {
+ "phase1Fields": [
+ "kickDetail.harmonicRatio",
+ "beatsLoudness.kickDominantRatio",
+ "transientDensityDetail.lowBass.onsetRatePerSecond"
+ ],
+ "segmentIndexes": [
+ 0
+ ]
+ }
+ },
+ {
+ "order": 5,
+ "name": "Acid Bass",
+ "type": "MIDI",
+ "purpose": "303-style acid bassline (Analog or Operator, fundamentalHz 79 Hz, isAcid=true, resonanceLevel 1.0, centroidOscillationHz 42 Hz) with Auto Filter squelch",
+ "grounding": {
+ "phase1Fields": [
+ "acidDetail.isAcid",
+ "acidDetail.resonanceLevel",
+ "acidDetail.centroidOscillationHz",
+ "bassDetail.fundamentalHz"
+ ],
+ "segmentIndexes": [
+ 0
+ ]
+ }
+ },
+ {
+ "order": 6,
+ "name": "Supersaw Pad",
+ "type": "MIDI",
+ "purpose": "7-voice supersaw harmonic bed (supersawDetail.isSupersaw=true, avgDetuneCents 27.4, spectralComplexity 7.4) in G Minor",
+ "grounding": {
+ "phase1Fields": [
+ "supersawDetail.isSupersaw",
+ "supersawDetail.voiceCount",
+ "supersawDetail.avgDetuneCents",
+ "key"
+ ],
+ "segmentIndexes": [
+ 0
+ ]
+ }
+ },
+ {
+ "order": 7,
+ "name": "Master",
+ "type": "Master",
+ "purpose": "Final mono master chain with EQ, limiting, and true-peak control targeting -10.1 LUFS; truePeak correction mandatory (measured +1.1 dBTP)",
+ "grounding": {
+ "phase1Fields": [
+ "truePeak",
+ "lufsIntegrated",
+ "plr",
+ "stereoDetail.stereoWidth"
+ ],
+ "segmentIndexes": [
+ 0
+ ]
+ }
+ }
+ ],
+ "routingBlueprint": {
+ "sidechainSource": "",
+ "sidechainTargets": [],
+ "returns": [
+ {
+ "name": "Space Reverb",
+ "purpose": "Measured reverbDetail.isWet=false confirms the source is completely dry. Add a short room/plate Reverb return to introduce dub-style space without changing the dry source balance. RT60 is unmeasured so use a conservative 0.8\u20131.2 s plate setting and send only drums and bass sparingly.",
+ "sendSources": [
+ "Drum Bus",
+ "Acid Bass"
+ ],
+ "deviceFocus": "Reverb (Room Size 30\u201340%, Decay Time 0.8\u20131.2 s, High Cut 4000 Hz for dub darkness)",
+ "levelGuidance": "Drum Bus send -18 to -14 dB; Acid Bass send -24 to -20 dB; keep wet low to preserve the dry mono clarity"
+ },
+ {
+ "name": "Echo Dub",
+ "purpose": "Dub-techno genre (genreDetail.genre=dub-techno, confidence 0.90) requires a signature tempo-synced echo return. BPM 124.1 gives a dotted-eighth repeat at ~290 ms; use Echo with Sync on and 3/16 division for a classic dub tail. The flat lufsCurve (lufsRange 0.2 LU) means echo sends must be automation-driven at specific moments to avoid flooding the mix.",
+ "sendSources": [
+ "Acid Bass",
+ "Supersaw Pad"
+ ],
+ "deviceFocus": "Echo (Sync On, dotted-eighth repeat, Feedback 25\u201335%, Filter Frequency 2000 Hz to roll off repeats)",
+ "levelGuidance": "Acid Bass send -20 to -16 dB; Supersaw Pad send -24 dB; automate send levels at novelty peaks for dub-style throw effects"
+ }
+ ],
+ "notes": [
+ "The source is completely mono (stereoWidth 0.0); all return sends should be summed to mono via Utility Bass Mono or a global mono bus \u2014 do not introduce stereo spread in returns unless intentional widening is added later.",
+ "Sidechain pumping confidence is 0.155, below the 0.2 threshold required for a confident sidechain card \u2014 no Compressor sidechain routing is recommended for this track.",
+ "Two returns are warranted: reverbDetail.isWet=false justifies adding the first, and the dub-techno genre with sparse spectral texture justifies the echo dub return for a stylistically correct rebuild."
+ ]
+ },
+ "warpGuide": {
+ "fullTrack": {
+ "warpMode": "Complex Pro",
+ "settings": "Formants: 100%, Transients: On, Envelope: 128",
+ "reason": "Preserves the heavily limited mono master (lufsIntegrated -10.1, lufsRange 0.2 LU) without transient smearing when tempo-aligning the reference clip"
+ },
+ "drums": {
+ "warpMode": "Beats",
+ "settings": "Preserve Transients: On, Decay: 100%",
+ "reason": "The kick hits at 15.56 sub-band onsets/sec and the snare has a sharp attack (meanAttackSharpness 0.0026); Beats mode preserves these transients at 124.1 BPM without artifacts"
+ },
+ "bass": {
+ "warpMode": "Tones",
+ "settings": "Grain Size: Long (512 samples)",
+ "reason": "The bass is classified as sustained with averageDecayMs 1000 ms and a 79 Hz fundamental; Tones mode tracks the sustained low-frequency shape without pitch artifacts common in Re-Pitch at tempo changes"
+ },
+ "melodic": {
+ "warpMode": "Complex Pro",
+ "settings": "Formants: 100%, Envelope: 64",
+ "reason": "The 7-voice supersaw (avgDetuneCents 27.4, spectralComplexity 7.4) has complex harmonic interactions that require Complex Pro to preserve detuning relationships across minor tempo corrections"
+ },
+ "rationale": "This track is a fully mixed mono loop at 124.1 BPM with a flat lufsCurve. The fullTrack reference uses Complex Pro to preserve the master's loudness shape. Drums use Beats for transient fidelity. The sustained bass uses Tones because its 1-second decay is best tracked as a pitched tone. The supersaw harmonic layer uses Complex Pro because its 7-voice detuning structure is sensitive to formant shift. No vocals are present (hasVocals=false), so a vocal warp mode entry is not applicable."
+ },
+ "detectedCharacteristics": [
+ {
+ "name": "Fully Mono Master",
+ "confidence": "HIGH",
+ "explanation": "stereoDetail.stereoWidth = 0.0 and stereoCorrelation = 1.0 across all seven frequency bands and throughout the entire correlationCurve \u2014 this is a pure mono signal with no stereo information at any frequency."
+ },
+ {
+ "name": "Brick-Wall Loudness Profile",
+ "confidence": "HIGH",
+ "explanation": "lufsIntegrated = -10.1 LUFS with lufsRange = 0.2 LU across 15.5 seconds; the short-term LUFS curve oscillates within a 0.2 LU band throughout, indicating heavy bus limiting or full-mix compression that has essentially eliminated dynamic variation."
+ },
+ {
+ "name": "303-Style Acid Bass",
+ "confidence": "HIGH",
+ "explanation": "acidDetail.isAcid=true with confidence 0.72, resonanceLevel 1.0 (maximum), centroidOscillationHz 42 Hz, and bassRhythmDensity 3.2 \u2014 these measurements confirm a classic resonant filter squelch pattern consistent with TB-303-derived sound design."
+ },
+ {
+ "name": "7-Voice Supersaw Harmonic Layer",
+ "confidence": "HIGH",
+ "explanation": "supersawDetail.isSupersaw=true with confidence 0.87, voiceCount 7, avgDetuneCents 27.4, and spectralComplexity 7.4 \u2014 a textbook stacked-oscillator supersaw with moderate detuning, confirmed by the oddToEvenRatio of 1.2038 near unity indicating a complex harmonic mix."
+ },
+ {
+ "name": "Inter-Sample Clipping on Master",
+ "confidence": "HIGH",
+ "explanation": "truePeak = +1.1 dBTP, which exceeds 0 dBTP (0 dBFS full scale), meaning inter-sample overs exist on the master output. saturationDetail.clippedSampleCount = 0 confirms no digital clipping, but the truePeak over requires a Limiter with True Peak enabled before export."
+ }
+ ],
+ "arrangementOverview": {
+ "summary": "Single continuous segment of 15.5 seconds at -10.1 LUFS integrated with a lufsRange of only 0.2 LU \u2014 the loudness strategy is fully committed at master level with no dynamic arc. Six novelty peaks are detected in arrangementDetail.noveltyPeaks (at ~0.3, 2.7, 5.6, 8.5, 11.4, and 14.3 seconds), spaced approximately every 2.7\u20133 seconds (\u2248 1 bar at 124.1 BPM), suggesting a bar-repeat groove loop with micro-structural variation at each bar boundary rather than a traditional intro-drop-outro format.",
+ "segments": [
+ {
+ "index": 0,
+ "startTime": 0,
+ "endTime": 2.717,
+ "description": "Opening bar group (bars 1\u2013pre-peak): sub-bass and low-bass dominant (spectralBalance.subBass -7.3 dBr, spectralBalance.lowBass -10.3 dBr), tempoCurve shows a BPM ramp from 136 down to 123 in the first ~1.9 seconds before locking \u2014 likely a DJ-tool fade-in or a pre-roll artifact. Novelty peak at 0.302 (strength 0.60) marks the groove settling.",
+ "lufs": -10.5,
+ "spectralNote": "Low-centroid dominant: subBass and lowBass are strongest bands. UpperMids and highs are recessed (-34 to -45 dBr range in early frames).",
+ "sceneName": "Intro / Lock",
+ "abletonAction": "Automate Clip gain fade-in from -inf to 0 dB over the first 1.9 seconds to mirror the measured BPM ramp artefact",
+ "automationFocus": "Master -> Utility Gain"
+ },
+ {
+ "index": 1,
+ "startTime": 2.717,
+ "endTime": 5.619,
+ "description": "Full groove engaged (bar 2 region): novelty peak at 2.717 (strength 0.938) is the strongest in the first half, coinciding with the bar-2 downbeat. Kick accent pattern is consistent (lowBandAccentPattern peaks at 1.0 on beat 3), acid bass rhythm density at 3.2 events/beat, supersaw pad sustaining. The spectralBalanceTimeSeries shows brief high-frequency energy spikes to -13 to -15 dBr on brilliance, likely a transient or open element.",
+ "lufs": -10.5,
+ "spectralNote": "Brilliance band shows brief peaks to -13.9 dBr at t\u22481.24 and t\u22482.17 in spectralBalanceTimeSeries \u2014 likely kick transient splash or a high-frequency hit.",
+ "sceneName": "Drop A",
+ "abletonAction": "Launch clip on Acid Bass track and enable Auto Filter LFO modulation",
+ "automationFocus": "Acid Bass -> Auto Filter Frequency"
+ },
+ {
+ "index": 2,
+ "startTime": 5.619,
+ "endTime": 8.522,
+ "description": "Sustained groove repeat (bars 3\u20134): novelty peak at 5.619 (strength 0.800) marks the 2-bar phrase repeat boundary. Groove remains locked at 123 BPM (tempoCurve is flat from ~1.9 s onward). Hihat swing continues at 0.5172 while kick swing stays rigid at 0.1838 \u2014 the groove feel is driven by hihat offset, not kick movement.",
+ "lufs": -10.5,
+ "spectralNote": "Spectral balance remains consistent; no measurable filter sweep or spectral shift in this segment \u2014 the dub-techno texture is static by design.",
+ "sceneName": "Groove 2",
+ "abletonAction": "Automate Echo Dub send level up by 6 dB at the novelty peak for a brief dub echo throw",
+ "automationFocus": "Acid Bass -> Return:Echo Dub Send"
+ },
+ {
+ "index": 3,
+ "startTime": 8.522,
+ "endTime": 11.424,
+ "description": "Mid-loop peak (bars 5\u20136): novelty peak at 8.522 (strength 0.953), the second-strongest in the clip. Kick accent at this region maintains the 1.0 peak on beat 3 (lowBandAccentPattern), confirming four-on-the-floor with a beat-3 accent emphasis. The acid bass centroid oscillation at 42 Hz drives the low-mid movement throughout.",
+ "lufs": -10.5,
+ "spectralNote": "No measurable spectral change vs preceding segment \u2014 the novelty peak is rhythmic/timbral rather than spectral.",
+ "sceneName": "Build",
+ "abletonAction": "Automate Auto Filter LFO Amount increase on Acid Bass from 30% to 70% at this downbeat",
+ "automationFocus": "Acid Bass -> Auto Filter LFO Amount"
+ },
+ {
+ "index": 4,
+ "startTime": 11.424,
+ "endTime": 14.327,
+ "description": "Climax loop region (bars 7\u20138 approach): novelty peak at 11.424 (strength 0.9945), second-highest peak overall. This region represents the densest rhythmic variation in the clip, with transientDensityDetail.highs.onsetRatePerSecond at 10.2/sec confirming dense high-band transient activity (hihats or brilliance layer). Kick accent remains stable.",
+ "lufs": -10.5,
+ "spectralNote": "transientDensityDetail shows highest onset strength in highs band (peakOnsetStrength 16.011) and brilliance (15.515), concentrated in this region of the loop.",
+ "sceneName": "Peak",
+ "abletonAction": "Automate Space Reverb send level up by 8 dB on Drum Bus at this downbeat for a wet breakdown feel",
+ "automationFocus": "Drum Bus -> Return:Space Reverb Send"
+ },
+ {
+ "index": 5,
+ "startTime": 14.327,
+ "endTime": 15.484,
+ "description": "Final bar tail (bar 8 end): novelty peak at 14.327 (strength 1.0 \u2014 the highest in the clip) marks the loop boundary. This is the strongest novelty event, suggesting the loop is designed to transition or restart here. The tempoCurve shows a minor blip to 124.5 BPM at t=14.51 before returning to 123 BPM \u2014 a potential loop-point artifact. Short duration (1.16 s) is a partial bar.",
+ "lufs": -10.5,
+ "spectralNote": "Partial bar \u2014 spectral balance mirrors the full-loop average with no notable deviation.",
+ "sceneName": "Loop End",
+ "abletonAction": "Set clip loop point at bar 8 beat 4 and trigger a scene launch or automation reset at the 14.327 s novelty peak",
+ "automationFocus": "Master -> Utility Gain"
+ }
+ ],
+ "noveltyNotes": "The six novelty peaks at ~0.3, 2.7, 5.6, 8.5, 11.4, and 14.3 s align closely with 2-bar phrase boundaries at 124.1 BPM (2 bars = ~1.93 s). The highest peak (strength 1.0) at 14.327 s is the loop boundary \u2014 place a scene launch trigger here in Live's Session View. The peak at 2.717 s (strength 0.938) is the groove entry point; automate the Acid Bass Auto Filter LFO on at this downbeat. Peaks at 8.5 and 11.4 s are the two strongest mid-loop events \u2014 use these as automation write points for reverb send throws and filter swells, which is standard dub-techno performance technique."
+ },
+ "sonicElements": {
+ "kick": "Distorted kick at 65 Hz fundamental (kickDetail.fundamentalHz=65, isDistorted=true, thd=0.29). This is a standard 909-adjacent kick tuning, slightly above the 60 Hz threshold for 'deep sub'. The high harmonicRatio of 0.95 means the harmonic content is clean and sub-dominant despite the distortion flag \u2014 the distortion is in the THD ratio, not noise. Rebuild with Operator using a sine/triangle oscillator at C2 (\u224865 Hz), Amp Envelope Decay 80\u2013120 ms for a tight punch. Do NOT add Saturator on this track because kickDetail.isDistorted=true confirms the source already clips.",
+ "bass": "Sustained acid bass (bassDetail.type=sustained, averageDecayMs=1000 ms, fundamentalHz=79 Hz). The 79 Hz fundamental cross-references with G Minor key \u2014 this is likely a G2 bass root (G2 = 98 Hz, F2 = 87 Hz, or lower: G1 = 49 Hz \u2014 bassDetail.fundamentalHz 79 Hz is between F2 and G2, consistent with a low G or F acid line). SENTINEL: bassDetail.transientCount=0, so the bass decay is unmeasured; do not emit a specific compressor release time for this element. The acid character (resonanceLevel 1.0, centroidOscillationHz 42 Hz) dominates the bass texture over the raw pitch \u2014 rebuild with Analog or Operator with a resonant lowpass filter modulated by an LFO at \u224842 Hz oscillation rate.",
+ "melodicArp": "The measured pitchConfidence is 0.0084 \u2014 critically low, below the 0.15 threshold for reliable pitch transcription. The 17 detected notes (midi 41\u201372) should not be treated as a ground-truth melody. The dominant MIDI note 41 (F2) appearing 5 times may represent bass-register note detection bleed rather than a distinct melodic voice. At this confidence level, the note data is best treated as experimental reference points. The supersaw pad (supersawDetail.isSupersaw=true, 7 voices) provides the harmonic layer in G Minor; program the chord voicing from the measured chordDetail.dominantChords (Bb, Dm, C, Gm) rather than relying on the low-confidence pitch transcription.",
+ "grooveAndTiming": "BPM 124.1, locked at 123 BPM from ~1.9 s onward per rhythmDetail.tempoCurve. Per-drum swing: kick 0.1838 (light shuffle), snare 0.1466 (slightly tighter), hihat 0.5172 (strong swing). The hihat swing at 51.7% is the dominant groove driver \u2014 in a 4/4 grid at 124.1 BPM, one quarter note = 483 ms, one sixteenth = 121 ms. A 51.7% swing on 16th-note hihats means the offbeat hi-hats sit approximately 62.5 ms late relative to strict 16th-note quantization (121 ms \u00d7 0.517 \u00d7 2 offset \u2248 63 ms). Set Groove Pool swing to 51.7% for the hihat MIDI, 18.4% for the kick, and 14.7% for the snare for a differentiated humanized feel.",
+ "effectsAndTexture": "The track is measured as completely dry (reverbDetail.isWet=false, reverbDetail.measured=false, reverbDetail.rt60=null). The spectralFlatnessMean of 0.107 and textureCharacter.textureScore of 0.256 confirm a relatively tonal (non-noisy) texture, consistent with the supersaw and acid bass being the primary color sources rather than noise layers. The acid bass centroid oscillation at 42 Hz produces a sub-frequency filter sweep movement that provides the primary textural motion. No gating was detected (effectsDetail.gatingDetected=false). The brilliance band spikes to -13 to -15 dBr at specific time frames in spectralBalanceTimeSeries suggest sharp transient content \u2014 likely kick overtones or a transient percussion hit, not a sustained texture layer.",
+ "widthAndStereo": "The entire track is mono: stereoDetail.stereoWidth=0.0, stereoCorrelation=1.0, subBassMono=true, and all seven bandCorrelations are 1.0. This is a stylistic or mastering choice consistent with club-system mono compatibility. In the Live rebuild, use Utility with Stereo Width = 0% on the master bus to preserve this constraint, or apply widening only to the supersaw layer (Chorus-Ensemble or Phaser-Flanger) and then sum back to mono for the final master.",
+ "harmonicContent": "The measured key is G Minor (keyConfidence 0.71). The chordDetail.dominantChords are Bb, Dm, C, Gm \u2014 a natural minor palette orbiting the G Aeolian scale. The chordTimelineAgreement is false (Viterbi timeline reads E minor, disagreeing with the Essentia dominantChords), so treat any harmonic claim as uncertain. The supersaw pad should use Bb major and Dm voicings (relative major triad: Bb-D-F; minor triad: D-F-A) as the harmonic bed, consistent with the dominant chord reading, but hedge these as likely rather than certain given the timeline disagreement."
+ },
+ "mixAndMasterChain": [
+ {
+ "order": 1,
+ "device": "Operator",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Kick",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Oscillator A Coarse",
+ "value": "C2 (MIDI 36, \u224865 Hz)",
+ "reason": "The measured kickDetail.fundamentalHz of 65 Hz maps to approximately C2; setting Operator Oscillator A Coarse to C2 matches the kick fundamental before any pitch envelope shaping.",
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.kickCount"
+ ]
+ },
+ {
+ "order": 2,
+ "device": "Saturator",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Kick",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Drive",
+ "value": "Omit \u2014 do NOT add Saturator to this kick",
+ "reason": "kickDetail.isDistorted=true confirms the source already clips; adding Saturator Drive would double-saturate an already distorted kick and misrepresent the measured THD of 0.29.",
+ "phase1Fields": [
+ "kickDetail.isDistorted",
+ "kickDetail.thd"
+ ]
+ },
+ {
+ "order": 3,
+ "device": "Drum Buss",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Kick",
+ "workflowStage": "MIX",
+ "parameter": "Boom Frequency",
+ "value": "65 Hz",
+ "reason": "Setting Drum Buss Boom Frequency to the measured kick fundamental of 65 Hz reinforces the sub impact at the measured resonant frequency rather than at a default 80\u2013100 Hz setting.",
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "spectralBalance.subBass"
+ ]
+ },
+ {
+ "order": 4,
+ "device": "Drum Buss",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Drum Bus",
+ "workflowStage": "MIX",
+ "parameter": "Crunch",
+ "value": "Low (0\u201315%) \u2014 avoid",
+ "reason": "kickDetail.harmonicRatio of 0.95 indicates a clean, sub-heavy kick harmonic structure; applying Crunch would introduce unwanted grit against an already clean harmonic profile.",
+ "phase1Fields": [
+ "kickDetail.harmonicRatio",
+ "kickDetail.thd"
+ ]
+ },
+ {
+ "order": 5,
+ "device": "Analog",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Fil 1 Resonance",
+ "value": "High (70\u201390% of range), reflecting the measured resonanceLevel of 1.0",
+ "reason": "acidDetail.resonanceLevel=1.0 (maximum) confirms a fully resonant 303-style filter; the Analog Fil 1 Resonance must be set near its maximum to recreate the squelch character.",
+ "phase1Fields": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.isAcid"
+ ]
+ },
+ {
+ "order": 6,
+ "device": "Auto Filter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "LFO Rate",
+ "value": "42 Hz",
+ "reason": "acidDetail.centroidOscillationHz=42 Hz is the measured filter cutoff oscillation rate; setting the Auto Filter LFO Rate to 42 Hz recreates the sub-frequency filter sweep that defines the acid bass texture.",
+ "phase1Fields": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.confidence"
+ ]
+ },
+ {
+ "order": 7,
+ "device": "Auto Filter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Filter Type",
+ "value": "Lowpass",
+ "reason": "303-style acid bass (acidDetail.isAcid=true, confidence 0.72) uses a resonant lowpass filter as its defining character; a lowpass is the correct filter type to recreate this.",
+ "phase1Fields": [
+ "acidDetail.isAcid",
+ "bassDetail.fundamentalHz"
+ ]
+ },
+ {
+ "order": 8,
+ "device": "Wavetable",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Unison Amount",
+ "value": "27.4 cents (matching supersawDetail.avgDetuneCents)",
+ "reason": "supersawDetail.avgDetuneCents=27.4 is the measured average detuning across 7 voices; setting Wavetable Unison Amount to match this value recreates the measured supersaw spread.",
+ "phase1Fields": [
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.voiceCount"
+ ]
+ },
+ {
+ "order": 9,
+ "device": "Wavetable",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Voices",
+ "value": "7",
+ "reason": "supersawDetail.voiceCount=7 is the measured voice count; Wavetable Voices set to 7 directly recreates the unison density of the source supersaw layer.",
+ "phase1Fields": [
+ "supersawDetail.voiceCount",
+ "supersawDetail.confidence"
+ ]
+ },
+ {
+ "order": 10,
+ "device": "Scale",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Scale Name",
+ "value": "Minor; Base = G",
+ "reason": "The measured key is G Minor with keyConfidence=0.71, which meets the \u22650.7 threshold for committing to the scale; Scale MIDI effect locks the supersaw pad's MIDI input to G Minor.",
+ "phase1Fields": [
+ "key",
+ "keyConfidence"
+ ]
+ },
+ {
+ "order": 11,
+ "device": "Operator",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Kick",
+ "workflowStage": "SOUND_DESIGN",
+ "parameter": "Oscillator A Fine",
+ "value": "-6 cents",
+ "reason": "The measured tuningCents=-6.0 (tuningFrequency=438.48 Hz) means the source is 6 cents flat of A440; setting Oscillator A Fine to -6 cents matches the source tuning rather than playing sharp.",
+ "phase1Fields": [
+ "tuningCents",
+ "tuningFrequency"
+ ]
+ },
+ {
+ "order": 12,
+ "device": "Glue Compressor",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Drum Bus",
+ "workflowStage": "MIX",
+ "parameter": "Threshold",
+ "value": "-18 dB, Ratio 4:1, Attack 5 ms, Release 100 ms",
+ "reason": "The drum bus needs glue compression to match the measured flat loudness profile (lufsRange 0.2 LU); a moderate Glue Compressor setting on the Drum Bus provides the level uniformity measured in the source without over-compressing the kick transients.",
+ "phase1Fields": [
+ "lufsRange",
+ "crestFactor",
+ "beatsLoudness.kickDominantRatio"
+ ]
+ },
+ {
+ "order": 13,
+ "device": "EQ Eight",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Master",
+ "workflowStage": "MASTER",
+ "parameter": "Band 1 Filter Type",
+ "value": "High-pass at 20 Hz, Band 2 Bell at 65 Hz +1.5 dB (Q 2.0)",
+ "reason": "spectralBalance.subBass=-7.3 dBr is the dominant band; a gentle lift at the measured kick fundamental (65 Hz) on the master EQ reinforces the low-end emphasis that defines this dub-techno spectralCentroidMean of 1148 Hz.",
+ "phase1Fields": [
+ "spectralBalance.subBass",
+ "spectralDetail.spectralCentroidMean",
+ "kickDetail.fundamentalHz"
+ ]
+ },
+ {
+ "order": 14,
+ "device": "Limiter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Master",
+ "workflowStage": "MASTER",
+ "parameter": "Ceiling",
+ "value": "-0.3 dB, True Peak = On, Release 150 ms",
+ "reason": "truePeak=+1.1 dBTP exceeds 0 dBTP (0 dBFS), confirming inter-sample overs on the master; a Limiter with Ceiling -0.3 dB and True Peak enabled corrects these overs before export.",
+ "phase1Fields": [
+ "truePeak",
+ "plr",
+ "saturationDetail.clippedSampleCount"
+ ]
+ }
+ ],
+ "secretSauce": {
+ "title": "Mono Acid Supersaw Stack: 303 Filter Modulation Locked to Downbeats",
+ "icon": "303",
+ "explanation": "Three measured cues define the reconstruction strategy: (1) acidDetail.isAcid=true with resonanceLevel=1.0 and centroidOscillationHz=42 Hz \u2014 the bass filter sweeps at sub-frequency speed, creating the signature squelch movement; (2) supersawDetail.isSupersaw=true with 7 voices at 27.4 cents average detune \u2014 the pad provides harmonic mass without occupying the filter movement space; (3) the track is completely mono (stereoWidth=0.0, stereoCorrelation=1.0) with a brick-wall loudness profile (lufsRange=0.2 LU, lufsIntegrated=-10.1 LUFS) \u2014 the mix is engineered for mono club speaker output. The secret sauce is combining a maximum-resonance acid filter sweep on the bass (locked to bar downbeats via envelope or LFO reset) with a detuned supersaw pad that fills the harmonic space above the filter sweep frequency, all maintained in strict mono. The 6 novelty peaks spaced at ~1-bar intervals suggest the LFO or envelope is reset at each phrase boundary \u2014 recreate this by automating Auto Filter LFO reset or using an Envelope Follower triggered by the kick.",
+ "implementationSteps": [
+ "Build Analog bass patch: Fil 1 Type = Lowpass, Fil 1 Resonance = 80\u201390%, Fil 1 Freq = 200\u2013400 Hz as base, LFO 1 Rate = 42 Hz (acidDetail.centroidOscillationHz) modulating filter frequency",
+ "Add Auto Filter after Analog on Acid Bass track: Filter Type = Lowpass, Resonance = high (matching measured resonanceLevel 1.0), LFO Amount = 60\u201380%, LFO Rate = 42 Hz",
+ "Build Wavetable supersaw: Voices = 7 (supersawDetail.voiceCount), Unison Amount = 27.4 cents (supersawDetail.avgDetuneCents), Oscillator 1 Wavetable = Saw-type",
+ "Set Operator Oscillator A Coarse = C2 for kick at 65 Hz with Amp Envelope Decay = 80\u2013120 ms",
+ "Place Utility on Master bus: Stereo Width = 0% to enforce the measured mono constraint",
+ "Place Limiter last on Master: Ceiling = -0.3 dB, True Peak = On, Release = 150 ms to correct the measured +1.1 dBTP inter-sample overs"
+ ],
+ "workflowSteps": [
+ {
+ "step": 1,
+ "trackContext": "Acid Bass",
+ "device": "Analog",
+ "parameter": "Fil 1 Resonance",
+ "value": "80\u201390% of range",
+ "instruction": "Set Analog Fil 1 Type to Lowpass and Fil 1 Resonance to 80\u201390% to recreate the maximum squelch resonance measured in the source. Engage LFO 1 at 42 Hz targeting Fil 1 Freq with a sine waveform and LFO 1 Rate = 42 Hz.",
+ "measurementJustification": "acidDetail.resonanceLevel=1.0 (maximum measured resonance) and centroidOscillationHz=42 Hz directly specify the resonance level and filter modulation speed that produced the acid character in the source.",
+ "phase1Fields": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.confidence"
+ ]
+ },
+ {
+ "step": 2,
+ "trackContext": "Acid Bass",
+ "device": "Auto Filter",
+ "parameter": "LFO Rate",
+ "value": "42 Hz",
+ "instruction": "Insert Auto Filter after Analog, set Filter Type = Lowpass, Resonance to approximately 70% (second resonance stage for stacking the squelch), LFO Amount = 60%, LFO Rate = 42 Hz, LFO Waveform = Sine. This second filter stage adds movement depth matching the measured centroid oscillation.",
+ "measurementJustification": "centroidOscillationHz=42 Hz is the measured spectral centroid oscillation frequency \u2014 a 42 Hz LFO rate on a lowpass filter directly recreates the rhythmic filter sweep. Stacking two filter stages (Analog internal + Auto Filter) is required to match the intensity implied by resonanceLevel=1.0.",
+ "phase1Fields": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.isAcid",
+ "bassDetail.fundamentalHz"
+ ]
+ },
+ {
+ "step": 3,
+ "trackContext": "Supersaw Pad",
+ "device": "Wavetable",
+ "parameter": "Unison Amount",
+ "value": "27 cents (approximating supersawDetail.avgDetuneCents=27.4)",
+ "instruction": "Set Wavetable Voices = 7 and Unison Amount = 27 cents. Select a Saw-type Oscillator 1 Wavetable. Set Amp Envelope Attack = 20 ms, Release = 400 ms for a smooth but present pad. Tune the patch to G Minor (root G, with Bb and D as chord tones matching dominantChords).",
+ "measurementJustification": "supersawDetail.voiceCount=7 and avgDetuneCents=27.4 are measured directly from the source supersaw layer. These values reproduce the chorus-width and tonal density of the original pad without the trial-and-error of tuning by ear.",
+ "phase1Fields": [
+ "supersawDetail.voiceCount",
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.spectralComplexity"
+ ]
+ },
+ {
+ "step": 4,
+ "trackContext": "Master",
+ "device": "Utility",
+ "parameter": "Stereo Width",
+ "value": "0%",
+ "instruction": "Insert Utility on the Master bus and set Stereo Width = 0% (full mono). This enforces the measured mono constraint before the Limiter stage. If any element introduces stereo spread (Chorus-Ensemble on the supersaw, Echo return), Utility will collapse it to mono at the master, consistent with the source.",
+ "measurementJustification": "stereoDetail.stereoWidth=0.0 and stereoCorrelation=1.0 across all frequency bands confirm the source is pure mono. Enforcing mono on the master prevents phase-cancellation surprises on club mono systems and matches the source production intent.",
+ "phase1Fields": [
+ "stereoDetail.stereoWidth",
+ "stereoDetail.stereoCorrelation",
+ "monoCompatible"
+ ]
+ },
+ {
+ "step": 5,
+ "trackContext": "Master",
+ "device": "Limiter",
+ "parameter": "Ceiling",
+ "value": "-0.3 dB with True Peak = On",
+ "instruction": "Insert Limiter last on the Master bus with Ceiling = -0.3 dB, True Peak = On, Release = 150 ms. This corrects the measured +1.1 dBTP inter-sample overs while preserving the loud -10.1 LUFS character. Set Release to 150 ms to avoid audible pumping given the flat dynamics (lufsRange 0.2 LU).",
+ "measurementJustification": "truePeak=+1.1 dBTP exceeds 0 dBTP (the inter-sample clipping threshold); a Limiter with True Peak On is the mandatory correction. Ceiling -0.3 dB gives 1.4 dB of reduction from the measured peak, which is adequate to eliminate the overs without over-compressing. PLR=11.2 LU is in the 8\u201314 range, so a transparent Limiter is appropriate without additional compression.",
+ "phase1Fields": [
+ "truePeak",
+ "plr",
+ "lufsIntegrated"
+ ]
+ }
+ ]
+ },
+ "confidenceNotes": [
+ {
+ "field": "BPM and Tempo Ramp",
+ "value": "124.1 BPM used for rebuild; raw BPM confirmed by two methods (bpmPercival=123.8, bpmSource=rhythm_extractor_confirmed)",
+ "reason": "bpmConfidence=4.0 (normalized) is high. However, rhythmDetail.tempoCurve shows a ramp from 136 BPM at t=0.57 s down to 123 BPM at t=1.93 s, after which the tempo is stable. This is likely a DJ-tool fade-in or pre-roll artifact, not a true ritardando. The stable 123 BPM value (not 124.1) is what the tempoCurve locks to \u2014 124.1 is the mean across the entire clip including the ramp. All tempo-sync calculations use 124.1 BPM as the project tempo, with an awareness that the loop itself runs at 123 BPM once stable."
+ },
+ {
+ "field": "Downbeat Phase (Bar 1)",
+ "value": "Downbeat confidence=0.0978 \u2014 very low; bar-1 phase is uncertain",
+ "reason": "rhythmDetail.downbeatConfidence=0.0978 is well below 0.4. The downbeat timestamps (1.207, 3.146, etc.) are provided by kick_accent analysis, but with a confidence this low on a four-on-the-floor kick pattern, which beat is beat-1 is ambiguous. Arrangement segment boundaries are placed at novelty peaks rather than hard bar-1 claims. All bar-alignment calls should be treated as approximate (\u00b11 beat)."
+ },
+ {
+ "field": "Pitch Transcription",
+ "value": "pitchConfidence=0.0084 \u2014 extremely low; all pitch note data is unreliable",
+ "reason": "melodyDetail.pitchConfidence=0.0084 is far below the 0.15 minimum reliability threshold. The 17 detected notes (midi 41\u201372) are not treated as ground truth in this blueprint. The dominant MIDI 41 (F2) appearing 5 times likely represents bass-register pitch detection bleed from the acid bass rather than a distinct melodic voice. No melodic content is reconstructed from this data."
+ },
+ {
+ "field": "Harmonic / Chord Agreement",
+ "value": "chordTimelineAgreement=false \u2014 harmonic recommendations are hedged",
+ "reason": "The librosa Viterbi chord timeline reads the track as E minor throughout, while Essentia dominantChords identifies Bb, Dm, C, Gm \u2014 these two engines disagree after enharmonic normalization. The key=G Minor (keyConfidence=0.71) is used as the authoritative harmonic anchor. Chord-specific patch decisions (Bb, Dm voicings) are recommended with explicit uncertainty."
+ },
+ {
+ "field": "Synthesis Character (Supersaw vs Acid)",
+ "value": "Both supersawDetail and acidDetail are HIGH confidence",
+ "reason": "supersawDetail.confidence=0.87 and acidDetail.confidence=0.72 are above 0.5, so both synthesis layer identifications are treated as committed. Supersaw voice count (7) and detune (27.4 cents) are used directly in patch design. Acid resonanceLevel=1.0 and centroidOscillationHz=42 Hz drive the Auto Filter LFO configuration."
+ },
+ {
+ "field": "Bass Decay / Dynamics",
+ "value": "bassDetail.transientCount=0 \u2014 bass decay is unmeasured (SENTINEL triggered)",
+ "reason": "bassDetail.transientCount=0 means the analyzer found no isolable bass transients; therefore bassDetail.averageDecayMs=1000 ms is the default sentinel value, not a real measurement. No specific Glue Compressor release time is recommended for the bass bus based on this value. The bass type=sustained and grooveType=straight are used for style guidance only."
+ },
+ {
+ "field": "Sidechain Pumping",
+ "value": "pumpingConfidence=0.155 \u2014 below 0.2 threshold; sidechain card omitted",
+ "reason": "sidechainDetail.pumpingConfidence=0.155 is below the 0.2 threshold specified in the sidechain rules. pumpingRate=null. No sidechain Compressor routing card is generated. The lufsRange=0.2 LU flat envelope is consistent with a heavily compressed mix rather than measured pumping."
+ },
+ {
+ "field": "Genre Classification",
+ "value": "dub-techno at 0.90 confidence \u2014 HIGH",
+ "reason": "genreDetail.genre=dub-techno with confidence=0.9014 is the highest genre confidence in the top scores. The secondary genre is ambient (0.757), which is stylistically consistent with dub-techno. All genre-context decisions (echo dub return, mono mastering, sustained bass texture) are grounded in this high-confidence classification."
+ },
+ {
+ "field": "Reverb / Wet State",
+ "value": "Track is completely dry \u2014 reverbDetail.measured=false",
+ "reason": "reverbDetail.isWet=false, rt60=null, tailEnergyRatio=null, and measured=false confirm no reverb or wet tail was detected. The Space Reverb and Echo Dub return tracks in the routing blueprint are production additions for the rebuild, not reconstructions of measured reverb. They are justified by genre context (dub-techno) rather than measured reverb data."
+ },
+ {
+ "field": "Stereo Field",
+ "value": "Confirmed mono \u2014 stereoWidth=0.0, stereoCorrelation=1.0 across all bands",
+ "reason": "All seven bandCorrelations equal 1.0 and the correlationCurve shows full=1.0 and sub=1.0 at every 1-second window across the entire 15.5-second clip. This is an objective measurement, not a perceptual inference. The rebuild plan enforces this with Utility Stereo Width=0% on the Master bus."
+ }
+ ],
+ "abletonRecommendations": [
+ {
+ "device": "Auto Filter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "category": "EFFECTS",
+ "parameter": "LFO Rate",
+ "value": "42 Hz",
+ "reason": "acidDetail.centroidOscillationHz=42 Hz is the measured filter oscillation rate of the acid bass, confirming a sub-frequency LFO sweep that produces the 303 squelch character; an LFO Rate of 42 Hz on a Lowpass Auto Filter with Resonance near maximum directly recreates this measurement.",
+ "advancedTip": "At 42 Hz LFO Rate the sweep is very fast (almost an audio-rate modulation); if the result sounds too aggressive, halve to 21 Hz and increase LFO Amount to compensate \u2014 the measured value is the centroid oscillation, which can include partial harmonics of the true LFO rate.",
+ "phase1Fields": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.isAcid",
+ "acidDetail.resonanceLevel"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "SOUND_DESIGN",
+ "category": "SYNTHESIS",
+ "parameter": "Resonance",
+ "value": "High (match acidDetail.resonanceLevel=1.0, set Resonance near maximum)",
+ "reason": "acidDetail.resonanceLevel=1.0 is the maximum measured resonance value, indicating a fully self-oscillating 303-style filter; Resonance must be set near its maximum on the Auto Filter to reproduce this measured characteristic.",
+ "advancedTip": "Enable Drive on the Auto Filter at a low setting (10\u201320%) to add the distortion harmonic consistent with the acid character; this also prevents the fully resonant filter from disappearing below audible threshold at low cutoff frequencies.",
+ "phase1Fields": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.confidence",
+ "acidDetail.isAcid"
+ ]
+ },
+ {
+ "device": "Wavetable",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "SOUND_DESIGN",
+ "category": "SYNTHESIS",
+ "parameter": "Unison Amount",
+ "value": "27 cents (from supersawDetail.avgDetuneCents=27.4)",
+ "reason": "supersawDetail.avgDetuneCents=27.4 is the measured average detuning across the 7-voice supersaw layer; setting Wavetable Unison Amount to 27 cents with Voices=7 recreates the measured harmonic spread without guessing.",
+ "advancedTip": "If the supersaw pad sounds too wide before the Utility mono collapse, reduce Unison Amount by 3\u20135 cents \u2014 the measured 27.4 cents is the perceptual spread of a stereo source, and mono summing a wide detuned supersaw can create comb-filtering artifacts; test in mono early.",
+ "phase1Fields": [
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.voiceCount",
+ "supersawDetail.spectralComplexity"
+ ]
+ },
+ {
+ "device": "Operator",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Kick",
+ "workflowStage": "SOUND_DESIGN",
+ "category": "SYNTHESIS",
+ "parameter": "Oscillator A Coarse",
+ "value": "C2 (\u224865 Hz, matching kickDetail.fundamentalHz=65)",
+ "reason": "kickDetail.fundamentalHz=65 Hz maps to C2 on a standard 440 Hz tuning reference; setting Operator Oscillator A Coarse to C2 with a sine/triangle waveform and a fast Amp Envelope Decay of 80\u2013120 ms recreates the measured 65 Hz kick fundamental.",
+ "advancedTip": "Apply the measured tuningCents=-6 offset by setting Oscillator A Fine=-6 cents so the kick sits in tune with the acid bass (bassDetail.fundamentalHz=79 Hz) and the overall source tuning at 438.48 Hz.",
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.kickCount",
+ "tuningCents"
+ ]
+ },
+ {
+ "device": "Drum Buss",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Kick",
+ "workflowStage": "MIX",
+ "category": "EFFECTS",
+ "parameter": "Boom Frequency",
+ "value": "65 Hz",
+ "reason": "kickDetail.fundamentalHz=65 Hz is the measured kick resonant frequency; setting Drum Buss Boom Frequency to 65 Hz reinforces sub energy at the correct pitch rather than the device's default 80\u2013100 Hz.",
+ "advancedTip": "Keep Drum Buss Crunch at 0% \u2014 kickDetail.harmonicRatio=0.95 indicates a clean harmonic structure, and Crunch would add grit against the sub-dominant clean harmonic profile; only increase Drive if more saturation color is needed and test against the measured thd=0.29 reference.",
+ "phase1Fields": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.harmonicRatio",
+ "spectralBalance.subBass"
+ ]
+ },
+ {
+ "device": "Scale",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Supersaw Pad",
+ "workflowStage": "SOUND_DESIGN",
+ "category": "MIDI",
+ "parameter": "Scale Name",
+ "value": "Minor; Base = G",
+ "reason": "The measured key is G Minor with keyConfidence=0.71, meeting the \u22650.70 threshold for committing to the scale; Scale MIDI effect with Base=G and Scale Name=Minor locks supersaw pad MIDI input to G Minor.",
+ "advancedTip": "Set the Scale device before the Chord MIDI effect in the chain so note locking happens first; with chordTimelineAgreement=false, use the Scale device as the harmonic safety net and let chord voicings remain open rather than hard-coding specific Chord shift intervals.",
+ "phase1Fields": [
+ "key",
+ "keyConfidence",
+ "chordDetail.chordTimelineAgreement"
+ ]
+ },
+ {
+ "device": "Utility",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Master",
+ "workflowStage": "MIX",
+ "category": "STEREO",
+ "parameter": "Stereo Width",
+ "value": "0%",
+ "reason": "stereoDetail.stereoWidth=0.0 and stereoCorrelation=1.0 across all seven frequency bands confirm this track is pure mono; enforcing Stereo Width=0% on the master Utility preserves this mono constraint and prevents return-track wet signals from introducing stereo spread at the master output.",
+ "advancedTip": "Place the Utility before the Limiter in the master chain so any stereo artefacts introduced by return tracks (Echo Dub, Space Reverb) are collapsed to mono before the Limiter's ceiling assessment \u2014 otherwise the Limiter measures the wider stereo signal and may behave differently than expected.",
+ "phase1Fields": [
+ "stereoDetail.stereoWidth",
+ "stereoDetail.stereoCorrelation",
+ "monoCompatible"
+ ]
+ },
+ {
+ "device": "Limiter",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Master",
+ "workflowStage": "MASTER",
+ "category": "MASTERING",
+ "parameter": "Ceiling",
+ "value": "-0.3 dB, True Peak = On, Release = 150 ms",
+ "reason": "truePeak=+1.1 dBTP exceeds 0 dBTP (inter-sample clipping threshold); the master requires a Limiter with True Peak enabled at Ceiling -0.3 dB to correct the measured over before export to lossy formats.",
+ "advancedTip": "Set Release to 150 ms given the flat lufsRange=0.2 LU envelope \u2014 there is almost no dynamic variation in the source, so a faster Release is unlikely to cause pumping, but 150 ms is safe enough for the subtle 1.4 dB of limiting needed; PLR=11.2 LU is in the transparent limiter range.",
+ "phase1Fields": [
+ "truePeak",
+ "plr",
+ "lufsIntegrated"
+ ]
+ },
+ {
+ "device": "EQ Eight",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Master",
+ "workflowStage": "MASTER",
+ "category": "EQ",
+ "parameter": "Band 2 Frequency",
+ "value": "65 Hz, Bell, +1.5 dB, Q 2.0",
+ "reason": "spectralBalance.subBass=-7.3 dBr is the most dominant band in the spectral balance; a gentle Bell boost at the measured kick fundamental of 65 Hz on the master EQ reinforces the low-end character measured in the source without inflating frequencies outside the kick resonance zone.",
+ "advancedTip": "Follow the EQ Eight with the Limiter \u2014 boosting low end before limiting means the Limiter will catch any resulting peaks; keep the boost subtle (\u2264+2 dB) to stay within the measured loudness budget of -10.1 LUFS.",
+ "phase1Fields": [
+ "spectralBalance.subBass",
+ "spectralDetail.spectralCentroidMean",
+ "kickDetail.fundamentalHz"
+ ]
+ },
+ {
+ "device": "Echo",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Acid Bass",
+ "workflowStage": "MIX",
+ "category": "EFFECTS",
+ "parameter": "Feedback",
+ "value": "28% with Sync = On, Delay Time (L) = dotted-eighth (\u2248290 ms at 124.1 BPM)",
+ "reason": "genreDetail.genre=dub-techno (confidence 0.90) requires a tempo-synced dub echo; at 124.1 BPM one quarter note = 483 ms and a dotted-eighth = 362 ms; routing the Acid Bass to Return:Echo Dub at -20 dB send level with a dotted-eighth Echo repeat adds the signature dub tail to the acid bass line.",
+ "advancedTip": "Enable Filter On in the Echo and set Filter Frequency to \u22482500 Hz so echo repeats roll off above that point \u2014 this keeps the echo tails tonally darker than the dry acid signal and prevents the filter sweep repeats from competing with the dry acid bass centroid oscillation at 42 Hz.",
+ "phase1Fields": [
+ "bpm",
+ "genreDetail.genre",
+ "rhythmDetail.tempoCurve"
+ ]
+ },
+ {
+ "device": "Reverb",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Return:Space Reverb",
+ "workflowStage": "MIX",
+ "category": "EFFECTS",
+ "parameter": "Decay Time",
+ "value": "0.8\u20131.2 s, Room Size 35%, High Cut 4000 Hz",
+ "reason": "reverbDetail.isWet=false and measured=false confirm the source is completely dry; a conservative plate-style Reverb return with Decay Time 0.8\u20131.2 s and High Cut at 4000 Hz adds dub-appropriate space without clashing with the dry mono master, which has a spectralCentroidMean of only 1148 Hz.",
+ "advancedTip": "With High Cut at 4000 Hz the reverb tail will be mostly low-mid; set Predelay to 20\u201330 ms so the dry signal leads the wet by a small gap, which is a classic dub production technique and is consistent with the source's measured predelayMs=null (no original pre-delay measured).",
+ "phase1Fields": [
+ "reverbDetail.isWet",
+ "reverbDetail.measured",
+ "spectralDetail.spectralCentroidMean"
+ ]
+ },
+ {
+ "device": "Glue Compressor",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Drum Bus",
+ "workflowStage": "MIX",
+ "category": "DYNAMICS",
+ "parameter": "Threshold",
+ "value": "-18 dB, Ratio 4:1, Attack 5 ms, Release 100 ms",
+ "reason": "The measured lufsRange=0.2 LU across the entire clip confirms the source drum bus is operating at near-constant loudness; a Glue Compressor with Threshold -18 dB and Ratio 4:1 on the Drum Bus replicates this level uniformity by providing continuous mild compression rather than transient-reactive dynamics.",
+ "advancedTip": "Keep beatsLoudness.kickDominantRatio=0.7267 in mind \u2014 the kick dominates 72.7% of low-band energy; the Glue Compressor should be transparent enough that the kick transient still punches through (set Attack \u2265 5 ms to let the kick onset pass before compression kicks in).",
+ "phase1Fields": [
+ "lufsRange",
+ "beatsLoudness.kickDominantRatio",
+ "crestFactor"
+ ]
+ },
+ {
+ "device": "Operator",
+ "deviceFamily": "NATIVE",
+ "trackContext": "Kick",
+ "workflowStage": "SOUND_DESIGN",
+ "category": "SYNTHESIS",
+ "parameter": "Oscillator A Fine",
+ "value": "-6 cents",
+ "reason": "tuningCents=-6.0 (tuningFrequency=438.48 Hz) means the source is 6 cents flat of A440; setting all pitched instruments' Fine/Detune parameters to -6 cents ensures the rebuild is in tune with any reference samples from the source.",
+ "advancedTip": "Apply the same -6 cent offset to the Acid Bass Analog Osc 1 Detune and Supersaw Pad Wavetable transpose (via a Pitch MIDI effect set to Fine = -6 cents) so all layers share the same measured tuning reference of 438.48 Hz.",
+ "phase1Fields": [
+ "tuningCents",
+ "tuningFrequency"
+ ]
+ }
+ ],
+ "audioObservations": {
+ "soundDesignFingerprint": "A hard mono dub-techno production with three distinctly audible synthesis voices: a distorted sub-kick with a short punch and harmonic ring, a fully squelching TB-303-style acid bass with extreme resonance sweeps, and a detuned supersaw pad that fills the harmonic midrange. No reverb tail is audible on any element \u2014 the mix is completely dry, consistent with reverbDetail.isWet=false. The overall textural quality is dense and mechanical, consistent with a machine-sequenced loop rather than performed material.",
+ "elementCharacter": [
+ {
+ "element": "Kick",
+ "description": "Compact, punchy kick with a clear 65 Hz thud and a short harmonic ring. The distortion character (thd=0.29, isDistorted=true) is audible as a slight crunch on the attack transient rather than full saturation \u2014 it thickens the impact without destroying the sub. Tail is tight, consistent with a programmed 909-style decay."
+ },
+ {
+ "element": "Snare / Mid Percussion",
+ "description": "Body-heavy snare or clap-like element centered around 573 Hz (meanCentroidHz=573.5 Hz) with a 280 ms decay and strong body energy (meanBodyEnergyRatio=0.918). The low snap ratio (0.082) suggests a tuned snare drum with a long, rolling body rather than a crispy rimshot. The tone sits in the lower snare register, contributing to the dark, low-frequency bias of the mix."
+ },
+ {
+ "element": "Hi-Hat",
+ "description": "Very closed hi-hat character: meanDecaySeconds=0.047 (under 50 ms) with high snap energy (meanSnapEnergyRatio=0.838) and a centroid at 7957 Hz. Sounds tight and electronic, consistent with a TR-909 closed hi-hat or a similar short, metallic transient. The significant hi-hat swing (perDrumSwing.hihat=0.5172) gives the groove a shuffled, rolling feel against the more rigid kick."
+ },
+ {
+ "element": "Acid Bass",
+ "description": "Full-resonance 303-style bass with an extreme squelch filter sweep. The filter oscillation at 42 Hz produces a rapid, almost tremolo-like low-frequency movement rather than the slower sweep typical of a manual TB-303 cutoff knob turn. The bass is sustained and continuous (averageDecayMs=1000 ms), sitting in the low-mid register without distinct note articulation \u2014 more of a texture than a discrete melody."
+ },
+ {
+ "element": "Supersaw Pad",
+ "description": "7-voice detuned supersaw providing a continuous harmonic wall in the mid-upper register (spectralBalance shows the mids at -27.4 dBr and upper mids at -34.2 dBr). The 27.4 cent average detune produces a rich chorus-like shimmer, but all of this is collapsed to mono in the master, which creates an interesting phasing texture within the mono field. The pad does not have audible LFO movement \u2014 it sustains statically throughout the loop."
+ }
+ ],
+ "productionSignatures": [
+ "Complete mono mastering \u2014 no stereo information at any frequency band, suggesting deliberate mono engineering for a club system target rather than a monitoring issue",
+ "Brick-wall loudness ceiling with lufsRange=0.2 LU \u2014 consistent with a hardware limiter or softclipper at the final output stage",
+ "Acid bass with sub-frequency centroid oscillation (42 Hz) rather than the traditional human-speed TB-303 cutoff sweep \u2014 points to an LFO-driven filter rather than envelope or manual automation",
+ "Completely dry source signal with no reverb tail on any element \u2014 dub space is implied by genre but not present in the source; the reconstruction adds it as return-track treatment",
+ "Kick distortion that is harmonic-preserving (harmonicRatio=0.95) rather than noise-producing \u2014 consistent with light tape saturation or tube clipping rather than hard digital clipping"
+ ],
+ "mixContext": "The mix is built around three bass-register elements (kick at 65 Hz, acid bass at 79 Hz fundamental, supersaw pad filling the mids) in strict mono. The spectralCentroidMean of 1148 Hz confirms that the energy center of gravity sits well below 2 kHz. The highs and brilliance bands are notably suppressed (spectralBalance.highs=-28.8, brilliance=-21.0) in the average, with the brilliance spikes in spectralBalanceTimeSeries likely being kick transient overtonesses. The mix has almost no midrange presence above 4 kHz \u2014 a deliberate dub-techno darkness choice rather than an EQ defect."
+ },
+ "styleProfile": {
+ "genre": "Dub-Techno",
+ "subGenre": "Acid Techno",
+ "mood": [
+ "Dark",
+ "Hypnotic",
+ "Mechanical",
+ "Trance-like",
+ "Club-ready"
+ ],
+ "instruments": [
+ "Distorted sub-kick (909-style)",
+ "TB-303-style acid bass synthesizer",
+ "7-voice detuned supersaw pad",
+ "Closed hi-hat",
+ "Body-heavy snare"
+ ],
+ "productionTechniques": [
+ "Full mono mastering for club PA",
+ "Brick-wall loudness (lufsRange 0.2 LU)",
+ "303-style resonant filter sweep at sub-LFO rate (42 Hz)",
+ "7-voice supersaw with 27.4 cent average detune",
+ "Completely dry source with no reverb",
+ "Loop-based arrangement with bar-boundary novelty variation"
+ ],
+ "description": "A 124.1 BPM dub-techno loop in G Minor, mastered to -10.1 LUFS in pure mono. Defined by a maximum-resonance acid bass with a 42 Hz centroid oscillation, a 7-voice detuned supersaw harmonic bed, and a distorted 65 Hz sub-kick. The production is club-system focused with no reverb and a brick-wall loudness ceiling.",
+ "generationPrompt": "Dub-techno loop at 124 BPM in G Minor, pure mono, -10 LUFS, featuring a fully resonant TB-303 acid bass with fast LFO squelch, a 7-voice detuned supersaw pad, and a distorted 65 Hz sub-kick with closed hi-hats at 52% swing. Completely dry \u2014 no reverb.",
+ "authoritativeMeasurements": {
+ "bpm": 124.1,
+ "key": "G Minor",
+ "timeSignature": "4/4"
+ }
+ },
+ "recommendations": {
+ "version": "recommendations.v1",
+ "recommendations": [
+ {
+ "device": "Auto Filter",
+ "parameter": "LFO Rate",
+ "value": 42.0,
+ "unit": "Hz",
+ "range": [
+ 33.6,
+ 50.4
+ ],
+ "cited_measurements": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.isAcid",
+ "acidDetail.resonanceLevel"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "parameter": "Resonance",
+ "value": 1.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.confidence",
+ "acidDetail.isAcid"
+ ]
+ },
+ {
+ "device": "Wavetable",
+ "parameter": "Unison Amount",
+ "value": 27.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.voiceCount",
+ "supersawDetail.spectralComplexity"
+ ]
+ },
+ {
+ "device": "Operator",
+ "parameter": "Oscillator A Coarse",
+ "value": 2.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.kickCount",
+ "tuningCents"
+ ]
+ },
+ {
+ "device": "Drum Buss",
+ "parameter": "Boom Frequency",
+ "value": 65.0,
+ "unit": "Hz",
+ "range": [
+ 52.0,
+ 78.0
+ ],
+ "cited_measurements": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.harmonicRatio",
+ "spectralBalance.subBass"
+ ]
+ },
+ {
+ "device": "Scale",
+ "parameter": "Scale Name",
+ "value": "Minor; Base = G",
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "key",
+ "keyConfidence",
+ "chordDetail.chordTimelineAgreement"
+ ]
+ },
+ {
+ "device": "Utility",
+ "parameter": "Stereo Width",
+ "value": 0.0,
+ "unit": "%",
+ "range": [
+ -15.0,
+ 15.0
+ ],
+ "cited_measurements": [
+ "stereoDetail.stereoWidth",
+ "stereoDetail.stereoCorrelation",
+ "monoCompatible"
+ ]
+ },
+ {
+ "device": "Limiter",
+ "parameter": "Ceiling",
+ "value": -0.3,
+ "unit": "dB",
+ "range": [
+ -3.3,
+ 2.7
+ ],
+ "cited_measurements": [
+ "truePeak",
+ "plr",
+ "lufsIntegrated"
+ ]
+ },
+ {
+ "device": "EQ Eight",
+ "parameter": "Band 2 Frequency",
+ "value": 65.0,
+ "unit": "Hz",
+ "range": [
+ 52.0,
+ 78.0
+ ],
+ "cited_measurements": [
+ "spectralBalance.subBass",
+ "spectralDetail.spectralCentroidMean",
+ "kickDetail.fundamentalHz"
+ ]
+ },
+ {
+ "device": "Echo",
+ "parameter": "Feedback",
+ "value": 28.0,
+ "unit": "%",
+ "range": [
+ 13.0,
+ 43.0
+ ],
+ "cited_measurements": [
+ "bpm",
+ "genreDetail.genre",
+ "rhythmDetail.tempoCurve"
+ ]
+ },
+ {
+ "device": "Reverb",
+ "parameter": "Decay Time",
+ "value": 0.8,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "reverbDetail.isWet",
+ "reverbDetail.measured",
+ "spectralDetail.spectralCentroidMean"
+ ]
+ },
+ {
+ "device": "Glue Compressor",
+ "parameter": "Threshold",
+ "value": 4.0,
+ "unit": "ratio",
+ "range": [
+ 3.0,
+ 5.0
+ ],
+ "cited_measurements": [
+ "lufsRange",
+ "beatsLoudness.kickDominantRatio",
+ "crestFactor"
+ ]
+ },
+ {
+ "device": "Operator",
+ "parameter": "Oscillator A Fine",
+ "value": -6.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "tuningCents",
+ "tuningFrequency"
+ ]
+ },
+ {
+ "device": "Operator",
+ "parameter": "Oscillator A Coarse",
+ "value": 2.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "kickDetail.fundamentalHz",
+ "kickDetail.kickCount"
+ ]
+ },
+ {
+ "device": "Saturator",
+ "parameter": "Drive",
+ "value": "Omit \u2014 do NOT add Saturator to this kick",
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "kickDetail.isDistorted",
+ "kickDetail.thd"
+ ]
+ },
+ {
+ "device": "Drum Buss",
+ "parameter": "Boom Frequency",
+ "value": 65.0,
+ "unit": "Hz",
+ "range": [
+ 52.0,
+ 78.0
+ ],
+ "cited_measurements": [
+ "kickDetail.fundamentalHz",
+ "spectralBalance.subBass"
+ ]
+ },
+ {
+ "device": "Drum Buss",
+ "parameter": "Crunch",
+ "value": 0.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "kickDetail.harmonicRatio",
+ "kickDetail.thd"
+ ]
+ },
+ {
+ "device": "Analog",
+ "parameter": "Fil 1 Resonance",
+ "value": 70.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.isAcid"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "parameter": "LFO Rate",
+ "value": 42.0,
+ "unit": "Hz",
+ "range": [
+ 33.6,
+ 50.4
+ ],
+ "cited_measurements": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.confidence"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "parameter": "Filter Type",
+ "value": "Lowpass",
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "acidDetail.isAcid",
+ "bassDetail.fundamentalHz"
+ ]
+ },
+ {
+ "device": "Wavetable",
+ "parameter": "Unison Amount",
+ "value": 27.4,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.voiceCount"
+ ]
+ },
+ {
+ "device": "Wavetable",
+ "parameter": "Voices",
+ "value": 7.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "supersawDetail.voiceCount",
+ "supersawDetail.confidence"
+ ]
+ },
+ {
+ "device": "Scale",
+ "parameter": "Scale Name",
+ "value": "Minor; Base = G",
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "key",
+ "keyConfidence"
+ ]
+ },
+ {
+ "device": "Operator",
+ "parameter": "Oscillator A Fine",
+ "value": -6.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "tuningCents",
+ "tuningFrequency"
+ ]
+ },
+ {
+ "device": "Glue Compressor",
+ "parameter": "Threshold",
+ "value": 4.0,
+ "unit": "ratio",
+ "range": [
+ 3.0,
+ 5.0
+ ],
+ "cited_measurements": [
+ "lufsRange",
+ "crestFactor",
+ "beatsLoudness.kickDominantRatio"
+ ]
+ },
+ {
+ "device": "EQ Eight",
+ "parameter": "Band 1 Filter Type",
+ "value": 20.0,
+ "unit": "Hz",
+ "range": [
+ 16.0,
+ 24.0
+ ],
+ "cited_measurements": [
+ "spectralBalance.subBass",
+ "spectralDetail.spectralCentroidMean",
+ "kickDetail.fundamentalHz"
+ ]
+ },
+ {
+ "device": "Limiter",
+ "parameter": "Ceiling",
+ "value": -0.3,
+ "unit": "dB",
+ "range": [
+ -3.3,
+ 2.7
+ ],
+ "cited_measurements": [
+ "truePeak",
+ "plr",
+ "saturationDetail.clippedSampleCount"
+ ]
+ },
+ {
+ "device": "Analog",
+ "parameter": "Fil 1 Resonance",
+ "value": 80.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "acidDetail.resonanceLevel",
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.confidence"
+ ]
+ },
+ {
+ "device": "Auto Filter",
+ "parameter": "LFO Rate",
+ "value": 42.0,
+ "unit": "Hz",
+ "range": [
+ 33.6,
+ 50.4
+ ],
+ "cited_measurements": [
+ "acidDetail.centroidOscillationHz",
+ "acidDetail.isAcid",
+ "bassDetail.fundamentalHz"
+ ]
+ },
+ {
+ "device": "Wavetable",
+ "parameter": "Unison Amount",
+ "value": 27.0,
+ "unit": null,
+ "range": null,
+ "cited_measurements": [
+ "supersawDetail.voiceCount",
+ "supersawDetail.avgDetuneCents",
+ "supersawDetail.spectralComplexity"
+ ]
+ },
+ {
+ "device": "Utility",
+ "parameter": "Stereo Width",
+ "value": 0.0,
+ "unit": "%",
+ "range": [
+ -15.0,
+ 15.0
+ ],
+ "cited_measurements": [
+ "stereoDetail.stereoWidth",
+ "stereoDetail.stereoCorrelation",
+ "monoCompatible"
+ ]
+ },
+ {
+ "device": "Limiter",
+ "parameter": "Ceiling",
+ "value": -0.3,
+ "unit": "dB",
+ "range": [
+ -3.3,
+ 2.7
+ ],
+ "cited_measurements": [
+ "truePeak",
+ "plr",
+ "lufsIntegrated"
+ ]
+ }
+ ]
+ }
+}
diff --git a/apps/ui/src/App.tsx b/apps/ui/src/App.tsx
index 66cac4e6..3ff63fde 100644
--- a/apps/ui/src/App.tsx
+++ b/apps/ui/src/App.tsx
@@ -835,6 +835,17 @@ export default function App() {
},
},
);
+ } catch (rawError) {
+ // The monitor's onError handles errors surfaced through polling; this
+ // catch covers the awaited create*Attempt POST that runs before the
+ // monitor (backend down / 4xx). Mirror onError's shouldIgnoreRun guard so
+ // an ignored/cancelled run isn't re-surfaced here.
+ if (shouldIgnoreRun(currentRunIdRef.current)) return;
+ const err = rawError instanceof Error ? rawError : new Error(String(rawError));
+ if (!(err instanceof BackendClientError && err.code === 'USER_CANCELLED')) {
+ setError(err.message);
+ setErrorRetryable(err instanceof BackendClientError && err.details?.retryable === true);
+ }
} finally {
setIsAnalyzing(false);
abortControllerRef.current = null;
@@ -904,6 +915,17 @@ export default function App() {
},
},
);
+ } catch (rawError) {
+ // The monitor's onError handles errors surfaced through polling; this
+ // catch covers the awaited create*Attempt POST that runs before the
+ // monitor (backend down / 4xx). Mirror onError's shouldIgnoreRun guard so
+ // an ignored/cancelled run isn't re-surfaced here.
+ if (shouldIgnoreRun(currentRunIdRef.current)) return;
+ const err = rawError instanceof Error ? rawError : new Error(String(rawError));
+ if (!(err instanceof BackendClientError && err.code === 'USER_CANCELLED')) {
+ setError(err.message);
+ setErrorRetryable(err instanceof BackendClientError && err.details?.retryable === true);
+ }
} finally {
setIsAnalyzing(false);
abortControllerRef.current = null;
diff --git a/apps/ui/src/components/AnalysisResults.tsx b/apps/ui/src/components/AnalysisResults.tsx
index 5042eac9..35a4316c 100644
--- a/apps/ui/src/components/AnalysisResults.tsx
+++ b/apps/ui/src/components/AnalysisResults.tsx
@@ -54,6 +54,8 @@ import { ConfidenceBandBadge } from './sessionMusician/ConfidenceBandBadge';
import { RecommendationVerificationBadge } from './RecommendationVerificationBadge';
import { toConfidenceBand } from '../services/sessionMusician/confidenceBand';
import { loadAppliedIds, toggleAppliedId } from '../services/appliedRecommendations';
+import { buildContractValidatedKeys } from '../services/recommendationsContract';
+import { ReconstructionContractPanel } from './ReconstructionContractPanel';
import {
buildArrangementViewModel,
buildMixChainGroups,
@@ -745,7 +747,13 @@ export function AnalysisResults({
const confidenceBadges = toConfidenceBadges(phase2?.confidenceNotes);
const arrangement = buildArrangementViewModel(phase1, phase2?.arrangementOverview);
const sonicCards = buildSonicElementCards(phase1, phase2?.sonicElements);
- const mixGroups = buildMixChainGroups(phase1, phase2?.mixAndMasterChain, phase2?.sonicElements);
+ const contractValidatedKeys = buildContractValidatedKeys(phase2?.recommendations);
+ const mixGroups = buildMixChainGroups(
+ phase1,
+ phase2?.mixAndMasterChain,
+ phase2?.sonicElements,
+ contractValidatedKeys,
+ );
// Audit Finding #14: per-section applied counts, derived from the
// appliedIds Set + the rendered card lists. Keeps the progress chip in the
// section header in sync with the per-card checkboxes without a second
@@ -759,7 +767,7 @@ export function AnalysisResults({
// Audit follow-up: patches render grouped by Mix Chain's processing-stage
// heuristic. `patchCards` (flat list) is retained for the length checks the
// StickyNav and gating already use.
- const patchGroups = buildPatchGroups(phase1, phase2);
+ const patchGroups = buildPatchGroups(phase1, phase2, contractValidatedKeys);
const patchAppliedCount = patchCards.filter((card) => appliedIds.has(card.id)).length;
const projectSetup = isPhase2V2 ? phase2?.projectSetup ?? null : null;
const trackLayout = isPhase2V2 && Array.isArray(phase2?.trackLayout) ? phase2.trackLayout : [];
@@ -2180,6 +2188,17 @@ export function AnalysisResults({
trackContext={card.trackContext}
category={card.category}
/>
+ {card.contractValidated && (
+