Files
product-vamp/docs/composer/implementation_report.md
T
khodowany 68df7292ee Cleanup
2026-10-04 17:14:13 -05:00

11 KiB
Raw Blame History

Reference-focused composer repair

Starting revision: f234dd6. The goal of this revision is to make the active composer construct the musical relationships seen in the four supplied solos, using general rules and original song inputs. It does not import their notes or optimize candidate similarity to them. Exact reconstruction from general theory alone is not claimed.

Actual changes

The active themes → gestures → routes path now chooses harmonic arrival timing, target pitch, sounding duration and release before pitch realization. It can construct an approach into an anticipated chord-tone target with both obligations present. Color destinations are available before route filling. Several compatible treatments can survive within one phrase; the local decoration stage preserves existing contracts instead of replacing them.

On-time/delayed arrival pitches and their uninterrupted tails remain fixed through route filling and refinement. Other cell endings stay provisional. Internal long values can be reopened into eighth-note motion where the selected thematic contract permits it; exact rhythm identities and committed closing holds remain protected. Four-member chord traversals are available alongside the existing mapped paths.

Two general enclosure formulas use an actually mapped whole-tone upper neighbor. A natural sixth on tonic/predominant minor harmony can be a bounded stable color rather than always requiring immediate neighbor resolution. These rules retain written harmony, omissions, scale restrictions on ordinary notes and physical validation. No new scale families or performance effects were added.

Reference inspection now includes every one of the 514 sounding events across the four complete scores. Original labels in technical-fingering and other-notation containers are retained. The review checks recognized treatments against original source harmony, preserves missing initial harmony, and keeps hypotheses separate from validated rules. Remaining unexplained events are reported instead of automatically authorized.

One comparison location

build/solo_reference_comparison/ contains the compact previous four XMLs/manifest, current output, full reference comparison/audio, complete theory review and verification logs. Start with index.html; analysis/theory.md supplies the all-event analysis. Solo 1 means acoustic; Solo 2 means electric.

The references are build/all-of-me-solo-1.xml, all-of-me-solo-2.xml, autumn-leaves-solo-1.xml, and autumn-leaves-solo-2.xml. Source songs remain authoritative in data/songs/. All six input hashes were recorded before work. The optional adapter applies the separately confirmed guitar-written minus-one-octave convention; production import is unchanged. Autumn Leaves aligns at measure 2 / first Gm7 and retains the preceding measure. Four Autumn electric reference events conflict with the production vocal cutoff; neither input is rewritten.

Cleanup removed 1.82 GiB of obsolete generated comparison trees/logs and five superseded tracked audition files. Exact removed paths and sizes are recorded in cleanup.json. Build toolchains, reusable composition/engraving caches, source songs and the four references were preserved. The old multi-experiment documentation was replaced with current commands and contracts.

Evidence and boundaries

The six-role independent-input exercise passed with real catalogs: standalone, reversed, cold/warm, two-process, optional targets present/deleted, and after an electric-only setting change. Current hashes and actual read traces are in dependency/dependency.json. New proposal and route cache tests compare actual uncached/cached results and caller provenance. This does not establish perceptual quality.

The final score weights were preserved. Construction coverage is reported separately from selection under selection_trace.joint_gestures. A supported relationship may never be selected; matching a reference attack is a different fact again. Complete per-phrase evaluation totals remain inspectable.

The first diagnostic profile exposed repeated approach/rhythm/fretboard work. Bounded caches now reuse exact immutable constraints and restore each caller's provenance. No search beam was widened and no machine-speed timeout selects music. Full build costs and final test outcomes are recorded below; concurrent checks are not treated as an isolated benchmark.

This remains a bounded rule-based composer. Some expressive reference relationships are unsupported or not recognized by the conservative optional parser; this is not proof those notes are musically wrong. Guitar placement is a legal-path check, not full ergonomic certification. No ear-based audition or listener approval is claimed.

Completed checks

  • Full Python suite: 576 tests passed in 1700.428s. Command: repository Python runner plus -m unittest discover -s tests -p 'test_*.py'; full log in build/solo_reference_comparison/tests.log. This overlapped the full production build.
  • Focused joint-arrival/evaluator/comparison tests: 33 passed; eight comparison-adapter tests also passed after the presentation update.
  • Six-role real-catalog dependency exercise: passed, including two spawned processes and reference presence/absence; evidence in dependency/dependency.json.
  • git diff --check: passed at the pre-publication checkpoint.

The comparison table aggregates timing-only retained-unit labels (such as diminution) into their direct construction family. The manifest preserves the original raw diagnostic labels. This reporting normalization does not select or edit music.

Published results and comparison

Normal production assets are published at build/build_x86_debug/generated_assets/. The four MusicXML exports in its solo_xml/ directory are byte-identical to the copies in build/solo_reference_comparison/generated/.

Solo New attacks Sounding MIDI range Exact matching reference attacks Differing onset positions
All of Me acoustic 104 50–69 1 186
All of Me electric 100 51–67 3 187
Autumn Leaves acoustic 106 43–62 3 182
Autumn Leaves electric 97 55–70 2 170

None is an exact reference match. These counts are descriptive, not evidence that the new music is closer perceptually. The earlier outputs had 0/3/0/1 exact matching attacks and 202/191/179/182 differing onset positions respectively. Different attack counts change these comparisons; they must not become a production optimization target.

The new winners contain 9/12/13/13 validated expressive contracts respectively. All of Me electric selects one anticipation; the other three winners select none. Early-arrival candidates are constructed, validate and survive pruning in the traces, so their infrequent final selection is now visible separately from lack of capability. No quota was imposed to conceal that result.

All of Me acoustic contains a complete ascending A3–A#3–B3 connection at beats 12–13, and a mapped A3–F#3 approach to G3 at 64–65. All of Me electric sustains B3 as a valid minor ninth over its Am7 context at beats 28–31. These are selected events, not inserted examples or borrowed reference notes. analysis/selected_phrases.md records actual themes, full opening rhythms, every selected treatment, hold completion and alternative score breakdowns. Alternatives shown over equal spans are not falsely presented as the complete solo's globally ranked runners-up.

The first All of Me acoustic theme still begins with a 4.5-beat source-derived rhythmic hold. This and the small number of selected anticipations demonstrate remaining distance from the supplied examples' phrase construction. The next narrow investigation is the interaction between retained source-rhythm contracts and complete-phrase selection: inspect valid arrival alternatives that lose, and source features that prevent editing a provisional opening. Do not respond by adding an enclosure quota, changing accompaniment, fitting reference counts or claiming that more vocabulary alone solved the problem.

Final verification

  • All 12 role documents agree between the cold staged build and the warm normal publication, including notes, timing and TAB. Evidence: verification.json.
  • All eight non-solo role documents (accompaniment, electric source melody and vocal for both songs) match the previous release exactly as parsed JSON.
  • All four MusicXML sounding streams match their selected production role documents. Full-duration harmonic validity, ending completion, and evaluation-contribution sums pass.
  • The two original song files and four supplied references remain SHA-256 identical to their preserved inputs.
  • Native command ctest --test-dir build/build_x86_debug -R '^product_vamp$' --output-on-failure passed in 33.54s, with the required localhost socket access.
  • The single comparison page contains 24 WAVs: complete generated/reference solos, identical-backing mixes, and opening excerpts. All passed PCM clipping checks. All 36 local page links exist. No subjective listening verdict is claimed.

Measured cost

Hardware: Intel Core i7-1355U, 12 logical CPUs; two composition workers. Cold solo generation plus full staged asset build took 2249.06s (37.5 minutes). Regression and dependency checks overlapped part of that run, so this is not an isolated speed comparison with the earlier release.

Cold solo role Seconds
All of Me acoustic 1041.56
All of Me electric 850.48
Autumn Leaves acoustic 1328.58
Autumn Leaves electric 1170.46

Worker times overlap. Four All of Me non-solo caches were warm; the four Autumn Leaves non-solo roles regenerated in under one second each. Engraving rendered 90 new pages, reused two scores and took 16.65s wall time. Stage/input/read evidence is in build-profile.json and build-inputs.json.

The isolated warm CMake publication took 31.49s, including about eight seconds of CMake/configuration overhead; asset generation reported 23s. All twelve role caches and all six engraving results were reused. Musical equality was verified, not assumed from cache-hit flags.

An isolated 30-repeat structural-proposal microbenchmark returned exactly equal results: 0.4422s without the proposal cache versus 0.02193s with it (shared rhythm/position caches already warm). This is a repeated-calculation measurement, not a claimed whole-composer speedup. Cold search is still expensive; candidate construction/validation and repeated thematic alternatives remain performance work.

After verification, duplicate full asset stages, two interrupted stages, temporary tone samples and the binary diagnostic profile were removed. The comparison retains the four current scores, compact previous scores, references through links, useful audio and verification evidence in one directory. No previous output is a generation input.