HARMONY_FIT.md

music/exemplars/instruments/HARMONY_FIT.md

HARMONY FIT -- harmony-fit/1.0

The VERTICAL instrument. It measures whether a melody was written AGAINST a harmony, which is the clause of Josh's round-3 grade -- "they clash ... never any harmonies added on" -- that no other instrument in the battery can see.

What this instrument is, and is not

Headline -- does round 3 sit AT its own random-melody null?

roundcueschord_tone_share (preferred src)same, bar gridnull meannull percentilecues above null p95
round230.4950.4950.4650.6610/3
round330.4280.4280.4700.2280/3
round430.5460.5060.4890.7811/3

A percentile near 0.5 means the melody's agreement with its own chords is indistinguishable from pitches drawn at random from the same mode. A percentile of 1.00 with above null p95 means the agreement could not have happened by chance.

The eight axes, per cue

roundcuesrc1 chord_tone_share (prim / all)2 dissonance_classifiability3 tension mean / p90 / high-share4 chords/min, distinct, entropy5 non-functional6 supported7 par 3rds+6ths8 undecl. parallels
round2PASS2_FLORES_CACIbar_grid0.548 / 0.2720.390 (133/218 unclassifiable)1.43 / 4.00 / 0.61136.38, 7, 3.78 b0.0000.9220.102113
round2PASS2_FLORES_RESTbar_grid0.472 / 0.4470.544 (31/68 unclassifiable)1.59 / 4.00 / 0.66322.50, 7, 3.61 b0.0000.9200.02080
round2PASS2_FLORES_WATERFALLbar_grid0.467 / 0.4670.438 (9/16 unclassifiable)1.45 / 4.00 / 0.27515.26, 6, 2.95 b0.0000.8330.0000
round3PASS5_FLORES_FALLSbar_grid0.379 / 0.3840.395 (66/109 unclassifiable)1.60 / 4.00 / 0.59817.33, 6, 3.30 b0.0000.9750.00073
round3PASS5_FLORES_ROADbar_grid0.447 / 0.4670.379 (118/190 unclassifiable)1.63 / 5.00 / 0.57828.46, 7, 3.73 b0.0000.9260.000125
round3PASS5_FLORES_ROUNDSbar_grid0.459 / 0.4400.358 (147/229 unclassifiable)1.86 / 4.00 / 0.67236.40, 7, 3.84 b0.0000.9050.00051
round4PASS7_FLORES_FALLSharmonic_plan0.580 / 0.5510.378 (130/209 unclassifiable)1.59 / 4.00 / 0.62717.33, 19, 4.83 b0.3460.9640.01266
round4PASS7_FLORES_ROADharmonic_plan0.495 / 0.4350.440 (218/389 unclassifiable)1.64 / 5.00 / 0.58413.96, 19, 5.12 b0.3650.9240.007121
round4PASS7_FLORES_ROUNDSharmonic_plan0.563 / 0.5430.383 (289/468 unclassifiable)1.85 / 5.00 / 0.71317.31, 13, 4.02 b0.1550.9220.00146

The like-for-like column: every round read off the BAR GRID

Round 4 carries a real harmonic_plan, whose chords include a third whether or not any part voices it; rounds 2 and 3 have only the written voicing. Comparing the preferred sources across rounds would compare two different objects, so this table reads every round off the bar grid, which all three have.

roundcuechord_tone_share prim (bar grid)structural tonesnull meanpercentilez
round2PASS2_FLORES_CACI0.548840.4640.9321.50
round2PASS2_FLORES_REST0.472720.4790.500-0.13
round2PASS2_FLORES_WATERFALL0.467300.4510.5500.18
round3PASS5_FLORES_FALLS0.3791030.4670.043-1.86
round3PASS5_FLORES_ROAD0.4471790.4530.425-0.17
round3PASS5_FLORES_ROUNDS0.4591460.4900.215-0.77
round4PASS7_FLORES_FALLS0.543810.4760.9882.14
round4PASS7_FLORES_ROAD0.5211650.4990.472-0.10
round4PASS7_FLORES_ROUNDS0.4541410.4900.8821.19

The random-melody null, per cue

roundcuerealnull meannull sdnull p05 / p50 / p95percentilezabove p95
round2PASS2_FLORES_CACI0.5480.4640.0560.381 / 0.464 / 0.5590.9321.50no
round2PASS2_FLORES_REST0.4720.4790.0540.403 / 0.472 / 0.5690.500-0.13no
round2PASS2_FLORES_WATERFALL0.4670.4510.0860.300 / 0.467 / 0.6000.5500.18no
round3PASS5_FLORES_FALLS0.3790.4670.0480.379 / 0.476 / 0.5340.043-1.86no
round3PASS5_FLORES_ROAD0.4470.4530.0380.391 / 0.453 / 0.5140.425-0.17no
round3PASS5_FLORES_ROUNDS0.4590.4900.0410.418 / 0.493 / 0.5550.215-0.77no
round4PASS7_FLORES_FALLS0.5800.4760.0480.395 / 0.469 / 0.5560.9882.14yes
round4PASS7_FLORES_ROAD0.4950.4990.0470.421 / 0.495 / 0.5790.472-0.10no
round4PASS7_FLORES_ROUNDS0.5630.4900.0620.394 / 0.493 / 0.5920.8821.19no

The accompaniment's own chord fidelity, split by pattern kind

supported_share asks whether the tune had something under it. This asks whether what was under it is playing the harmony it was handed. Only pad and arpeggio ever read the chord grid (pass2_realise.py:262-288); every other kind is degree-space figuration that was never chord-aware, so near-chance fidelity is expected there. Near-chance fidelity on the two kinds that DO read the grid is the defect named at the top of the module: a voicing written in absolute MIDI is routed through degree_to_midi (pass2_realise.py:425-431) and comes out as a different pitch class.

roundcueall accompanimentkinds that READ the gridkinds that do not
round2PASS2_FLORES_CACI0.455arpeggio 0.555, pad 0.504kotekan 0.433, ostinato 0.408, pokok 0.415
round2PASS2_FLORES_REST0.527arpeggio 0.579, pad 0.515drone 1.000, kotekan 0.456, ostinato 0.472, pokok 0.481
round2PASS2_FLORES_WATERFALL0.698arpeggio 0.677, pad 0.682drone 1.000, pokok 0.531
round3PASS5_FLORES_FALLS0.515pad 0.619drone 1.000, score 0.427
round3PASS5_FLORES_ROAD0.529arpeggio 0.562, pad 0.523drone 1.000, ostinato 0.488, pokok 0.487, score 0.480
round3PASS5_FLORES_ROUNDS0.461pad 0.512counterline 0.000, drone 1.000, ostinato 0.364, pokok 0.467, score 0.418
round4PASS7_FLORES_FALLS0.529none presentdrone 0.571, score 0.525
round4PASS7_FLORES_ROAD0.565none presentdrone 0.611, ostinato 0.463, pokok 0.457, score 0.573
round4PASS7_FLORES_ROUNDS0.559none presentdrone 0.750, ostinato 0.468, pokok 0.497, score 0.556

Round 4 only: does the bar grid agree with the harmonic plan?

cuebarsgrid is a subset of the plan's chordidentical
PASS7_FLORES_FALLS540.5370.463
PASS7_FLORES_ROAD1080.7780.667
PASS7_FLORES_ROUNDS1240.5810.581

the bar grid is what pad/arpeggio play; the harmonic plan is what the engine declared. A low subset share means the two disagree and the preferred-source number is the more generous of two readings.

Per-axis verdicts

round2 -- PASS2_FLORES_CACI

round2 -- PASS2_FLORES_REST

round2 -- PASS2_FLORES_WATERFALL

round3 -- PASS5_FLORES_FALLS

round3 -- PASS5_FLORES_ROAD

round3 -- PASS5_FLORES_ROUNDS

round4 -- PASS7_FLORES_FALLS

round4 -- PASS7_FLORES_ROAD

round4 -- PASS7_FLORES_ROUNDS

Generated by harness/site/structure_site.py — the URL path is the repo path. review root