From 7cad6db980d160c7859b13615dd986f4f8a5095d Mon Sep 17 00:00:00 2001 From: khodowany Date: Wed, 30 Sep 2026 02:49:54 -0500 Subject: [PATCH] Sizing --- TECHNICAL_GUIDE.md | 10 +- data/expected/performance_summary.json | 2260 +++++++++++------------- data/songs/autumn-leaves.xml | 2 +- generator/arrange/generate.py | 59 +- generator/arrange/pickup.py | 103 ++ generator/electric.py | 7 +- generator/engraving/attributes.py | 19 - generator/engraving/audit.py | 10 +- generator/engraving/layout.py | 103 +- generator/engraving/notation.py | 4 +- generator/engraving/spans.py | 4 +- generator/engraving/types.py | 1 + tests/fixtures/engraving-python.png | Bin 25749 -> 24930 bytes tests/fixtures/notation-python.png | Bin 56104 -> 53662 bytes tests/test_arrangement_pickup.py | 118 ++ tests/test_electric_voicing.py | 12 + tests/test_engraving.py | 29 + 17 files changed, 1443 insertions(+), 1298 deletions(-) create mode 100644 generator/arrange/pickup.py create mode 100644 tests/test_arrangement_pickup.py diff --git a/TECHNICAL_GUIDE.md b/TECHNICAL_GUIDE.md index c6aab73..ec33fa6 100644 --- a/TECHNICAL_GUIDE.md +++ b/TECHNICAL_GUIDE.md @@ -79,7 +79,7 @@ Pickups use the corresponding tail of a full-meter rhythm bar. Harmonic state ca | Ties and tuplets | Per-pitch ties, including partial chord ties; nested and cross-bar tuplet spans. Nested tuplets require explicit `tuplet-actual` and `tuplet-normal` numbers. | | Small notes | Grace notes with zero metric duration, cue notes, and measured single/paired tremolos. | | Staff state | G/F/C, percussion, and no-clef staves; octave clefs and octave-shift spans; major/minor/modal keys or custom seven-letter alterations; timed key, clef, and meter changes. Authored TAB and technical fingering instructions are rejected; TAB is generated from pitched guitar parts. | -| Meter | Simple, compound, additive, mixed-denominator, and unmetered timelines. A partial measure must be marked `implicit="yes"`; an initial implicit measure is the arrangement pickup. Leading rests are retained. | +| Meter | Simple, compound, additive, mixed-denominator, and unmetered timelines. A partial measure must be marked `implicit="yes"`; an initial implicit measure is the arrangement pickup, including a full measure padded with leading rests. | | Harmony | Structured roots, kinds, inversions, slash basses, and degree additions/alterations/subtractions. Harmony events have their own offsets, including inside held notes. Electric melody generation intentionally reattacks eligible long notes at changed harmonies; import preserves the authored notes. | | Text | Title, composer, part name, multiple lyric verses with syllabification, elisions, and extenders, rehearsal labels at measure starts, and Vamp directives. | | Tempo | Metronome directions and positive quarter-note BPM from ``, either within a direction or directly in a measure. Playback/navigation attributes on `sound` are rejected. | @@ -105,6 +105,8 @@ There is no repeat analyzer, expansion pass, or repeat/ending engraver. Performa Repeat signs, numbered endings, D.C./D.S./coda navigation, and `time-only` ties fail import rather than being ignored or expanded. Write the intended notes and rests explicitly, including any alternate ending. Legacy repeat fields in generated musical documents are rejected; regenerate assets instead of retaining a compatibility interpreter. Full leading-rest measures remain full measures, not inferred pickups. Missing titles fall back to filenames and missing composer credits remain empty, as with the current Soundslice exports. +An explicitly marked opening pickup is excluded from the repeated song body. At each vocal or electric melody entry, it is right-aligned within the preceding arrangement bar. Outgoing music continues until the pickup's first sounding note, then releases as the incoming melody takes over; pickup rests do not erase earlier accompaniment. Lyrics, ties into the following downbeat, tuplets, and octave spans retain their timing. Pickup harmony changes also apply to the accompanying parts at their relocated offsets. All parts share the same bar count, and a pickup longer than its destination bar fails generation. Autumn Leaves uses a four-beat padded pickup and a 32-bar body, yielding 176 arrangement bars rather than 181. + Ordinary ties still link adjacent matching tones across measures and systems. Tuplets, independent voices, local staff changes, and manual page navigation are unchanged. Audio sample sustain loops remain an implementation detail for holding a single note, not a score-repeat feature. ### Runtime Schema @@ -165,7 +167,7 @@ When grace groups steal from both ends of one donor, their adjustments accumulat At runtime the shared on-demand score loader serves both display and audio. A background worker validates and loads only the selected score's samples, converts absolute beat positions to rounded sample frames at the menu BPM, and prepares a Sonus sequence. Pitch does not change with BPM, and rounding absolute positions avoids cumulative timing drift. The I/O loop publishes the prepared sequence and polls completion without doing disk I/O or musical interpretation. Sonus mixes preallocated voices from immutable PCM and retires them on control threads; the callback never synthesizes tones or loads files. Limits are one million events, 512 distinct samples, 64 MiB decoded samples per selection, 64 simultaneous voices including releases, and 24 hours at the selected BPM. Exceeding them reports an error rather than dropping notes. -`audio.playback_enabled` defaults to false. The obsolete `track_enabled` setting is rejected with a diagnostic naming its replacement. Playback suppresses the metronome without changing its stored toggle. Authored tempo marks remain notation; menu BPM is constant throughout a session. Selecting a part starts a new session. Manual page changes never restart or seek. Natural completion, including trailing silence/release, returns to the corresponding part menu with its selection preserved. Leaving the score cancels playback; stale results cannot close a newer score. Errors remain visible rather than being mistaken for completion. +`audio.playback_enabled` defaults to false. The obsolete `track_enabled` setting is rejected with a diagnostic naming its replacement. Playback suppresses the metronome without changing its stored toggle. Authored tempo data remains in the musical document but is not printed; menu BPM is constant throughout a session. Selecting a part starts a new session. Manual page changes never restart or seek. Natural completion, including trailing silence/release, returns to the corresponding part menu with its selection preserved. Leaving the score cancels playback; stale results cannot close a newer score. Errors remain visible rather than being mistaken for completion. `--once` additionally validates referenced audio without opening display/audio hardware. Runtime packages contain WAVs alongside pages and the SQLite catalog; the source XML and Python dependencies remain build-only. @@ -183,11 +185,11 @@ Voices retain separate stems and collision offsets; chord tones retain their own Generated guitar tones carry `tablature: {string, fret}`; their staff is marked `tablature: true`. `engraving/tablature.py` draws a six-line TAB view below standard notation, sharing onset columns, barlines, and page breaks. Both views belong to one system and never duplicate the semantic timeline or playback events. Standard notation carries rhythm, rests, and tuplets; TAB carries positions, solo slashes, and tied continuations without rest glyphs. Strings and frets are validated against sounding pitch, and the layout audit checks each visible TAB numeral's position and alignment. -Every part uses two music systems per page; only an odd final system occupies a row alone. Pagination reserves two rows below the header, keeping a fixed gap and the footer clear. Both systems on a page share a uniform scale when their measured height exceeds a row; notation, TAB, text, and anchors scale together without changing musical content. Guitar layout starts with 10-pixel notation spacing, 10.5-pixel TAB spacing, 12-pixel fret labels, and a 14-pixel gap between systems. The unscaled TAB spacing accommodates Petaluma numerals up to 9.75 pixels tall. The layout audit accounts for each system's scale when verifying pitch and TAB alignment. Existing `.pages/*.png` preview files are the exact packaged page textures. +Every part uses two music systems per page; only an odd final system occupies a row alone. A compact title/composer/part header reserves the same height on every page, wrapping credits if necessary. Pagination fits the two systems using their individual heights and distributes extra whitespace around them while retaining minimum system and header/footer clearances. One uniform scale applies throughout the entire part, reducing the ordinary notation size only when required by the tallest pair. Notation, TAB, text, and anchors scale together without changing musical content. Guitar layout starts with 10-pixel notation spacing, 10.5-pixel TAB spacing, 12-pixel fret labels, and a 14-pixel minimum gap between systems. The unscaled TAB spacing accommodates Petaluma numerals up to 9.75 pixels tall. Tempo markings consume neither ink nor spacing; their semantic data is preserved. Existing `.pages/*.png` preview files are the exact packaged page textures. Line breaks occur only at measure boundaries. Each line fits as many complete measures as readable spacing allows; it never fills remaining space with a partial measure. A complete measure exceeding the available width or height fails with source and measure context instead of being split or squeezed to fit. Authored ties, beams, tuplets, and lyric spans can continue across whole-measure line breaks. Column measurement and fit trials reuse a score index and bounded column cache. Page placement then re-spaces columns for the final height-fitting scale, keeping every notation/TAB staff at the same physical left and right margins without stretching glyphs. Non-final lines are justified; a short final line retains natural note spacing while staff lines extend to the same right margin. Layout audits enforce these margins as well as musical coverage. -`audit.py` checks the final layout against the musical model: timeline and fragment coverage, exact fragment durations, actual glyph bounds, pitch positions, visible note primitives, required accidentals, ties, lyrics, harmonies, tempos and spans. It rejects out-of-page geometry and collisions among unrelated noteheads, accidentals and same-lane text. Staff, ledger, stem, beam and tie contacts are intentional. This is not a proof of publication-quality engraving for every possible MusicXML document; notation changes need targeted semantic, geometry and reviewed image tests. The writer's XML round-trip audit is retained separately in the test suite. +`audit.py` checks the final layout against the musical model: timeline and fragment coverage, exact fragment durations, actual glyph bounds, pitch positions, visible note primitives, required accidentals, ties, lyrics, harmonies and spans. It enforces consistent notation size throughout a part and header/footer clearance, and rejects out-of-page geometry and collisions among unrelated noteheads, accidentals and same-lane text. Staff, ledger, stem, beam and tie contacts are intentional. This is not a proof of publication-quality engraving for every possible MusicXML document; notation changes need targeted semantic, geometry and reviewed image tests. The writer's XML round-trip audit is retained separately in the test suite. Bundles preserve the complete `music` object. Presentation identifies the `Vamp Python` engraver; its style fingerprint includes the style settings, both font files, font-specific metadata and the glyph-name mapping. Scores, playback manifests, and the catalog have no numbered schema labels. Required fields, types, relationships, dimensions, and checksums determine whether generated data is usable. Incompatible data is rejected, never migrated or guessed. diff --git a/data/expected/performance_summary.json b/data/expected/performance_summary.json index ae36cd0..f8bbcbd 100644 --- a/data/expected/performance_summary.json +++ b/data/expected/performance_summary.json @@ -4,7 +4,7 @@ "composer": "", "key_signature": "F", "part_type": "acoustic", - "measure_count": 181, + "measure_count": 176, "section_labels": [ { "measure": 1, @@ -15,23 +15,23 @@ "label": "Vocal Melody" }, { - "measure": 42, + "measure": 41, "label": "Guitar Melody" }, { - "measure": 75, + "measure": 73, "label": "Guitar Solo" }, { - "measure": 108, + "measure": 105, "label": "Guitar Solo" }, { - "measure": 141, + "measure": 137, "label": "Vocal Melody" }, { - "measure": 174, + "measure": 169, "label": "Ending" } ], @@ -138,7 +138,12 @@ { "measure": 9, "section_label": "Vocal Melody", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "Gm7" + } + ], "duration": "4", "slash_count": 0 }, @@ -148,7 +153,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "C7" } ], "duration": "4", @@ -160,7 +165,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "FM7" } ], "duration": "4", @@ -172,7 +177,7 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "BbM7" } ], "duration": "4", @@ -184,7 +189,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "Em7b5" } ], "duration": "4", @@ -196,7 +201,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "A7" } ], "duration": "4", @@ -208,7 +213,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7" + "symbol": "Dm" } ], "duration": "4", @@ -217,19 +222,19 @@ { "measure": 16, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, { "measure": 17, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "Gm7" + } + ], "duration": "4", "slash_count": 0 }, @@ -239,7 +244,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "C7" } ], "duration": "4", @@ -251,7 +256,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "FM7" } ], "duration": "4", @@ -263,7 +268,7 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "BbM7" } ], "duration": "4", @@ -275,7 +280,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "Em7b5" } ], "duration": "4", @@ -287,7 +292,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "A7" } ], "duration": "4", @@ -299,7 +304,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7" + "symbol": "Dm" } ], "duration": "4", @@ -308,19 +313,19 @@ { "measure": 24, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, { "measure": 25, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], "duration": "4", "slash_count": 0 }, @@ -330,7 +335,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "A7b9" } ], "duration": "4", @@ -342,7 +347,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "Dm" } ], "duration": "4", @@ -351,19 +356,19 @@ { "measure": 28, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, { "measure": 29, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "Gm7" + } + ], "duration": "4", "slash_count": 0 }, @@ -373,7 +378,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "C7" } ], "duration": "4", @@ -385,7 +390,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "FM7" } ], "duration": "4", @@ -394,19 +399,19 @@ { "measure": 32, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "FM7" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, { "measure": 33, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], "duration": "4", "slash_count": 0 }, @@ -416,7 +421,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "A7b9" } ], "duration": "4", @@ -428,7 +433,11 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "Dm7" + }, + { + "onset": "2", + "symbol": "G7" } ], "duration": "4", @@ -440,11 +449,11 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm7" + "symbol": "Cm7" }, { "onset": "2", - "symbol": "G7" + "symbol": "F7" } ], "duration": "4", @@ -456,11 +465,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Cm7" - }, - { - "onset": "2", - "symbol": "F7" + "symbol": "Em7b5" } ], "duration": "4", @@ -472,7 +477,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "A7b9" } ], "duration": "4", @@ -484,7 +489,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "Dm" } ], "duration": "4", @@ -493,26 +498,31 @@ { "measure": 40, "section_label": "", + "harmonies": [], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 41, + "section_label": "Guitar Melody", "harmonies": [ { "onset": "0", - "symbol": "Dm" + "symbol": "Gm7" } ], "duration": "4", "slash_count": 0 }, - { - "measure": 41, - "section_label": "", - "harmonies": [], - "duration": "4", - "slash_count": 0 - }, { "measure": 42, - "section_label": "Guitar Melody", - "harmonies": [], + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "C7" + } + ], "duration": "4", "slash_count": 0 }, @@ -522,7 +532,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "FM7" } ], "duration": "4", @@ -534,7 +544,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "BbM7" } ], "duration": "4", @@ -546,7 +556,7 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "Em7b5" } ], "duration": "4", @@ -558,7 +568,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "A7" } ], "duration": "4", @@ -570,7 +580,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Dm" } ], "duration": "4", @@ -579,12 +589,7 @@ { "measure": 48, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "A7" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, @@ -594,7 +599,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm" + "symbol": "Gm7" } ], "duration": "4", @@ -603,7 +608,12 @@ { "measure": 50, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "C7" + } + ], "duration": "4", "slash_count": 0 }, @@ -613,7 +623,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "FM7" } ], "duration": "4", @@ -625,7 +635,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "BbM7" } ], "duration": "4", @@ -637,7 +647,7 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "Em7b5" } ], "duration": "4", @@ -649,7 +659,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "A7" } ], "duration": "4", @@ -661,7 +671,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Dm" } ], "duration": "4", @@ -670,37 +680,13 @@ { "measure": 56, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "A7" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, { "measure": 57, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 58, - "section_label": "", - "harmonies": [], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 59, - "section_label": "", "harmonies": [ { "onset": "0", @@ -711,7 +697,7 @@ "slash_count": 0 }, { - "measure": 60, + "measure": 58, "section_label": "", "harmonies": [ { @@ -723,7 +709,7 @@ "slash_count": 0 }, { - "measure": 61, + "measure": 59, "section_label": "", "harmonies": [ { @@ -735,14 +721,14 @@ "slash_count": 0 }, { - "measure": 62, + "measure": 60, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, { - "measure": 63, + "measure": 61, "section_label": "", "harmonies": [ { @@ -754,7 +740,7 @@ "slash_count": 0 }, { - "measure": 64, + "measure": 62, "section_label": "", "harmonies": [ { @@ -766,7 +752,7 @@ "slash_count": 0 }, { - "measure": 65, + "measure": 63, "section_label": "", "harmonies": [ { @@ -778,19 +764,47 @@ "slash_count": 0 }, { - "measure": 66, + "measure": 64, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, + { + "measure": 65, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 66, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "A7b9" + } + ], + "duration": "4", + "slash_count": 0 + }, { "measure": 67, "section_label": "", "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Dm7" + }, + { + "onset": "2", + "symbol": "G7" } ], "duration": "4", @@ -802,7 +816,11 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "Cm7" + }, + { + "onset": "2", + "symbol": "F7" } ], "duration": "4", @@ -814,11 +832,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm7" - }, - { - "onset": "2", - "symbol": "G7" + "symbol": "Em7b5" } ], "duration": "4", @@ -830,11 +844,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Cm7" - }, - { - "onset": "2", - "symbol": "F7" + "symbol": "A7b9" } ], "duration": "4", @@ -846,7 +856,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Dm" } ], "duration": "4", @@ -855,38 +865,43 @@ { "measure": 72, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "A7b9" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, { "measure": 73, - "section_label": "", + "section_label": "Guitar Solo", "harmonies": [ { "onset": "0", - "symbol": "Dm" + "symbol": "Gm7" } ], "duration": "4", - "slash_count": 0 + "slash_count": 4 }, { "measure": 74, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "C7" + } + ], "duration": "4", - "slash_count": 0 + "slash_count": 4 }, { "measure": 75, - "section_label": "Guitar Solo", - "harmonies": [], + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "FM7" + } + ], "duration": "4", "slash_count": 4 }, @@ -896,7 +911,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "BbM7" } ], "duration": "4", @@ -908,7 +923,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "Em7b5" } ], "duration": "4", @@ -920,7 +935,7 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "A7" } ], "duration": "4", @@ -932,7 +947,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "Dm" } ], "duration": "4", @@ -941,12 +956,7 @@ { "measure": 80, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Em7b5" - } - ], + "harmonies": [], "duration": "4", "slash_count": 4 }, @@ -956,7 +966,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7" + "symbol": "Gm7" } ], "duration": "4", @@ -965,37 +975,6 @@ { "measure": 82, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], - "duration": "4", - "slash_count": 4 - }, - { - "measure": 83, - "section_label": "", - "harmonies": [], - "duration": "4", - "slash_count": 4 - }, - { - "measure": 84, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Gm7" - } - ], - "duration": "4", - "slash_count": 4 - }, - { - "measure": 85, - "section_label": "", "harmonies": [ { "onset": "0", @@ -1006,7 +985,7 @@ "slash_count": 4 }, { - "measure": 86, + "measure": 83, "section_label": "", "harmonies": [ { @@ -1018,7 +997,7 @@ "slash_count": 4 }, { - "measure": 87, + "measure": 84, "section_label": "", "harmonies": [ { @@ -1030,7 +1009,7 @@ "slash_count": 4 }, { - "measure": 88, + "measure": 85, "section_label": "", "harmonies": [ { @@ -1042,7 +1021,7 @@ "slash_count": 4 }, { - "measure": 89, + "measure": 86, "section_label": "", "harmonies": [ { @@ -1054,7 +1033,7 @@ "slash_count": 4 }, { - "measure": 90, + "measure": 87, "section_label": "", "harmonies": [ { @@ -1066,14 +1045,14 @@ "slash_count": 4 }, { - "measure": 91, + "measure": 88, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 4 }, { - "measure": 92, + "measure": 89, "section_label": "", "harmonies": [ { @@ -1085,7 +1064,7 @@ "slash_count": 4 }, { - "measure": 93, + "measure": 90, "section_label": "", "harmonies": [ { @@ -1097,7 +1076,7 @@ "slash_count": 4 }, { - "measure": 94, + "measure": 91, "section_label": "", "harmonies": [ { @@ -1109,14 +1088,14 @@ "slash_count": 4 }, { - "measure": 95, + "measure": 92, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 4 }, { - "measure": 96, + "measure": 93, "section_label": "", "harmonies": [ { @@ -1128,7 +1107,7 @@ "slash_count": 4 }, { - "measure": 97, + "measure": 94, "section_label": "", "harmonies": [ { @@ -1140,7 +1119,7 @@ "slash_count": 4 }, { - "measure": 98, + "measure": 95, "section_label": "", "harmonies": [ { @@ -1152,14 +1131,14 @@ "slash_count": 4 }, { - "measure": 99, + "measure": 96, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 4 }, { - "measure": 100, + "measure": 97, "section_label": "", "harmonies": [ { @@ -1171,7 +1150,7 @@ "slash_count": 4 }, { - "measure": 101, + "measure": 98, "section_label": "", "harmonies": [ { @@ -1183,7 +1162,7 @@ "slash_count": 4 }, { - "measure": 102, + "measure": 99, "section_label": "", "harmonies": [ { @@ -1199,7 +1178,7 @@ "slash_count": 4 }, { - "measure": 103, + "measure": 100, "section_label": "", "harmonies": [ { @@ -1215,7 +1194,7 @@ "slash_count": 4 }, { - "measure": 104, + "measure": 101, "section_label": "", "harmonies": [ { @@ -1227,7 +1206,7 @@ "slash_count": 4 }, { - "measure": 105, + "measure": 102, "section_label": "", "harmonies": [ { @@ -1239,7 +1218,7 @@ "slash_count": 4 }, { - "measure": 106, + "measure": 103, "section_label": "", "harmonies": [ { @@ -1251,22 +1230,15 @@ "slash_count": 4 }, { - "measure": 107, + "measure": 104, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 4 }, { - "measure": 108, + "measure": 105, "section_label": "Guitar Solo", - "harmonies": [], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 109, - "section_label": "", "harmonies": [ { "onset": "0", @@ -1277,7 +1249,7 @@ "slash_count": 0 }, { - "measure": 110, + "measure": 106, "section_label": "", "harmonies": [ { @@ -1289,7 +1261,7 @@ "slash_count": 0 }, { - "measure": 111, + "measure": 107, "section_label": "", "harmonies": [ { @@ -1301,7 +1273,7 @@ "slash_count": 0 }, { - "measure": 112, + "measure": 108, "section_label": "", "harmonies": [ { @@ -1313,7 +1285,7 @@ "slash_count": 0 }, { - "measure": 113, + "measure": 109, "section_label": "", "harmonies": [ { @@ -1325,7 +1297,7 @@ "slash_count": 0 }, { - "measure": 114, + "measure": 110, "section_label": "", "harmonies": [ { @@ -1337,7 +1309,7 @@ "slash_count": 0 }, { - "measure": 115, + "measure": 111, "section_label": "", "harmonies": [ { @@ -1349,14 +1321,14 @@ "slash_count": 0 }, { - "measure": 116, + "measure": 112, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, { - "measure": 117, + "measure": 113, "section_label": "", "harmonies": [ { @@ -1368,7 +1340,7 @@ "slash_count": 0 }, { - "measure": 118, + "measure": 114, "section_label": "", "harmonies": [ { @@ -1380,7 +1352,7 @@ "slash_count": 0 }, { - "measure": 119, + "measure": 115, "section_label": "", "harmonies": [ { @@ -1392,7 +1364,7 @@ "slash_count": 0 }, { - "measure": 120, + "measure": 116, "section_label": "", "harmonies": [ { @@ -1403,6 +1375,49 @@ "duration": "4", "slash_count": 0 }, + { + "measure": 117, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 118, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "A7" + } + ], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 119, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Dm" + } + ], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 120, + "section_label": "", + "harmonies": [], + "duration": "4", + "slash_count": 0 + }, { "measure": 121, "section_label": "", @@ -1421,7 +1436,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7" + "symbol": "A7b9" } ], "duration": "4", @@ -1452,7 +1467,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Gm7" } ], "duration": "4", @@ -1464,7 +1479,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "C7" } ], "duration": "4", @@ -1476,7 +1491,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm" + "symbol": "FM7" } ], "duration": "4", @@ -1495,7 +1510,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "Em7b5" } ], "duration": "4", @@ -1507,7 +1522,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "A7b9" } ], "duration": "4", @@ -1519,7 +1534,11 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "Dm7" + }, + { + "onset": "2", + "symbol": "G7" } ], "duration": "4", @@ -1528,7 +1547,16 @@ { "measure": 132, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "Cm7" + }, + { + "onset": "2", + "symbol": "F7" + } + ], "duration": "4", "slash_count": 0 }, @@ -1562,11 +1590,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm7" - }, - { - "onset": "2", - "symbol": "G7" + "symbol": "Dm" } ], "duration": "4", @@ -1575,26 +1599,17 @@ { "measure": 136, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Cm7" - }, - { - "onset": "2", - "symbol": "F7" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, { "measure": 137, - "section_label": "", + "section_label": "Vocal Melody", "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Gm7" } ], "duration": "4", @@ -1606,7 +1621,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "C7" } ], "duration": "4", @@ -1618,7 +1633,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm" + "symbol": "FM7" } ], "duration": "4", @@ -1627,14 +1642,24 @@ { "measure": 140, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "BbM7" + } + ], "duration": "4", "slash_count": 0 }, { "measure": 141, - "section_label": "Vocal Melody", - "harmonies": [], + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], "duration": "4", "slash_count": 0 }, @@ -1644,7 +1669,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "A7" } ], "duration": "4", @@ -1656,7 +1681,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "Dm" } ], "duration": "4", @@ -1665,12 +1690,7 @@ { "measure": 144, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "FM7" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, @@ -1680,7 +1700,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "Gm7" } ], "duration": "4", @@ -1692,7 +1712,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "C7" } ], "duration": "4", @@ -1704,7 +1724,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7" + "symbol": "FM7" } ], "duration": "4", @@ -1713,61 +1733,6 @@ { "measure": 148, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 149, - "section_label": "", - "harmonies": [], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 150, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Gm7" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 151, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "C7" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 152, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "FM7" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 153, - "section_label": "", "harmonies": [ { "onset": "0", @@ -1778,7 +1743,7 @@ "slash_count": 0 }, { - "measure": 154, + "measure": 149, "section_label": "", "harmonies": [ { @@ -1790,7 +1755,7 @@ "slash_count": 0 }, { - "measure": 155, + "measure": 150, "section_label": "", "harmonies": [ { @@ -1802,7 +1767,7 @@ "slash_count": 0 }, { - "measure": 156, + "measure": 151, "section_label": "", "harmonies": [ { @@ -1814,14 +1779,14 @@ "slash_count": 0 }, { - "measure": 157, + "measure": 152, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, { - "measure": 158, + "measure": 153, "section_label": "", "harmonies": [ { @@ -1833,7 +1798,7 @@ "slash_count": 0 }, { - "measure": 159, + "measure": 154, "section_label": "", "harmonies": [ { @@ -1845,7 +1810,7 @@ "slash_count": 0 }, { - "measure": 160, + "measure": 155, "section_label": "", "harmonies": [ { @@ -1857,14 +1822,14 @@ "slash_count": 0 }, { - "measure": 161, + "measure": 156, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, { - "measure": 162, + "measure": 157, "section_label": "", "harmonies": [ { @@ -1876,7 +1841,7 @@ "slash_count": 0 }, { - "measure": 163, + "measure": 158, "section_label": "", "harmonies": [ { @@ -1888,7 +1853,7 @@ "slash_count": 0 }, { - "measure": 164, + "measure": 159, "section_label": "", "harmonies": [ { @@ -1900,19 +1865,87 @@ "slash_count": 0 }, { - "measure": 165, + "measure": 160, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, + { + "measure": 161, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 162, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "A7b9" + } + ], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 163, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Dm7" + }, + { + "onset": "2", + "symbol": "G7" + } + ], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 164, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Cm7" + }, + { + "onset": "2", + "symbol": "F7" + } + ], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 165, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], + "duration": "4", + "slash_count": 0 + }, { "measure": 166, "section_label": "", "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "A7b9" } ], "duration": "4", @@ -1924,7 +1957,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "Dm" } ], "duration": "4", @@ -1933,80 +1966,12 @@ { "measure": 168, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm7" - }, - { - "onset": "2", - "symbol": "G7" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 169, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Cm7" - }, - { - "onset": "2", - "symbol": "F7" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 170, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Em7b5" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 171, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "A7b9" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 172, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 173, - "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, { - "measure": 174, + "measure": 169, "section_label": "Ending", "harmonies": [ { @@ -2018,7 +1983,7 @@ "slash_count": 0 }, { - "measure": 175, + "measure": 170, "section_label": "", "harmonies": [ { @@ -2030,7 +1995,7 @@ "slash_count": 0 }, { - "measure": 176, + "measure": 171, "section_label": "", "harmonies": [ { @@ -2046,7 +2011,7 @@ "slash_count": 0 }, { - "measure": 177, + "measure": 172, "section_label": "", "harmonies": [ { @@ -2062,7 +2027,7 @@ "slash_count": 0 }, { - "measure": 178, + "measure": 173, "section_label": "", "harmonies": [ { @@ -2074,7 +2039,7 @@ "slash_count": 0 }, { - "measure": 179, + "measure": 174, "section_label": "", "harmonies": [ { @@ -2086,7 +2051,7 @@ "slash_count": 0 }, { - "measure": 180, + "measure": 175, "section_label": "", "harmonies": [ { @@ -2098,7 +2063,7 @@ "slash_count": 0 }, { - "measure": 181, + "measure": 176, "section_label": "", "harmonies": [], "duration": "4", @@ -2111,7 +2076,7 @@ "composer": "", "key_signature": "F", "part_type": "electric", - "measure_count": 181, + "measure_count": 176, "section_labels": [ { "measure": 1, @@ -2122,23 +2087,23 @@ "label": "Vocal Melody" }, { - "measure": 42, + "measure": 41, "label": "Guitar Melody" }, { - "measure": 75, + "measure": 73, "label": "Guitar Solo" }, { - "measure": 108, + "measure": 105, "label": "Guitar Solo" }, { - "measure": 141, + "measure": 137, "label": "Vocal Melody" }, { - "measure": 174, + "measure": 169, "label": "Ending" } ], @@ -2245,7 +2210,12 @@ { "measure": 9, "section_label": "Vocal Melody", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "Gm7" + } + ], "duration": "4", "slash_count": 0 }, @@ -2255,7 +2225,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "C7" } ], "duration": "4", @@ -2267,7 +2237,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "FM7" } ], "duration": "4", @@ -2279,7 +2249,7 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "BbM7" } ], "duration": "4", @@ -2291,7 +2261,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "Em7b5" } ], "duration": "4", @@ -2303,7 +2273,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "A7" } ], "duration": "4", @@ -2315,7 +2285,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7" + "symbol": "Dm" } ], "duration": "4", @@ -2324,19 +2294,19 @@ { "measure": 16, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, { "measure": 17, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "Gm7" + } + ], "duration": "4", "slash_count": 0 }, @@ -2346,7 +2316,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "C7" } ], "duration": "4", @@ -2358,7 +2328,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "FM7" } ], "duration": "4", @@ -2370,7 +2340,7 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "BbM7" } ], "duration": "4", @@ -2382,7 +2352,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "Em7b5" } ], "duration": "4", @@ -2394,7 +2364,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "A7" } ], "duration": "4", @@ -2406,7 +2376,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7" + "symbol": "Dm" } ], "duration": "4", @@ -2415,19 +2385,19 @@ { "measure": 24, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, { "measure": 25, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], "duration": "4", "slash_count": 0 }, @@ -2437,7 +2407,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "A7b9" } ], "duration": "4", @@ -2449,7 +2419,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "Dm" } ], "duration": "4", @@ -2458,19 +2428,19 @@ { "measure": 28, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, { "measure": 29, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "Gm7" + } + ], "duration": "4", "slash_count": 0 }, @@ -2480,7 +2450,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "C7" } ], "duration": "4", @@ -2492,7 +2462,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "FM7" } ], "duration": "4", @@ -2501,19 +2471,19 @@ { "measure": 32, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "FM7" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, { "measure": 33, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], "duration": "4", "slash_count": 0 }, @@ -2523,7 +2493,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "A7b9" } ], "duration": "4", @@ -2535,7 +2505,11 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "Dm7" + }, + { + "onset": "2", + "symbol": "G7" } ], "duration": "4", @@ -2547,11 +2521,11 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm7" + "symbol": "Cm7" }, { "onset": "2", - "symbol": "G7" + "symbol": "F7" } ], "duration": "4", @@ -2563,11 +2537,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Cm7" - }, - { - "onset": "2", - "symbol": "F7" + "symbol": "Em7b5" } ], "duration": "4", @@ -2579,7 +2549,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "A7b9" } ], "duration": "4", @@ -2591,7 +2561,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "Dm" } ], "duration": "4", @@ -2600,26 +2570,31 @@ { "measure": 40, "section_label": "", + "harmonies": [], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 41, + "section_label": "Guitar Melody", "harmonies": [ { "onset": "0", - "symbol": "Dm" + "symbol": "Gm7" } ], "duration": "4", "slash_count": 0 }, - { - "measure": 41, - "section_label": "", - "harmonies": [], - "duration": "4", - "slash_count": 0 - }, { "measure": 42, - "section_label": "Guitar Melody", - "harmonies": [], + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "C7" + } + ], "duration": "4", "slash_count": 0 }, @@ -2629,7 +2604,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "FM7" } ], "duration": "4", @@ -2641,7 +2616,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "BbM7" } ], "duration": "4", @@ -2653,7 +2628,7 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "Em7b5" } ], "duration": "4", @@ -2665,7 +2640,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "A7" } ], "duration": "4", @@ -2677,7 +2652,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Dm" } ], "duration": "4", @@ -2686,12 +2661,7 @@ { "measure": 48, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "A7" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, @@ -2701,7 +2671,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm" + "symbol": "Gm7" } ], "duration": "4", @@ -2710,7 +2680,12 @@ { "measure": 50, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "C7" + } + ], "duration": "4", "slash_count": 0 }, @@ -2720,7 +2695,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "FM7" } ], "duration": "4", @@ -2732,7 +2707,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "BbM7" } ], "duration": "4", @@ -2744,7 +2719,7 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "Em7b5" } ], "duration": "4", @@ -2756,7 +2731,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "A7" } ], "duration": "4", @@ -2768,7 +2743,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Dm" } ], "duration": "4", @@ -2777,37 +2752,13 @@ { "measure": 56, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "A7" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, { "measure": 57, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 58, - "section_label": "", - "harmonies": [], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 59, - "section_label": "", "harmonies": [ { "onset": "0", @@ -2818,7 +2769,7 @@ "slash_count": 0 }, { - "measure": 60, + "measure": 58, "section_label": "", "harmonies": [ { @@ -2830,7 +2781,7 @@ "slash_count": 0 }, { - "measure": 61, + "measure": 59, "section_label": "", "harmonies": [ { @@ -2842,14 +2793,14 @@ "slash_count": 0 }, { - "measure": 62, + "measure": 60, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, { - "measure": 63, + "measure": 61, "section_label": "", "harmonies": [ { @@ -2861,7 +2812,7 @@ "slash_count": 0 }, { - "measure": 64, + "measure": 62, "section_label": "", "harmonies": [ { @@ -2873,7 +2824,7 @@ "slash_count": 0 }, { - "measure": 65, + "measure": 63, "section_label": "", "harmonies": [ { @@ -2885,19 +2836,47 @@ "slash_count": 0 }, { - "measure": 66, + "measure": 64, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, + { + "measure": 65, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 66, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "A7b9" + } + ], + "duration": "4", + "slash_count": 0 + }, { "measure": 67, "section_label": "", "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Dm7" + }, + { + "onset": "2", + "symbol": "G7" } ], "duration": "4", @@ -2909,7 +2888,11 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "Cm7" + }, + { + "onset": "2", + "symbol": "F7" } ], "duration": "4", @@ -2921,11 +2904,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm7" - }, - { - "onset": "2", - "symbol": "G7" + "symbol": "Em7b5" } ], "duration": "4", @@ -2937,11 +2916,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Cm7" - }, - { - "onset": "2", - "symbol": "F7" + "symbol": "A7b9" } ], "duration": "4", @@ -2953,7 +2928,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Dm" } ], "duration": "4", @@ -2962,22 +2937,17 @@ { "measure": 72, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "A7b9" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, { "measure": 73, - "section_label": "", + "section_label": "Guitar Solo", "harmonies": [ { "onset": "0", - "symbol": "Dm" + "symbol": "Gm7" } ], "duration": "4", @@ -2986,14 +2956,24 @@ { "measure": 74, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "C7" + } + ], "duration": "4", "slash_count": 0 }, { "measure": 75, - "section_label": "Guitar Solo", - "harmonies": [], + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "FM7" + } + ], "duration": "4", "slash_count": 0 }, @@ -3003,7 +2983,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "BbM7" } ], "duration": "4", @@ -3015,7 +2995,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "Em7b5" } ], "duration": "4", @@ -3027,7 +3007,7 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "A7" } ], "duration": "4", @@ -3039,7 +3019,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "Dm" } ], "duration": "4", @@ -3048,12 +3028,7 @@ { "measure": 80, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Em7b5" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, @@ -3063,7 +3038,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7" + "symbol": "Gm7" } ], "duration": "4", @@ -3072,37 +3047,6 @@ { "measure": 82, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 83, - "section_label": "", - "harmonies": [], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 84, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Gm7" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 85, - "section_label": "", "harmonies": [ { "onset": "0", @@ -3113,7 +3057,7 @@ "slash_count": 0 }, { - "measure": 86, + "measure": 83, "section_label": "", "harmonies": [ { @@ -3125,7 +3069,7 @@ "slash_count": 0 }, { - "measure": 87, + "measure": 84, "section_label": "", "harmonies": [ { @@ -3137,7 +3081,7 @@ "slash_count": 0 }, { - "measure": 88, + "measure": 85, "section_label": "", "harmonies": [ { @@ -3149,7 +3093,7 @@ "slash_count": 0 }, { - "measure": 89, + "measure": 86, "section_label": "", "harmonies": [ { @@ -3161,7 +3105,7 @@ "slash_count": 0 }, { - "measure": 90, + "measure": 87, "section_label": "", "harmonies": [ { @@ -3173,14 +3117,14 @@ "slash_count": 0 }, { - "measure": 91, + "measure": 88, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, { - "measure": 92, + "measure": 89, "section_label": "", "harmonies": [ { @@ -3192,7 +3136,7 @@ "slash_count": 0 }, { - "measure": 93, + "measure": 90, "section_label": "", "harmonies": [ { @@ -3204,7 +3148,7 @@ "slash_count": 0 }, { - "measure": 94, + "measure": 91, "section_label": "", "harmonies": [ { @@ -3216,14 +3160,14 @@ "slash_count": 0 }, { - "measure": 95, + "measure": 92, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, { - "measure": 96, + "measure": 93, "section_label": "", "harmonies": [ { @@ -3235,7 +3179,7 @@ "slash_count": 0 }, { - "measure": 97, + "measure": 94, "section_label": "", "harmonies": [ { @@ -3247,7 +3191,7 @@ "slash_count": 0 }, { - "measure": 98, + "measure": 95, "section_label": "", "harmonies": [ { @@ -3259,14 +3203,14 @@ "slash_count": 0 }, { - "measure": 99, + "measure": 96, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, { - "measure": 100, + "measure": 97, "section_label": "", "harmonies": [ { @@ -3278,7 +3222,7 @@ "slash_count": 0 }, { - "measure": 101, + "measure": 98, "section_label": "", "harmonies": [ { @@ -3290,7 +3234,7 @@ "slash_count": 0 }, { - "measure": 102, + "measure": 99, "section_label": "", "harmonies": [ { @@ -3306,7 +3250,7 @@ "slash_count": 0 }, { - "measure": 103, + "measure": 100, "section_label": "", "harmonies": [ { @@ -3322,7 +3266,7 @@ "slash_count": 0 }, { - "measure": 104, + "measure": 101, "section_label": "", "harmonies": [ { @@ -3334,7 +3278,7 @@ "slash_count": 0 }, { - "measure": 105, + "measure": 102, "section_label": "", "harmonies": [ { @@ -3346,7 +3290,7 @@ "slash_count": 0 }, { - "measure": 106, + "measure": 103, "section_label": "", "harmonies": [ { @@ -3358,22 +3302,15 @@ "slash_count": 0 }, { - "measure": 107, + "measure": 104, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, { - "measure": 108, + "measure": 105, "section_label": "Guitar Solo", - "harmonies": [], - "duration": "4", - "slash_count": 4 - }, - { - "measure": 109, - "section_label": "", "harmonies": [ { "onset": "0", @@ -3384,7 +3321,7 @@ "slash_count": 4 }, { - "measure": 110, + "measure": 106, "section_label": "", "harmonies": [ { @@ -3396,7 +3333,7 @@ "slash_count": 4 }, { - "measure": 111, + "measure": 107, "section_label": "", "harmonies": [ { @@ -3408,7 +3345,7 @@ "slash_count": 4 }, { - "measure": 112, + "measure": 108, "section_label": "", "harmonies": [ { @@ -3420,7 +3357,7 @@ "slash_count": 4 }, { - "measure": 113, + "measure": 109, "section_label": "", "harmonies": [ { @@ -3432,7 +3369,7 @@ "slash_count": 4 }, { - "measure": 114, + "measure": 110, "section_label": "", "harmonies": [ { @@ -3444,7 +3381,7 @@ "slash_count": 4 }, { - "measure": 115, + "measure": 111, "section_label": "", "harmonies": [ { @@ -3456,14 +3393,14 @@ "slash_count": 4 }, { - "measure": 116, + "measure": 112, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 4 }, { - "measure": 117, + "measure": 113, "section_label": "", "harmonies": [ { @@ -3475,7 +3412,7 @@ "slash_count": 4 }, { - "measure": 118, + "measure": 114, "section_label": "", "harmonies": [ { @@ -3487,7 +3424,7 @@ "slash_count": 4 }, { - "measure": 119, + "measure": 115, "section_label": "", "harmonies": [ { @@ -3499,7 +3436,7 @@ "slash_count": 4 }, { - "measure": 120, + "measure": 116, "section_label": "", "harmonies": [ { @@ -3510,6 +3447,49 @@ "duration": "4", "slash_count": 4 }, + { + "measure": 117, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], + "duration": "4", + "slash_count": 4 + }, + { + "measure": 118, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "A7" + } + ], + "duration": "4", + "slash_count": 4 + }, + { + "measure": 119, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Dm" + } + ], + "duration": "4", + "slash_count": 4 + }, + { + "measure": 120, + "section_label": "", + "harmonies": [], + "duration": "4", + "slash_count": 4 + }, { "measure": 121, "section_label": "", @@ -3528,7 +3508,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7" + "symbol": "A7b9" } ], "duration": "4", @@ -3559,7 +3539,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Gm7" } ], "duration": "4", @@ -3571,7 +3551,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "C7" } ], "duration": "4", @@ -3583,7 +3563,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm" + "symbol": "FM7" } ], "duration": "4", @@ -3602,7 +3582,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "Em7b5" } ], "duration": "4", @@ -3614,7 +3594,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "A7b9" } ], "duration": "4", @@ -3626,7 +3606,11 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "Dm7" + }, + { + "onset": "2", + "symbol": "G7" } ], "duration": "4", @@ -3635,7 +3619,16 @@ { "measure": 132, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "Cm7" + }, + { + "onset": "2", + "symbol": "F7" + } + ], "duration": "4", "slash_count": 4 }, @@ -3669,11 +3662,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm7" - }, - { - "onset": "2", - "symbol": "G7" + "symbol": "Dm" } ], "duration": "4", @@ -3682,30 +3671,21 @@ { "measure": 136, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Cm7" - }, - { - "onset": "2", - "symbol": "F7" - } - ], + "harmonies": [], "duration": "4", "slash_count": 4 }, { "measure": 137, - "section_label": "", + "section_label": "Vocal Melody", "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Gm7" } ], "duration": "4", - "slash_count": 4 + "slash_count": 0 }, { "measure": 138, @@ -3713,11 +3693,11 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "C7" } ], "duration": "4", - "slash_count": 4 + "slash_count": 0 }, { "measure": 139, @@ -3725,23 +3705,33 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm" + "symbol": "FM7" } ], "duration": "4", - "slash_count": 4 + "slash_count": 0 }, { "measure": 140, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "BbM7" + } + ], "duration": "4", - "slash_count": 4 + "slash_count": 0 }, { "measure": 141, - "section_label": "Vocal Melody", - "harmonies": [], + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], "duration": "4", "slash_count": 0 }, @@ -3751,7 +3741,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "A7" } ], "duration": "4", @@ -3763,7 +3753,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "Dm" } ], "duration": "4", @@ -3772,12 +3762,7 @@ { "measure": 144, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "FM7" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0 }, @@ -3787,7 +3772,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "Gm7" } ], "duration": "4", @@ -3799,7 +3784,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "C7" } ], "duration": "4", @@ -3811,7 +3796,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7" + "symbol": "FM7" } ], "duration": "4", @@ -3820,61 +3805,6 @@ { "measure": 148, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 149, - "section_label": "", - "harmonies": [], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 150, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Gm7" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 151, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "C7" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 152, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "FM7" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 153, - "section_label": "", "harmonies": [ { "onset": "0", @@ -3885,7 +3815,7 @@ "slash_count": 0 }, { - "measure": 154, + "measure": 149, "section_label": "", "harmonies": [ { @@ -3897,7 +3827,7 @@ "slash_count": 0 }, { - "measure": 155, + "measure": 150, "section_label": "", "harmonies": [ { @@ -3909,7 +3839,7 @@ "slash_count": 0 }, { - "measure": 156, + "measure": 151, "section_label": "", "harmonies": [ { @@ -3921,14 +3851,14 @@ "slash_count": 0 }, { - "measure": 157, + "measure": 152, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, { - "measure": 158, + "measure": 153, "section_label": "", "harmonies": [ { @@ -3940,7 +3870,7 @@ "slash_count": 0 }, { - "measure": 159, + "measure": 154, "section_label": "", "harmonies": [ { @@ -3952,7 +3882,7 @@ "slash_count": 0 }, { - "measure": 160, + "measure": 155, "section_label": "", "harmonies": [ { @@ -3964,14 +3894,14 @@ "slash_count": 0 }, { - "measure": 161, + "measure": 156, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, { - "measure": 162, + "measure": 157, "section_label": "", "harmonies": [ { @@ -3983,7 +3913,7 @@ "slash_count": 0 }, { - "measure": 163, + "measure": 158, "section_label": "", "harmonies": [ { @@ -3995,7 +3925,7 @@ "slash_count": 0 }, { - "measure": 164, + "measure": 159, "section_label": "", "harmonies": [ { @@ -4007,19 +3937,87 @@ "slash_count": 0 }, { - "measure": 165, + "measure": 160, "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, + { + "measure": 161, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 162, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "A7b9" + } + ], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 163, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Dm7" + }, + { + "onset": "2", + "symbol": "G7" + } + ], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 164, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Cm7" + }, + { + "onset": "2", + "symbol": "F7" + } + ], + "duration": "4", + "slash_count": 0 + }, + { + "measure": 165, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], + "duration": "4", + "slash_count": 0 + }, { "measure": 166, "section_label": "", "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "A7b9" } ], "duration": "4", @@ -4031,7 +4029,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "Dm" } ], "duration": "4", @@ -4040,80 +4038,12 @@ { "measure": 168, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm7" - }, - { - "onset": "2", - "symbol": "G7" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 169, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Cm7" - }, - { - "onset": "2", - "symbol": "F7" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 170, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Em7b5" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 171, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "A7b9" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 172, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], - "duration": "4", - "slash_count": 0 - }, - { - "measure": 173, - "section_label": "", "harmonies": [], "duration": "4", "slash_count": 0 }, { - "measure": 174, + "measure": 169, "section_label": "Ending", "harmonies": [ { @@ -4125,7 +4055,7 @@ "slash_count": 0 }, { - "measure": 175, + "measure": 170, "section_label": "", "harmonies": [ { @@ -4137,7 +4067,7 @@ "slash_count": 0 }, { - "measure": 176, + "measure": 171, "section_label": "", "harmonies": [ { @@ -4153,7 +4083,7 @@ "slash_count": 0 }, { - "measure": 177, + "measure": 172, "section_label": "", "harmonies": [ { @@ -4169,7 +4099,7 @@ "slash_count": 0 }, { - "measure": 178, + "measure": 173, "section_label": "", "harmonies": [ { @@ -4181,7 +4111,7 @@ "slash_count": 0 }, { - "measure": 179, + "measure": 174, "section_label": "", "harmonies": [ { @@ -4193,7 +4123,7 @@ "slash_count": 0 }, { - "measure": 180, + "measure": 175, "section_label": "", "harmonies": [ { @@ -4205,7 +4135,7 @@ "slash_count": 0 }, { - "measure": 181, + "measure": 176, "section_label": "", "harmonies": [], "duration": "4", @@ -4218,7 +4148,7 @@ "composer": "", "key_signature": "F", "part_type": "vocal", - "measure_count": 181, + "measure_count": 176, "section_labels": [ { "measure": 1, @@ -4229,23 +4159,23 @@ "label": "Vocal Melody" }, { - "measure": 42, + "measure": 41, "label": "Guitar Melody" }, { - "measure": 75, + "measure": 73, "label": "Guitar Solo" }, { - "measure": 108, + "measure": 105, "label": "Guitar Solo" }, { - "measure": 141, + "measure": 137, "label": "Vocal Melody" }, { - "measure": 174, + "measure": 169, "label": "Ending" } ], @@ -4369,16 +4299,6 @@ "harmonies": [], "duration": "4", "slash_count": 0, - "vocal_skeleton": [ - "0+4 whole rest " - ] - }, - { - "measure": 9, - "section_label": "Vocal Melody", - "harmonies": [], - "duration": "4", - "slash_count": 0, "vocal_skeleton": [ "0+1 quarter rest ", "1+1 quarter note D4 The", @@ -4387,8 +4307,8 @@ ] }, { - "measure": 10, - "section_label": "", + "measure": 9, + "section_label": "Vocal Melody", "harmonies": [ { "onset": "0", @@ -4402,7 +4322,7 @@ ] }, { - "measure": 11, + "measure": 10, "section_label": "", "harmonies": [ { @@ -4420,7 +4340,7 @@ ] }, { - "measure": 12, + "measure": 11, "section_label": "", "harmonies": [ { @@ -4436,7 +4356,7 @@ ] }, { - "measure": 13, + "measure": 12, "section_label": "", "harmonies": [ { @@ -4454,7 +4374,7 @@ ] }, { - "measure": 14, + "measure": 13, "section_label": "", "harmonies": [ { @@ -4469,7 +4389,7 @@ ] }, { - "measure": 15, + "measure": 14, "section_label": "", "harmonies": [ { @@ -4487,7 +4407,7 @@ ] }, { - "measure": 16, + "measure": 15, "section_label": "", "harmonies": [ { @@ -4502,7 +4422,7 @@ ] }, { - "measure": 17, + "measure": 16, "section_label": "", "harmonies": [], "duration": "4", @@ -4515,7 +4435,7 @@ ] }, { - "measure": 18, + "measure": 17, "section_label": "", "harmonies": [ { @@ -4530,7 +4450,7 @@ ] }, { - "measure": 19, + "measure": 18, "section_label": "", "harmonies": [ { @@ -4548,7 +4468,7 @@ ] }, { - "measure": 20, + "measure": 19, "section_label": "", "harmonies": [ { @@ -4564,7 +4484,7 @@ ] }, { - "measure": 21, + "measure": 20, "section_label": "", "harmonies": [ { @@ -4582,7 +4502,7 @@ ] }, { - "measure": 22, + "measure": 21, "section_label": "", "harmonies": [ { @@ -4597,7 +4517,7 @@ ] }, { - "measure": 23, + "measure": 22, "section_label": "", "harmonies": [ { @@ -4615,7 +4535,7 @@ ] }, { - "measure": 24, + "measure": 23, "section_label": "", "harmonies": [ { @@ -4630,7 +4550,7 @@ ] }, { - "measure": 25, + "measure": 24, "section_label": "", "harmonies": [], "duration": "4", @@ -4643,7 +4563,7 @@ ] }, { - "measure": 26, + "measure": 25, "section_label": "", "harmonies": [ { @@ -4660,7 +4580,7 @@ ] }, { - "measure": 27, + "measure": 26, "section_label": "", "harmonies": [ { @@ -4678,7 +4598,7 @@ ] }, { - "measure": 28, + "measure": 27, "section_label": "", "harmonies": [ { @@ -4693,7 +4613,7 @@ ] }, { - "measure": 29, + "measure": 28, "section_label": "", "harmonies": [], "duration": "4", @@ -4706,7 +4626,7 @@ ] }, { - "measure": 30, + "measure": 29, "section_label": "", "harmonies": [ { @@ -4721,7 +4641,7 @@ ] }, { - "measure": 31, + "measure": 30, "section_label": "", "harmonies": [ { @@ -4739,7 +4659,7 @@ ] }, { - "measure": 32, + "measure": 31, "section_label": "", "harmonies": [ { @@ -4754,7 +4674,7 @@ ] }, { - "measure": 33, + "measure": 32, "section_label": "", "harmonies": [], "duration": "4", @@ -4767,7 +4687,7 @@ ] }, { - "measure": 34, + "measure": 33, "section_label": "", "harmonies": [ { @@ -4785,7 +4705,7 @@ ] }, { - "measure": 35, + "measure": 34, "section_label": "", "harmonies": [ { @@ -4801,7 +4721,7 @@ ] }, { - "measure": 36, + "measure": 35, "section_label": "", "harmonies": [ { @@ -4821,7 +4741,7 @@ ] }, { - "measure": 37, + "measure": 36, "section_label": "", "harmonies": [ { @@ -4841,7 +4761,7 @@ ] }, { - "measure": 38, + "measure": 37, "section_label": "", "harmonies": [ { @@ -4857,7 +4777,7 @@ ] }, { - "measure": 39, + "measure": 38, "section_label": "", "harmonies": [ { @@ -4874,7 +4794,7 @@ ] }, { - "measure": 40, + "measure": 39, "section_label": "", "harmonies": [ { @@ -4889,7 +4809,7 @@ ] }, { - "measure": 41, + "measure": 40, "section_label": "", "harmonies": [], "duration": "4", @@ -4899,9 +4819,29 @@ ] }, { - "measure": 42, + "measure": 41, "section_label": "Guitar Melody", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "Gm7" + } + ], + "duration": "4", + "slash_count": 0, + "vocal_skeleton": [ + "0+4 whole rest " + ] + }, + { + "measure": 42, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "C7" + } + ], "duration": "4", "slash_count": 0, "vocal_skeleton": [ @@ -4914,7 +4854,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "FM7" } ], "duration": "4", @@ -4929,7 +4869,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "BbM7" } ], "duration": "4", @@ -4944,7 +4884,7 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "Em7b5" } ], "duration": "4", @@ -4959,7 +4899,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "A7" } ], "duration": "4", @@ -4974,7 +4914,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Dm" } ], "duration": "4", @@ -4986,12 +4926,7 @@ { "measure": 48, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "A7" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0, "vocal_skeleton": [ @@ -5004,7 +4939,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm" + "symbol": "Gm7" } ], "duration": "4", @@ -5016,7 +4951,12 @@ { "measure": 50, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "C7" + } + ], "duration": "4", "slash_count": 0, "vocal_skeleton": [ @@ -5029,7 +4969,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "FM7" } ], "duration": "4", @@ -5044,7 +4984,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "BbM7" } ], "duration": "4", @@ -5059,7 +4999,7 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "Em7b5" } ], "duration": "4", @@ -5074,7 +5014,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "A7" } ], "duration": "4", @@ -5089,7 +5029,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Dm" } ], "duration": "4", @@ -5101,12 +5041,7 @@ { "measure": 56, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "A7" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0, "vocal_skeleton": [ @@ -5116,31 +5051,6 @@ { "measure": 57, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], - "duration": "4", - "slash_count": 0, - "vocal_skeleton": [ - "0+4 whole rest " - ] - }, - { - "measure": 58, - "section_label": "", - "harmonies": [], - "duration": "4", - "slash_count": 0, - "vocal_skeleton": [ - "0+4 whole rest " - ] - }, - { - "measure": 59, - "section_label": "", "harmonies": [ { "onset": "0", @@ -5154,7 +5064,7 @@ ] }, { - "measure": 60, + "measure": 58, "section_label": "", "harmonies": [ { @@ -5169,7 +5079,7 @@ ] }, { - "measure": 61, + "measure": 59, "section_label": "", "harmonies": [ { @@ -5184,7 +5094,7 @@ ] }, { - "measure": 62, + "measure": 60, "section_label": "", "harmonies": [], "duration": "4", @@ -5194,7 +5104,7 @@ ] }, { - "measure": 63, + "measure": 61, "section_label": "", "harmonies": [ { @@ -5209,7 +5119,7 @@ ] }, { - "measure": 64, + "measure": 62, "section_label": "", "harmonies": [ { @@ -5224,7 +5134,7 @@ ] }, { - "measure": 65, + "measure": 63, "section_label": "", "harmonies": [ { @@ -5239,7 +5149,7 @@ ] }, { - "measure": 66, + "measure": 64, "section_label": "", "harmonies": [], "duration": "4", @@ -5248,13 +5158,47 @@ "0+4 whole rest " ] }, + { + "measure": 65, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], + "duration": "4", + "slash_count": 0, + "vocal_skeleton": [ + "0+4 whole rest " + ] + }, + { + "measure": 66, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "A7b9" + } + ], + "duration": "4", + "slash_count": 0, + "vocal_skeleton": [ + "0+4 whole rest " + ] + }, { "measure": 67, "section_label": "", "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Dm7" + }, + { + "onset": "2", + "symbol": "G7" } ], "duration": "4", @@ -5269,7 +5213,11 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "Cm7" + }, + { + "onset": "2", + "symbol": "F7" } ], "duration": "4", @@ -5284,11 +5232,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm7" - }, - { - "onset": "2", - "symbol": "G7" + "symbol": "Em7b5" } ], "duration": "4", @@ -5303,11 +5247,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Cm7" - }, - { - "onset": "2", - "symbol": "F7" + "symbol": "A7b9" } ], "duration": "4", @@ -5322,7 +5262,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Dm" } ], "duration": "4", @@ -5334,12 +5274,7 @@ { "measure": 72, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "A7b9" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0, "vocal_skeleton": [ @@ -5348,11 +5283,11 @@ }, { "measure": 73, - "section_label": "", + "section_label": "Guitar Solo", "harmonies": [ { "onset": "0", - "symbol": "Dm" + "symbol": "Gm7" } ], "duration": "4", @@ -5364,7 +5299,12 @@ { "measure": 74, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "C7" + } + ], "duration": "4", "slash_count": 0, "vocal_skeleton": [ @@ -5373,8 +5313,13 @@ }, { "measure": 75, - "section_label": "Guitar Solo", - "harmonies": [], + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "FM7" + } + ], "duration": "4", "slash_count": 0, "vocal_skeleton": [ @@ -5387,7 +5332,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "BbM7" } ], "duration": "4", @@ -5402,7 +5347,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "Em7b5" } ], "duration": "4", @@ -5417,7 +5362,7 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "A7" } ], "duration": "4", @@ -5432,7 +5377,7 @@ "harmonies": [ { "onset": "0", - "symbol": "BbM7" + "symbol": "Dm" } ], "duration": "4", @@ -5444,12 +5389,7 @@ { "measure": 80, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Em7b5" - } - ], + "harmonies": [], "duration": "4", "slash_count": 0, "vocal_skeleton": [ @@ -5462,7 +5402,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7" + "symbol": "Gm7" } ], "duration": "4", @@ -5474,46 +5414,6 @@ { "measure": 82, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], - "duration": "4", - "slash_count": 0, - "vocal_skeleton": [ - "0+4 whole rest " - ] - }, - { - "measure": 83, - "section_label": "", - "harmonies": [], - "duration": "4", - "slash_count": 0, - "vocal_skeleton": [ - "0+4 whole rest " - ] - }, - { - "measure": 84, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Gm7" - } - ], - "duration": "4", - "slash_count": 0, - "vocal_skeleton": [ - "0+4 whole rest " - ] - }, - { - "measure": 85, - "section_label": "", "harmonies": [ { "onset": "0", @@ -5527,7 +5427,7 @@ ] }, { - "measure": 86, + "measure": 83, "section_label": "", "harmonies": [ { @@ -5542,7 +5442,7 @@ ] }, { - "measure": 87, + "measure": 84, "section_label": "", "harmonies": [ { @@ -5557,7 +5457,7 @@ ] }, { - "measure": 88, + "measure": 85, "section_label": "", "harmonies": [ { @@ -5572,7 +5472,7 @@ ] }, { - "measure": 89, + "measure": 86, "section_label": "", "harmonies": [ { @@ -5587,7 +5487,7 @@ ] }, { - "measure": 90, + "measure": 87, "section_label": "", "harmonies": [ { @@ -5602,7 +5502,7 @@ ] }, { - "measure": 91, + "measure": 88, "section_label": "", "harmonies": [], "duration": "4", @@ -5612,7 +5512,7 @@ ] }, { - "measure": 92, + "measure": 89, "section_label": "", "harmonies": [ { @@ -5627,7 +5527,7 @@ ] }, { - "measure": 93, + "measure": 90, "section_label": "", "harmonies": [ { @@ -5642,7 +5542,7 @@ ] }, { - "measure": 94, + "measure": 91, "section_label": "", "harmonies": [ { @@ -5657,7 +5557,7 @@ ] }, { - "measure": 95, + "measure": 92, "section_label": "", "harmonies": [], "duration": "4", @@ -5667,7 +5567,7 @@ ] }, { - "measure": 96, + "measure": 93, "section_label": "", "harmonies": [ { @@ -5682,7 +5582,7 @@ ] }, { - "measure": 97, + "measure": 94, "section_label": "", "harmonies": [ { @@ -5697,7 +5597,7 @@ ] }, { - "measure": 98, + "measure": 95, "section_label": "", "harmonies": [ { @@ -5712,7 +5612,7 @@ ] }, { - "measure": 99, + "measure": 96, "section_label": "", "harmonies": [], "duration": "4", @@ -5722,7 +5622,7 @@ ] }, { - "measure": 100, + "measure": 97, "section_label": "", "harmonies": [ { @@ -5737,7 +5637,7 @@ ] }, { - "measure": 101, + "measure": 98, "section_label": "", "harmonies": [ { @@ -5752,7 +5652,7 @@ ] }, { - "measure": 102, + "measure": 99, "section_label": "", "harmonies": [ { @@ -5771,7 +5671,7 @@ ] }, { - "measure": 103, + "measure": 100, "section_label": "", "harmonies": [ { @@ -5790,7 +5690,7 @@ ] }, { - "measure": 104, + "measure": 101, "section_label": "", "harmonies": [ { @@ -5805,7 +5705,7 @@ ] }, { - "measure": 105, + "measure": 102, "section_label": "", "harmonies": [ { @@ -5820,7 +5720,7 @@ ] }, { - "measure": 106, + "measure": 103, "section_label": "", "harmonies": [ { @@ -5835,7 +5735,7 @@ ] }, { - "measure": 107, + "measure": 104, "section_label": "", "harmonies": [], "duration": "4", @@ -5845,18 +5745,8 @@ ] }, { - "measure": 108, + "measure": 105, "section_label": "Guitar Solo", - "harmonies": [], - "duration": "4", - "slash_count": 0, - "vocal_skeleton": [ - "0+4 whole rest " - ] - }, - { - "measure": 109, - "section_label": "", "harmonies": [ { "onset": "0", @@ -5870,7 +5760,7 @@ ] }, { - "measure": 110, + "measure": 106, "section_label": "", "harmonies": [ { @@ -5885,7 +5775,7 @@ ] }, { - "measure": 111, + "measure": 107, "section_label": "", "harmonies": [ { @@ -5900,7 +5790,7 @@ ] }, { - "measure": 112, + "measure": 108, "section_label": "", "harmonies": [ { @@ -5915,7 +5805,7 @@ ] }, { - "measure": 113, + "measure": 109, "section_label": "", "harmonies": [ { @@ -5930,7 +5820,7 @@ ] }, { - "measure": 114, + "measure": 110, "section_label": "", "harmonies": [ { @@ -5945,7 +5835,7 @@ ] }, { - "measure": 115, + "measure": 111, "section_label": "", "harmonies": [ { @@ -5960,7 +5850,7 @@ ] }, { - "measure": 116, + "measure": 112, "section_label": "", "harmonies": [], "duration": "4", @@ -5970,7 +5860,7 @@ ] }, { - "measure": 117, + "measure": 113, "section_label": "", "harmonies": [ { @@ -5985,7 +5875,7 @@ ] }, { - "measure": 118, + "measure": 114, "section_label": "", "harmonies": [ { @@ -6000,7 +5890,7 @@ ] }, { - "measure": 119, + "measure": 115, "section_label": "", "harmonies": [ { @@ -6015,7 +5905,7 @@ ] }, { - "measure": 120, + "measure": 116, "section_label": "", "harmonies": [ { @@ -6029,6 +5919,61 @@ "0+4 whole rest " ] }, + { + "measure": 117, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Em7b5" + } + ], + "duration": "4", + "slash_count": 0, + "vocal_skeleton": [ + "0+4 whole rest " + ] + }, + { + "measure": 118, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "A7" + } + ], + "duration": "4", + "slash_count": 0, + "vocal_skeleton": [ + "0+4 whole rest " + ] + }, + { + "measure": 119, + "section_label": "", + "harmonies": [ + { + "onset": "0", + "symbol": "Dm" + } + ], + "duration": "4", + "slash_count": 0, + "vocal_skeleton": [ + "0+4 whole rest " + ] + }, + { + "measure": 120, + "section_label": "", + "harmonies": [], + "duration": "4", + "slash_count": 0, + "vocal_skeleton": [ + "0+4 whole rest " + ] + }, { "measure": 121, "section_label": "", @@ -6050,7 +5995,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7" + "symbol": "A7b9" } ], "duration": "4", @@ -6090,7 +6035,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Em7b5" + "symbol": "Gm7" } ], "duration": "4", @@ -6105,7 +6050,7 @@ "harmonies": [ { "onset": "0", - "symbol": "A7b9" + "symbol": "C7" } ], "duration": "4", @@ -6120,7 +6065,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm" + "symbol": "FM7" } ], "duration": "4", @@ -6145,7 +6090,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Gm7" + "symbol": "Em7b5" } ], "duration": "4", @@ -6160,7 +6105,7 @@ "harmonies": [ { "onset": "0", - "symbol": "C7" + "symbol": "A7b9" } ], "duration": "4", @@ -6175,7 +6120,11 @@ "harmonies": [ { "onset": "0", - "symbol": "FM7" + "symbol": "Dm7" + }, + { + "onset": "2", + "symbol": "G7" } ], "duration": "4", @@ -6187,7 +6136,16 @@ { "measure": 132, "section_label": "", - "harmonies": [], + "harmonies": [ + { + "onset": "0", + "symbol": "Cm7" + }, + { + "onset": "2", + "symbol": "F7" + } + ], "duration": "4", "slash_count": 0, "vocal_skeleton": [ @@ -6230,11 +6188,7 @@ "harmonies": [ { "onset": "0", - "symbol": "Dm7" - }, - { - "onset": "2", - "symbol": "G7" + "symbol": "Dm" } ], "duration": "4", @@ -6246,80 +6200,6 @@ { "measure": 136, "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Cm7" - }, - { - "onset": "2", - "symbol": "F7" - } - ], - "duration": "4", - "slash_count": 0, - "vocal_skeleton": [ - "0+4 whole rest " - ] - }, - { - "measure": 137, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Em7b5" - } - ], - "duration": "4", - "slash_count": 0, - "vocal_skeleton": [ - "0+4 whole rest " - ] - }, - { - "measure": 138, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "A7b9" - } - ], - "duration": "4", - "slash_count": 0, - "vocal_skeleton": [ - "0+4 whole rest " - ] - }, - { - "measure": 139, - "section_label": "", - "harmonies": [ - { - "onset": "0", - "symbol": "Dm" - } - ], - "duration": "4", - "slash_count": 0, - "vocal_skeleton": [ - "0+4 whole rest " - ] - }, - { - "measure": 140, - "section_label": "", - "harmonies": [], - "duration": "4", - "slash_count": 0, - "vocal_skeleton": [ - "0+4 whole rest " - ] - }, - { - "measure": 141, - "section_label": "Vocal Melody", "harmonies": [], "duration": "4", "slash_count": 0, @@ -6331,8 +6211,8 @@ ] }, { - "measure": 142, - "section_label": "", + "measure": 137, + "section_label": "Vocal Melody", "harmonies": [ { "onset": "0", @@ -6346,7 +6226,7 @@ ] }, { - "measure": 143, + "measure": 138, "section_label": "", "harmonies": [ { @@ -6364,7 +6244,7 @@ ] }, { - "measure": 144, + "measure": 139, "section_label": "", "harmonies": [ { @@ -6380,7 +6260,7 @@ ] }, { - "measure": 145, + "measure": 140, "section_label": "", "harmonies": [ { @@ -6398,7 +6278,7 @@ ] }, { - "measure": 146, + "measure": 141, "section_label": "", "harmonies": [ { @@ -6413,7 +6293,7 @@ ] }, { - "measure": 147, + "measure": 142, "section_label": "", "harmonies": [ { @@ -6431,7 +6311,7 @@ ] }, { - "measure": 148, + "measure": 143, "section_label": "", "harmonies": [ { @@ -6446,7 +6326,7 @@ ] }, { - "measure": 149, + "measure": 144, "section_label": "", "harmonies": [], "duration": "4", @@ -6459,7 +6339,7 @@ ] }, { - "measure": 150, + "measure": 145, "section_label": "", "harmonies": [ { @@ -6474,7 +6354,7 @@ ] }, { - "measure": 151, + "measure": 146, "section_label": "", "harmonies": [ { @@ -6492,7 +6372,7 @@ ] }, { - "measure": 152, + "measure": 147, "section_label": "", "harmonies": [ { @@ -6508,7 +6388,7 @@ ] }, { - "measure": 153, + "measure": 148, "section_label": "", "harmonies": [ { @@ -6526,7 +6406,7 @@ ] }, { - "measure": 154, + "measure": 149, "section_label": "", "harmonies": [ { @@ -6541,7 +6421,7 @@ ] }, { - "measure": 155, + "measure": 150, "section_label": "", "harmonies": [ { @@ -6559,7 +6439,7 @@ ] }, { - "measure": 156, + "measure": 151, "section_label": "", "harmonies": [ { @@ -6574,7 +6454,7 @@ ] }, { - "measure": 157, + "measure": 152, "section_label": "", "harmonies": [], "duration": "4", @@ -6587,7 +6467,7 @@ ] }, { - "measure": 158, + "measure": 153, "section_label": "", "harmonies": [ { @@ -6604,7 +6484,7 @@ ] }, { - "measure": 159, + "measure": 154, "section_label": "", "harmonies": [ { @@ -6622,7 +6502,7 @@ ] }, { - "measure": 160, + "measure": 155, "section_label": "", "harmonies": [ { @@ -6637,7 +6517,7 @@ ] }, { - "measure": 161, + "measure": 156, "section_label": "", "harmonies": [], "duration": "4", @@ -6650,7 +6530,7 @@ ] }, { - "measure": 162, + "measure": 157, "section_label": "", "harmonies": [ { @@ -6665,7 +6545,7 @@ ] }, { - "measure": 163, + "measure": 158, "section_label": "", "harmonies": [ { @@ -6683,7 +6563,7 @@ ] }, { - "measure": 164, + "measure": 159, "section_label": "", "harmonies": [ { @@ -6698,7 +6578,7 @@ ] }, { - "measure": 165, + "measure": 160, "section_label": "", "harmonies": [], "duration": "4", @@ -6711,7 +6591,7 @@ ] }, { - "measure": 166, + "measure": 161, "section_label": "", "harmonies": [ { @@ -6729,7 +6609,7 @@ ] }, { - "measure": 167, + "measure": 162, "section_label": "", "harmonies": [ { @@ -6745,7 +6625,7 @@ ] }, { - "measure": 168, + "measure": 163, "section_label": "", "harmonies": [ { @@ -6765,7 +6645,7 @@ ] }, { - "measure": 169, + "measure": 164, "section_label": "", "harmonies": [ { @@ -6785,7 +6665,7 @@ ] }, { - "measure": 170, + "measure": 165, "section_label": "", "harmonies": [ { @@ -6801,7 +6681,7 @@ ] }, { - "measure": 171, + "measure": 166, "section_label": "", "harmonies": [ { @@ -6818,7 +6698,7 @@ ] }, { - "measure": 172, + "measure": 167, "section_label": "", "harmonies": [ { @@ -6833,7 +6713,7 @@ ] }, { - "measure": 173, + "measure": 168, "section_label": "", "harmonies": [], "duration": "4", @@ -6843,7 +6723,7 @@ ] }, { - "measure": 174, + "measure": 169, "section_label": "Ending", "harmonies": [ { @@ -6861,7 +6741,7 @@ ] }, { - "measure": 175, + "measure": 170, "section_label": "", "harmonies": [ { @@ -6877,7 +6757,7 @@ ] }, { - "measure": 176, + "measure": 171, "section_label": "", "harmonies": [ { @@ -6897,7 +6777,7 @@ ] }, { - "measure": 177, + "measure": 172, "section_label": "", "harmonies": [ { @@ -6917,7 +6797,7 @@ ] }, { - "measure": 178, + "measure": 173, "section_label": "", "harmonies": [ { @@ -6933,7 +6813,7 @@ ] }, { - "measure": 179, + "measure": 174, "section_label": "", "harmonies": [ { @@ -6950,7 +6830,7 @@ ] }, { - "measure": 180, + "measure": 175, "section_label": "", "harmonies": [ { @@ -6965,7 +6845,7 @@ ] }, { - "measure": 181, + "measure": 176, "section_label": "", "harmonies": [], "duration": "4", diff --git a/data/songs/autumn-leaves.xml b/data/songs/autumn-leaves.xml index 1a0f7d7..9f1a483 100644 --- a/data/songs/autumn-leaves.xml +++ b/data/songs/autumn-leaves.xml @@ -15,7 +15,7 @@ - + 4 diff --git a/generator/arrange/generate.py b/generator/arrange/generate.py index 6a8d0f9..756c2c4 100644 --- a/generator/arrange/generate.py +++ b/generator/arrange/generate.py @@ -7,6 +7,7 @@ import pathlib import generator.accompaniment import generator.acoustic import generator.arrange.form +import generator.arrange.pickup import generator.electric import generator.guitar import generator.melody @@ -23,21 +24,25 @@ def arrange_document(document: dict, part_type: str, *, rhythms: generator.rhyth plans = plan_arrangement(document, rhythms) if part_type != 'vocal' else {} return _arrange_document(document, part_type, plans) -def section_source(source: list[dict], final: bool) -> list[dict]: +def section_source(source: list[dict], section, next_section=None) -> list[dict]: result = copy.deepcopy(source) for measure in result: - measure['harmonies'] = [h for h in measure['harmonies'] if not final or not h.get('chord_optional')] + measure['harmonies'] = [h for h in measure['harmonies'] if section.section_index != FINAL_SECTION_INDEX or not h.get('chord_optional')] for chord in measure['harmonies']: chord.pop('chord_optional', None) + if generator.arrange.pickup.enters(next_section, source): + destination = result[section.source_measure_index + section.measure_count - 1] + generator.arrange.pickup.harmonies(destination, result[0]) return result def plan_arrangement(document: dict, rhythms: generator.rhythm.Library) -> dict[int, generator.accompaniment.Plan]: source = generator.score.source_staff(document)['measures'] result = {} - for section in generator.arrange.form.full_arrangement_sections(source, 'acoustic'): + sections = generator.arrange.form.full_arrangement_sections(source, 'acoustic') + for index, section in enumerate(sections): if section.role == 'slash': continue - measures = section_source(source, section.section_index == FINAL_SECTION_INDEX) + measures = section_source(source, section, sections[index + 1] if index + 1 < len(sections) else None) previous = generator.accompaniment.carried_chords(measures) start = section.source_measure_index result[section.section_index] = generator.accompaniment.plan_section(measures[start:start + section.measure_count], rhythms, initial=previous[start], electric=section.section_index in (1, 5, 6)) @@ -56,8 +61,8 @@ def _arrange_document(document: dict, part_type: str, plans: dict[int, generator for m in source: source_starts.append(source_time) source_time += generator.model.fraction(m['duration']) - for section in sections: - section_measures = section_source(source, section.section_index == FINAL_SECTION_INDEX) + for index, section in enumerate(sections): + section_measures = section_source(source, section, sections[index + 1] if index + 1 < len(sections) else None) previous = generator.accompaniment.carried_chords(section_measures) segment = [] for si in range(section.source_measure_index, section.source_measure_index + section.measure_count): @@ -70,7 +75,6 @@ def _arrange_document(document: dict, part_type: str, plans: dict[int, generator segment.append(result) if part_type == 'electric' and section.role in ('melody', 'accompaniment'): voicing_origins.append(generator.electric.MeasureOrigin(source_starts[si], section.role, result)) - identity_segment = segment segment_length = sum((generator.model.fraction(m['duration']) for m in segment), fractions.Fraction()) if section.role in ('vocal', 'melody'): start = source_starts[section.source_measure_index] @@ -78,42 +82,25 @@ def _arrange_document(document: dict, part_type: str, plans: dict[int, generator low, high = max(start, generator.model.fraction(shift['start'])), min(start + segment_length, generator.model.fraction(shift['end'])) if low < high: octave_shifts.append({**shift, 'id': f'section-{section.section_index}-{shift["id"]}', 'start': generator.model.rational(absolute + low - start), 'end': generator.model.rational(absolute + high - start)}) - if part_type == 'vocal' and section.section_index in (1, 5) and section.source_measure_index == 1 and source[0].get('implicit') and output: - pickup = generator.parts.build_measure(source[0], source[0]['id'], 'vocal', part_type, None) + pickup = None + if section.role in ('vocal', 'melody') and generator.arrange.pickup.enters(section, source) and output: + pickup = generator.parts.build_measure(source[0], f'pickup-{section.section_index}', section.role, part_type, None) + tuplets.extend(generator.score.reidentify(([pickup] if pickup else []) + segment, staff.get('tuplets', []))) + if pickup: destination = output[-1] - pad = generator.model.fraction(destination['duration']) - generator.model.fraction(pickup['duration']) - if pad < 0: - raise ValueError('pickup is longer than the preceding arrangement measure') - voices = generator.score.copy_source_voices(pickup, strip_lyrics=False) - for voice in voices: - for n in voice['notes']: - n['onset'] = generator.model.rational(generator.model.fraction(n['onset']) + pad) - if pad: - voice['notes'].insert(0, generator.model.make_event(f'pickup-rest-{voice["id"]}', fractions.Fraction(), pad, 'rest') | {'voice': voice['id']}) - destination['voices'] = voices - identity_segment = [destination, *segment] - if pickup['harmonies']: - destination['harmonies'] = [h for h in destination['harmonies'] if generator.model.fraction(h['onset']) < pad] - for h in pickup['harmonies']: - h['onset'] = generator.model.rational(generator.model.fraction(h['onset']) + pad) - destination['harmonies'].append(h) - state = {k: copy.deepcopy(pickup[k]) for k in ('key', 'clef', 'meter', 'transpose')} - if pad: - destination['attributes'].append({'onset': generator.model.rational(pad), **state}) - else: - destination.update(state) - destination['key_signature'] = generator.model.key_label(state['key']) - destination['time_signature'] = generator.model.meter_label(state['meter']) - for change in pickup.get('attributes', []): - destination['attributes'].append({**change, 'onset': generator.model.rational(generator.model.fraction(change['onset']) + pad)}) + pad = generator.arrange.pickup.offset(destination, pickup) + onset = generator.arrange.pickup.splice(destination, pickup) + if part_type == 'electric': + voicing_origins = [generator.electric.MeasureOrigin(o.onset, o.role, o.measure, o.start, onset if o.measure is destination else o.end) for o in voicing_origins] + voicing_origins.append(generator.electric.MeasureOrigin(-pad, 'melody', destination, onset)) for shift in staff.get('octave_shifts', []): - low, high = generator.model.fraction(shift['start']), min(generator.model.fraction(pickup['duration']), generator.model.fraction(shift['end'])) + low, high = max(onset - pad, generator.model.fraction(shift['start'])), min(generator.model.fraction(pickup['duration']), generator.model.fraction(shift['end'])) if low < high: offset = absolute - generator.model.fraction(pickup['duration']) octave_shifts.append({**shift, 'id': f'pickup-{section.section_index}-{shift["id"]}', 'start': generator.model.rational(offset + low), 'end': generator.model.rational(offset + high)}) - tuplets.extend(generator.score.reidentify(identity_segment, staff.get('tuplets', []))) output.extend(segment) absolute += segment_length + tuplets = generator.arrange.pickup.retain_links(output, tuplets) result = generator.score.make_arranged_document(document, staff, staff_id='staff-arranged-' + part_type, staff_name=part_type.capitalize(), role='vocal' if part_type == 'vocal' else 'guitar', arrangement_part_type=part_type, measures=output, tuplets=tuplets, octave_shifts=octave_shifts) result['metadata'].setdefault('tempo', 124) if part_type != 'vocal': diff --git a/generator/arrange/pickup.py b/generator/arrange/pickup.py new file mode 100644 index 0000000..3d95598 --- /dev/null +++ b/generator/arrange/pickup.py @@ -0,0 +1,103 @@ +from __future__ import annotations + +import copy +import fractions + +import generator.accompaniment +import generator.model +import generator.score + +def enters(section, source: list[dict]) -> bool: + return section is not None and section.section_index in (1, 2, 5) and section.source_measure_index == 1 and generator.score.leading_pickup_measure_index(source) == 0 + +def offset(destination: dict, pickup: dict) -> fractions.Fraction: + pad = generator.model.fraction(destination['duration']) - generator.model.fraction(pickup['duration']) + if pad < 0: + raise ValueError(f'measure {destination["number"]}: pickup is longer than the preceding arrangement measure') + return pad + +def harmonies(destination: dict, pickup: dict) -> None: + pad = offset(destination, pickup) + if pickup['harmonies']: + first = pad + generator.model.fraction(pickup['harmonies'][0]['onset']) + destination['harmonies'] = [h for h in destination['harmonies'] if generator.model.fraction(h['onset']) < first] + destination['harmonies'].extend({**copy.deepcopy(h), 'onset': generator.model.rational(pad + generator.model.fraction(h['onset']))} for h in pickup['harmonies']) + +def truncate(note: dict, end: fractions.Fraction) -> None: + duration = end - generator.model.fraction(note['onset']) + if generator.model.fraction(note['duration']) <= duration: + return + note.update(duration=generator.model.rational(duration), written=generator.model.written_for(duration)) + for field in ('measure_rest', 'beams'): + note.pop(field, None) + for pitch in note['pitches']: + if generator.model.fraction(pitch['duration']) > duration: + pitch.update(duration=note['duration'], written=copy.deepcopy(note['written'])) + pitch.pop('tie_to', None) + +def splice(destination: dict, pickup: dict) -> fractions.Fraction: + """Keep outgoing music until the pickup's first sounding event, then hand over.""" + pad = offset(destination, pickup) + sounding = [generator.model.fraction(n['onset']) for n in generator.score.measure_notes(pickup) if n['pitches']] + if not sounding: + return generator.model.fraction(destination['duration']) + start = pad + min(sounding) + voices = {v['id']: {'id': v['id'], 'notes': []} for v in pickup['voices']} + primary = pickup['voices'][0]['id'] + for voice in destination['voices']: + identifier = primary if len(destination['voices']) == 1 and voice['id'] not in voices else voice['id'] + notes = voices.setdefault(identifier, {'id': identifier, 'notes': []})['notes'] + for note in voice['notes']: + if generator.model.fraction(note['onset']) < start: + truncate(note, start) + note['voice'] = identifier + notes.append(note) + for voice in pickup['voices']: + notes = voices[voice['id']]['notes'] + for note in voice['notes']: + onset = pad + generator.model.fraction(note['onset']) + end = onset + generator.model.fraction(note['duration']) + if onset < start: + if end <= start: + continue + note.update(duration=generator.model.rational(end - start), written=generator.model.written_for(end - start)) + note.pop('measure_rest', None) + onset = start + note['onset'] = generator.model.rational(onset) + notes.append(note) + generator.accompaniment.normalize_beams(notes) + destination['voices'] = [voice for voice in voices.values() if voice['notes']] + state = {k: copy.deepcopy(pickup[k]) for k in ('key', 'clef', 'meter', 'transpose', 'staff_details')} + for change in pickup.get('attributes', []): + if pad + generator.model.fraction(change['onset']) <= start: + state.update({k: copy.deepcopy(v) for k, v in change.items() if k != 'onset'}) + destination['attributes'] = [a for a in destination.get('attributes', []) if generator.model.fraction(a['onset']) < start] + previous = dict(destination) + for change in destination['attributes']: + previous.update(change) + state = {k: v for k, v in state.items() if previous.get(k) != v} + if start and state: + destination['attributes'].append({'onset': generator.model.rational(start), **state}) + elif not start: + destination.update(state) + destination['key_signature'] = generator.model.key_label(destination['key']) + destination['time_signature'] = generator.model.meter_label(destination['meter']) + destination['attributes'].extend({**copy.deepcopy(a), 'onset': generator.model.rational(pad + generator.model.fraction(a['onset']))} for a in pickup.get('attributes', []) if pad + generator.model.fraction(a['onset']) > start) + return start + +def retain_links(measures: list[dict], tuplets: list[dict]) -> list[dict]: + notes = [n for m in measures for n in generator.score.measure_notes(m)] + tones = {p['id']: p for n in notes for p in n['pitches']} + for pitch in tones.values(): + for field, reverse in (('tie_to', 'tie_from'), ('tie_from', 'tie_to')): + if field in pitch and tones.get(pitch[field], {}).get(reverse) != pitch['id']: + pitch.pop(field) + members = {} + for note in notes: + for identifier in note.get('tuplet_ids', []): + members.setdefault(identifier, []).append(note['id']) + result = [] + for span in tuplets: + if events := members.get(span['id']): + result.append({**span, 'start': events[0], 'end': events[-1], 'continued_start': span.get('continued_start', False) or span['start'] != events[0], 'continued_end': span.get('continued_end', False) or span['end'] != events[-1]}) + return result diff --git a/generator/electric.py b/generator/electric.py index 77fc282..90a499e 100644 --- a/generator/electric.py +++ b/generator/electric.py @@ -14,6 +14,8 @@ class MeasureOrigin: onset: fractions.Fraction role: str measure: dict + start: fractions.Fraction = fractions.Fraction() + end: fractions.Fraction | None = None @dataclasses.dataclass(frozen=True) class VoicingLink: @@ -33,9 +35,10 @@ def link_voicings(source: list[dict], origins: list[MeasureOrigin]) -> list[Voic for origin in origins: for voice in origin.measure['voices']: for note in voice['notes']: - if '_harmony' not in note: + local = generator.model.fraction(note['onset']) + if '_harmony' not in note or local < origin.start or (origin.end is not None and local >= origin.end): continue - onset = origin.onset + generator.model.fraction(note['onset']) + onset = origin.onset + local span = bisect.bisect_right(boundaries, onset) if origin.role == 'melody' and note.get('_harmonize'): melody.setdefault(span, []).append((onset, note['_harmony'], note)) diff --git a/generator/engraving/attributes.py b/generator/engraving/attributes.py index 29af69a..ede2113 100644 --- a/generator/engraving/attributes.py +++ b/generator/engraving/attributes.py @@ -101,22 +101,3 @@ def barline(style: str, x: float, top: float, source: str) -> list[generator.eng return [generator.engraving.types.line('barline', references, ((x, top - 4 if style == 'tick' else top * 0.75), (x, top + 5 if style == 'tick' else top * 0.25)))] weights = {'regular': [1.4], 'heavy': [4], 'light-light': [1.4, 1.4], 'light-heavy': [1.4, 4], 'heavy-light': [4, 1.4], 'heavy-heavy': [4, 4]}[style] return [generator.engraving.types.line('barline', references, ((x - (len(weights) - 1 - i) * 5, top), (x - (len(weights) - 1 - i) * 5, 0)), width) for i, width in enumerate(weights)] - -def tempo(value: dict, fonts: generator.engraving.fonts.Fonts, x: float, y: float, space: float, source: str) -> list[generator.engraving.types.Primitive]: - written = value['written'] - references = (source,) - glyph = fonts.glyph(generator.engraving.notation.head_glyph(written, None), x, y, space * 0.7, 'tempo', references) - items = [glyph] - stem_x = glyph.box.right - 0.5 - if written['type'] not in ('whole', 'breve', 'long', 'maxima'): - items.append(generator.engraving.types.line('tempo', references, ((stem_x, y), (stem_x, y - 23)), 1)) - if generator.engraving.notation.flags(written): - name = 'flag' + ('8th' if written['type'] == 'eighth' else written['type']) + 'Up' - items.append(fonts.glyph(name, stem_x, y - 23, space * 0.7, 'tempo', references)) - cursor = max(p.box.right for p in items) + 3 - for _ in range(written.get('dots', 0)): - dot = fonts.glyph('augmentationDot', cursor, y - 3, space * 0.7, 'tempo', references) - items.append(dot) - cursor = dot.box.right + 3 - items.append(fonts.text(' = ' + str(generator.model.fraction(value['bpm'])), cursor, y + 3, 16, 'tempo', references)) - return items diff --git a/generator/engraving/audit.py b/generator/engraving/audit.py index e3baa2e..942ce7e 100644 --- a/generator/engraving/audit.py +++ b/generator/engraving/audit.py @@ -23,16 +23,23 @@ def audit_layout(document: dict, layout: generator.engraving.types.LayoutDocumen index = generator.engraving.notation.ScoreIndex(document) fragments, primitives = {}, {} previous_end = fractions.Fraction() + scale = layout.pages[0].systems[0].scale for page in layout.pages: if len(page.systems) != 2 and (page is not layout.pages[-1] or len(page.systems) != 1): raise generator.engraving.types.EngravingError('pages must contain two music systems, except an odd final system') if len(page.systems) == 2 and page.systems[0].box.bottom + layout.style.system_gap > page.systems[1].box.top + 0.01: raise generator.engraving.types.EngravingError('music systems overlap their page rows') audit_primitives(page.primitives, page.width, page.height, fonts) + header = generator.engraving.types.bounds([p for p in page.primitives if p.role in ('title', 'subtitle')]) + footer = generator.engraving.types.bounds([p for p in page.primitives if p.role == 'page-number']) + if page.systems[0].box.top < header.bottom + layout.style.page_clearance - 0.01 or page.systems[-1].box.bottom > footer.top - layout.style.page_clearance + 0.01: + raise generator.engraving.types.EngravingError('music overlaps the page header or footer') for item in page.primitives: for source in item.sources: primitives.setdefault(source, []).append(item) for system in page.systems: + if system.scale != scale: + raise generator.engraving.types.EngravingError('notation size must remain consistent throughout a part') for role in ('staff', 'tab-staff'): lines = [p for p in system.primitives if p.role == role] if lines: @@ -123,9 +130,6 @@ def audit_layout(document: dict, layout: generator.engraving.types.LayoutDocumen label = generator.harmony.symbol(value) if not any(p.role == 'harmony' and p.value == label for p in primitives.get(value['id'], [])): raise generator.engraving.types.EngravingError(f'{value["id"]}: harmony was omitted') - for i, _ in enumerate(measure.get('tempos', [])): - if not any(p.role == 'tempo' for p in primitives.get(measure['id'] + f':tempo:{i}', [])): - raise generator.engraving.types.EngravingError(f'{measure["id"]}: tempo was omitted') for span in index.staff.get('tuplets', []): if span.get('show_number', 'actual') != 'none' or span.get('bracket', 'auto') != 'no': if not any(p.role.startswith('tuplet-') for p in primitives.get(span['id'], [])): diff --git a/generator/engraving/layout.py b/generator/engraving/layout.py index 8d3e4a4..9cd6613 100644 --- a/generator/engraving/layout.py +++ b/generator/engraving/layout.py @@ -54,9 +54,6 @@ def column(index: generator.engraving.notation.ScoreIndex, time: fractions.Fract for owner, _, item in index.harmonies_by_onset.get(time, []): if owner is measure: items.append(fonts.text(generator.harmony.symbol(item), 0, 0, 18 if index.staff.get('tablature') else 21, 'harmony', (item['id'],))) - for owner, i, value in index.tempos_by_onset.get(time, []): - if owner is measure: - items.extend(generator.engraving.attributes.tempo(value, fonts, 0, 0, style.space, measure['id'] + f':tempo:{i}')) if time == measure_start: items.append(fonts.text(str(measure['number']), 0, -style.space * (index.state(time)['staff_details']['lines'] + 0.5), 12, 'measure-number', (measure['id'],))) if label := measure.get('section_label'): @@ -159,54 +156,84 @@ def make_system(index: generator.engraving.notation.ScoreIndex, start: fractions items = generator.engraving.tablature.staff(index, items + tab_items, start, end, content_left, width - 1, fonts, style) return generator.engraving.types.System(start, end, tuple(items), tuple(anchors), tuple(fragments), generator.engraving.types.bounds(items)) -def fit_page_systems(systems, index, row_height, fonts, style): - scale = min(1, row_height / max(s.box.bottom - s.box.top for s in systems)) +def fit_part_systems(systems, index, available_height, fonts, style): + + def fitting_scale(items): + scale = 1 + for first in range(0, len(items), 2): + pair = items[first:first + 2] + height = sum(s.box.bottom - s.box.top for s in pair) + scale = min(scale, (available_height - style.system_gap * (len(pair) - 1)) / height) + return scale + + scale = fitting_scale(systems) columns = collections.OrderedDict() - # Re-space columns at the final physical width; scale glyphs uniformly, not horizontally. + # Fit the entire part together; only spacing, never page-specific glyph sizes, varies. for _ in range(8): width = (style.width - 2 * style.margin_x - 2) / scale fitted = [make_system(index, s.start, s.end, fonts, style, justify=s.end < index.end, columns=columns, staff_width=width) for s in systems] - height = max(s.box.bottom - s.box.top for s in fitted) - if height * scale <= row_height + 0.001: + next_scale = fitting_scale(fitted) + if scale <= next_scale + 0.000001: return [s.scaled(scale) for s in fitted] - scale = row_height / height - raise generator.engraving.types.EngravingError(f'at musical offset {systems[0].start}: page spacing did not converge') + scale = next_scale + raise generator.engraving.types.EngravingError('part spacing did not converge') + +def part_header(document, fonts, style): + size = 16 + title = document['metadata']['title'] + item = fonts.text(title, style.margin_x, style.margin_y + size, size, 'title', ()) + while item.box.right > style.width - style.margin_x and size > 12: + size -= 1 + item = fonts.text(title, style.margin_x, style.margin_y + size, size, 'title', ()) + if item.box.right > style.width - style.margin_x: + raise generator.engraving.types.EngravingError('score title cannot fit the page without clipping') + result = [item] + subtitle = ' - '.join(str(value) for value in (document['metadata'].get('composer'), document['staves'][0].get('name')) if value) + if not subtitle: + return result + credit = fonts.text(subtitle, 0, style.margin_y + size, 12, 'subtitle', ()) + width = credit.box.right - credit.box.left + if item.box.right + 20 + width <= style.width - style.margin_x: + result.append(credit.moved(style.width - style.margin_x - credit.box.right, 0)) + return result + line = '' + baseline = item.box.bottom + 15 + for word in subtitle.split(): + text = ' '.join(filter(None, (line, word))) + candidate = fonts.text(text, style.margin_x, baseline, 12, 'subtitle', ()) + if candidate.box.right > style.width - style.margin_x and line: + result.append(fonts.text(line, style.margin_x, baseline, 12, 'subtitle', ())) + baseline = result[-1].box.bottom + 15 + text = word + candidate = fonts.text(text, style.margin_x, baseline, 12, 'subtitle', ()) + if candidate.box.right > style.width - style.margin_x: + raise generator.engraving.types.EngravingError('score credits cannot fit the page without clipping') + line = text + result.append(fonts.text(line, style.margin_x, baseline, 12, 'subtitle', ())) + return result def paginate(systems: list[generator.engraving.types.System], document: dict, fonts: generator.engraving.fonts.Fonts, style: generator.engraving.types.Style, *, index=None) -> tuple[generator.engraving.types.Page, ...]: pages = [] index = index or generator.engraving.notation.ScoreIndex(document) - guitar = document['staves'][0].get('tablature', False) - header_gap = 14 if guitar else 24 - - def page_header(number): - title = document['metadata']['title'] - size = (20 if number == 1 else 16) if guitar else (26 if number == 1 else 17) - item = fonts.text(title, style.margin_x, style.margin_y + size, size, 'title', ()) - while item.box.right > style.width - style.margin_x and size > 12: - size -= 1 - item = fonts.text(title, style.margin_x, style.margin_y + size, size, 'title', ()) - if item.box.right > style.width - style.margin_x: - raise generator.engraving.types.EngravingError('score title cannot fit the page without clipping') - result = [item] - if number == 1: - subtitle = ' - '.join(str(value) for value in (document['metadata'].get('composer'), document['staves'][0].get('name')) if value) - if subtitle: - result.append(fonts.text(subtitle, style.margin_x, item.box.bottom + (15 if guitar else 22), 12 if guitar else 16, 'subtitle', ())) - return result - + header = part_header(document, fonts, style) + top = generator.engraving.types.bounds(header).bottom + style.page_clearance + footers = [fonts.text(str(number), style.width / 2, style.height - style.margin_y, 12, 'page-number', (), True) for number in range(1, (len(systems) + 1) // 2 + 1)] + bottom = min(p.box.top for p in footers) - style.page_clearance + if bottom - top <= style.system_gap: + raise generator.engraving.types.EngravingError('page header leaves no room for two music systems') + fitted = fit_part_systems(systems, index, bottom - top, fonts, style) for first in range(0, len(systems), 2): number = len(pages) + 1 - header = page_header(number) - top = generator.engraving.types.bounds(header).bottom + header_gap - row_height = (style.height - style.margin_y - 24 - top - style.system_gap) / 2 - if row_height <= 0: - raise generator.engraving.types.EngravingError('page header leaves no room for two music systems') - pair = fit_page_systems(systems[first:first + 2], index, row_height, fonts, style) + pair = fitted[first:first + 2] + slack = max(0, bottom - top - sum(s.box.bottom - s.box.top for s in pair) - style.system_gap * (len(pair) - 1)) + spacing = slack / 3 if len(pair) == 2 else 0 + cursor = top + spacing placed = [] - for row, system in enumerate(pair): - dx, dy = style.margin_x + 1, top + row * (row_height + style.system_gap) - system.box.top + for system in pair: + dx, dy = style.margin_x + 1, cursor - system.box.top placed.append(dataclasses.replace(system, primitives=tuple(p.moved(dx, dy) for p in system.primitives), anchors=tuple(a.moved(dx, dy) for a in system.anchors), box=system.box.moved(dx, dy))) - footer = fonts.text(str(number), style.width / 2, style.height - style.margin_y, 12, 'page-number', (), True) + cursor = placed[-1].box.bottom + style.system_gap + spacing + footer = footers[first // 2] pages.append(generator.engraving.types.Page(number, style.width, style.height, style.supersampling, tuple(placed), tuple(header + [p for s in placed for p in s.primitives] + [footer]))) return tuple(pages) diff --git a/generator/engraving/notation.py b/generator/engraving/notation.py index 5633912..90c9fe8 100644 --- a/generator/engraving/notation.py +++ b/generator/engraving/notation.py @@ -29,7 +29,6 @@ class ScoreIndex: self.events_by_onset = {} self.attributes_by_onset = {} self.harmonies_by_onset = {} - self.tempos_by_onset = {} self.by_id = {} self.tones = {} self.boundaries = {fractions.Fraction()} @@ -51,8 +50,7 @@ class ScoreIndex: self.columns.add(onset) for tone in note['pitches']: self.tones[tone['id']] = (event, tone) - for field in ('attributes', 'harmonies', 'tempos'): - bucket = {'attributes': self.attributes_by_onset, 'harmonies': self.harmonies_by_onset, 'tempos': self.tempos_by_onset}[field] + for field, bucket in (('attributes', self.attributes_by_onset), ('harmonies', self.harmonies_by_onset)): for index, item in enumerate(measure.get(field, [])): onset = time + generator.model.fraction(item['onset']) self.columns.add(onset) diff --git a/generator/engraving/spans.py b/generator/engraving/spans.py index b7416dc..e404698 100644 --- a/generator/engraving/spans.py +++ b/generator/engraving/spans.py @@ -203,11 +203,11 @@ def draw_spans(index: generator.engraving.notation.ScoreIndex, anchors: list[gen return items + result def place_text_lanes(items: list[generator.engraving.types.Primitive], fonts: generator.engraving.fonts.Fonts, style: generator.engraving.types.Style) -> list[generator.engraving.types.Primitive]: - music = [p for p in items if p.role not in ('harmony', 'lyric', 'section', 'tempo')] + music = [p for p in items if p.role not in ('harmony', 'lyric', 'section')] box = generator.engraving.types.bounds(music) result = list(music) top = box.top - 12 - for role in ('harmony', 'tempo', 'section'): + for role in ('harmony', 'section'): lane = [p for p in items if p.role == role] if lane: extent = generator.engraving.types.bounds(lane) diff --git a/generator/engraving/types.py b/generator/engraving/types.py index 9978040..98feea1 100644 --- a/generator/engraving/types.py +++ b/generator/engraving/types.py @@ -14,6 +14,7 @@ class Style: space: float = 12 margin_x: float = 28 margin_y: float = 18 + page_clearance: float = 14 supersampling: int = 4 column_gap: float = 10 system_gap: float = 26 diff --git a/tests/fixtures/engraving-python.png b/tests/fixtures/engraving-python.png index a3213dde3f23071c6bb8b6d40bc140544a91fb4d..b25e8847e42799f55fe658ce7927928667996a39 100644 GIT binary patch literal 24930 zcmce;cTiN__BM!F5k*A>L_tL)2N6WF34tcsB#~qwyeLU>5=>wgfo_nNV4y(+K>?c_ z6qP6_jUqHjNs>-deS<#4D~hFv2SB%V`E#V zt#ypd#ury& z?*6c1`DP8fFDs5M`C#qVxKirE6N&F4QE%SnN3Ae3KK7PfL};f5ea+PkeR_x12ra2M zh>2+zXp|mTO)xyB61g;^S3vD_ZEVb}?z`cDbdOJ$E-;+M@y%?*pQ{6i-%FeBmafC^ zxi|lR{;i_3?TIr>>Wv0dZc^VY%88|RL2WHA#IoBoge9jpbWkcTwdOm+nU+K*G38hc z$!hn`&E@US@lPI))wkU7d15HCncX}}=xsx0+OJ>#CDirS_vwpVrT_YUbPG4Prlw{> z)2L7iU+9VcS3g*GoiXdIcNe4&&=16~P*A~#P)~G;w?x^kxc2s9=SO*$mV>IQMgD*L zMMXtZQc_G(O)t&=ZKRU%B|n8#o3wU6WOSDps7>3B_k3b9nbJjn>c6I%U7$?_47AXa z6djcVuV)rLe=f3Nb;X%Fr{A=szI=YQ7ptvTv9VpwdZ z506I*u5Foi)e}Q3o50Zz!86PRsp6@hOwl(=8ly&QM~X$h-a11|GWNUn_OX%8;wN$6 z+v8QN*~t-CTF>{_=cG&K#^^fHZN8oNLPA2wx7C_T-{ssK92_hd&cD!_??n=|YP@sj zj@^yZGE={vg_&kp7oB=@KFj`7y;srW#~o8)fwu>C23J&7^)r*}a2dAW-M98C#SSv# zW~#6_#_Y*l)A}Ea?z5Ts=XzN+dd**1#eeek*$=n3h!@XKu!MA?0w-I2b|`y$_7~K1 zSoPnokdMgG3G_Vj%8^$8cz1x3>d&#L-~1O@jCEz7<(z9C?sH}_sDi)prIcfP{K{

BCByQ2P7X<~9q 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 Bbans$ literal 25749 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℘}#F^asuDrRrV<#*tc&VF|v@N12uyt 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 diff --git a/tests/fixtures/notation-python.png b/tests/fixtures/notation-python.png index 7b2ac1da28e585d5915fd82b777504a2defff343..6ef164245381ba5de2476b6a5de65e542ae5206a 100644 GIT binary patch literal 53662 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 literal 56104 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 VmHi$F`oc42!$BQGxcS', '' + body + '')) + +class ArrangementPickupTests(unittest.TestCase): + def test_catalog_body_lengths_and_part_timelines(self): + for path in sorted(pathlib.Path('data/songs').glob('*.xml')): + document = generator.musicxml.load_musicxml(path) + before = copy.deepcopy(document) + prepared = generator.parts.prepare_document(document) + plans = generator.arrange.generate.plan_arrangement(prepared, tests.rhythm_fixtures.library()) + timelines = [] + for part in generator.parts.PART_TYPES: + with self.subTest(song=path.stem, part=part): + result = generator.arrange.generate._arrange_document(prepared, part, plans) + generator.model.validate_document(result) + measures = result['staves'][0]['measures'] + self.assertEqual(len(measures), 176) + self.assertEqual(sum(generator.model.fraction(m['duration']) for m in measures), 704) + timelines.append([m['duration'] for m in measures]) + if path.stem == 'autumn-leaves' and part in ('vocal', 'electric'): + for boundary in ([8, 136] if part == 'vocal' else [40]): + notes = [n for n in generator.score.measure_notes(measures[boundary - 1]) if generator.model.fraction(n['onset']) >= 1 and n['pitches']] + self.assertEqual([generator.model.fraction(n['onset']) for n in notes], [1, 2, 3]) + self.assertEqual([n['pitches'][-1]['letter'] for n in notes], ['d', 'e', 'f']) + self.assertTrue(all(n['pitches'][-1]['octave'] == (5 if part == 'electric' else 4) for n in notes)) + self.assertFalse(measures[boundary - 1]['attributes']) + self.assertTrue(all(timeline == timelines[0] for timeline in timelines)) + self.assertEqual(document, before) + def test_unmarked_leading_rests_are_not_pickups(self): + opening = '1quarter' + tests.test_musicxml.xml_note(duration=3, kind='half', extra='') + document = source(opening, implicit=False) + result = generator.arrange.generate.arrange_document(document, 'vocal', rhythms=tests.rhythm_fixtures.library()) + self.assertEqual(len(result['staves'][0]['measures']), 14) + self.assertEqual(generator.score.body_start_measure_index(document['staves'][0]['measures']), 0) + def test_short_pickup_ties_and_octave_spans_survive_each_melody_entry(self): + document = source(tests.test_musicxml.xml_note(duration=1, kind='quarter', extra=''), tests.test_musicxml.xml_note(extra='')) + document['staves'][0]['octave_shifts'] = [{'id': 'pickup-shift', 'start': generator.model.rational(0), 'end': generator.model.rational(1), 'octaves': -1}] + for part, boundaries in (('vocal', (1, 5)), ('electric', (2,))): + with self.subTest(part=part): + result = generator.arrange.generate.arrange_document(document, part, rhythms=tests.rhythm_fixtures.library()) + generator.model.validate_document(result) + measures = result['staves'][0]['measures'] + self.assertEqual(len(measures), 7) + for boundary in boundaries: + pickup = generator.score.measure_notes(measures[boundary - 1])[-1] + downbeat = generator.score.measure_notes(measures[boundary])[0] + self.assertEqual(generator.model.fraction(pickup['onset']), 3) + self.assertEqual(pickup['pitches'][0]['tie_to'], downbeat['pitches'][0]['id']) + self.assertEqual(downbeat['pitches'][0]['tie_from'], pickup['pitches'][0]['id']) + self.assertTrue(any(generator.model.fraction(s['start']) == boundary * 4 - 1 and generator.model.fraction(s['end']) == boundary * 4 for s in result['staves'][0]['octave_shifts'])) + self.assertTrue(generator.playback.compile_timeline(result)['events']) + def test_pickup_truncates_outgoing_music_without_discarding_earlier_notes(self): + opening = '1quarter' + tests.test_musicxml.xml_note('D', 3, 'half', extra='doo') + document = source(opening) + pickup, destination = copy.deepcopy(document['staves'][0]['measures']) + before = copy.deepcopy(destination['voices'][0]['notes'][0]) + start = generator.arrange.pickup.splice(destination, pickup) + self.assertEqual(start, 1) + notes = generator.score.measure_notes(destination) + self.assertEqual(len(notes), 2) + self.assertEqual(notes[0]['id'], before['id']) + self.assertEqual(notes[0]['pitches'][0]['id'], before['pitches'][0]['id']) + self.assertEqual(generator.model.fraction(notes[0]['duration']), 1) + self.assertEqual(notes[0]['written']['type'], 'quarter') + self.assertEqual(notes[1]['lyrics'][0]['syllables'][0]['text'], 'doo') + self.assertEqual([generator.model.fraction(n['onset']) for n in notes], [0, 1]) + document['staves'][0]['measures'] = [destination] + generator.model.validate_document(document) + def test_pickup_harmonies_are_planned_for_every_part_at_the_same_offset(self): + document = source(tests.test_parts.xml_harmony('F') + tests.test_musicxml.xml_note('F', 1, 'quarter')) + prepared = generator.parts.prepare_document(document) + plans = generator.arrange.generate.plan_arrangement(prepared, tests.rhythm_fixtures.library()) + for part in generator.parts.PART_TYPES: + result = generator.arrange.generate._arrange_document(prepared, part, plans) + generator.model.validate_document(result) + for index in (0, 1, 4): + chords = result['staves'][0]['measures'][index]['harmonies'] + self.assertEqual([(generator.model.fraction(h['onset']), h['root']['letter']) for h in chords], [(0, 'c'), (3, 'f')]) + self.assertIn(fractions.Fraction(3), [event.onset for event in plans[0].acoustic_upper[0].events]) + def test_pickup_tuplets_keep_unique_identities_across_iterations(self): + notes = '' + for index, pitch in enumerate(('C', 'D', 'E')): + tuplet = '' if index == 0 else '' if index == 2 else '' + notes += tests.test_musicxml.xml_note(pitch, 1, 'eighth', extra='32eighth' + tuplet) + document = source(notes, divisions=3) + for part in ('vocal', 'electric'): + result = generator.arrange.generate.arrange_document(document, part, rhythms=tests.rhythm_fixtures.library()) + generator.model.validate_document(result) + spans = result['staves'][0]['tuplets'] + self.assertEqual(len(spans), 2 if part == 'vocal' else 1) + self.assertEqual(len({s['id'] for s in spans}), len(spans)) + for span in spans: + members = [n for m in result['staves'][0]['measures'] for n in generator.score.measure_notes(m) if span['id'] in n.get('tuplet_ids', [])] + self.assertEqual(len(members), 3) + self.assertEqual([generator.model.fraction(n['onset']) for n in members], [3, fractions.Fraction(10, 3), fractions.Fraction(11, 3)]) + def test_overlong_pickup_is_rejected_with_measure_context(self): + document = source(tests.test_musicxml.xml_note(duration=4), '' + tests.test_musicxml.xml_note(duration=3, kind='half', extra='')) + with self.assertRaisesRegex(ValueError, 'measure 2: pickup is longer'): + generator.arrange.generate.arrange_document(document, 'vocal', rhythms=tests.rhythm_fixtures.library()) diff --git a/tests/test_electric_voicing.py b/tests/test_electric_voicing.py index 97e835d..37f3a0b 100644 --- a/tests/test_electric_voicing.py +++ b/tests/test_electric_voicing.py @@ -33,6 +33,18 @@ def shape(event): return tuple(sorted((p['tablature']['string'], p['tablature']['fret']) for p in event['pitches'])) class ElectricVoicingTests(unittest.TestCase): + def test_mixed_pickup_bar_links_each_role_to_its_original_passage(self): + chord = harmony('C7') + pickup = note('pickup', 3, chord, (2, 3, 1, 3), melody=True) + outgoing = note('outgoing', 0, chord, (5, 3, 5, 3)) + target = note('target', 0, chord, (10, 9, 11, 8)) + mixed = measure([outgoing, pickup]) + source = [measure([], [chord]), measure([], [harmony('G7')]), measure([], [chord])] + origins = [generator.electric.MeasureOrigin(fractions.Fraction(8), 'accompaniment', mixed, end=fractions.Fraction(3)), generator.electric.MeasureOrigin(fractions.Fraction(-3), 'melody', mixed, start=fractions.Fraction(3)), generator.electric.MeasureOrigin(fractions.Fraction(0), 'accompaniment', measure([target]))] + links = generator.electric.link_voicings(source, origins) + self.assertEqual(len(links), 1) + self.assertIs(links[0].target, target) + self.assertEqual(links[0].references, (pickup,)) def test_corresponding_melody_shapes_change_within_one_harmony(self): chord = harmony('C7') first = note('melody-1', 1, chord, (2, 3, 1, 3), melody=True, duration=2) diff --git a/tests/test_engraving.py b/tests/test_engraving.py index 4419578..8acb8da 100644 --- a/tests/test_engraving.py +++ b/tests/test_engraving.py @@ -49,6 +49,7 @@ class EngravingTests(unittest.TestCase): def assert_paired_pages(self, layout): self.assertTrue(all(len(page.systems) == 2 for page in layout.pages[:-1])) self.assertIn(len(layout.pages[-1].systems), (1, 2)) + self.assertEqual(len({system.scale for page in layout.pages for system in page.systems}), 1) for page in layout.pages: self.assertEqual(len({system.scale for system in page.systems}), 1) for system in page.systems: @@ -59,6 +60,34 @@ class EngravingTests(unittest.TestCase): self.assertAlmostEqual(max(x for p in lines for x, _ in p.points), page.width - layout.style.margin_x - 1) for first, second in zip(page.systems, page.systems[1:]): self.assertGreaterEqual(second.box.top - first.box.bottom, layout.style.system_gap - 0.001) + def test_titles_sections_and_tempos_do_not_change_size_between_pages(self): + source = tests.test_musicxml.parse(tests.test_accompaniment.xml_bars([tests.test_musicxml.xml_note()] * 40)) + source['metadata']['composer'] = 'Composer' + for index in (0, 9, 18, 27): + measure = source['staves'][0]['measures'][index] + measure['section_label'] = f'Section {index}' + measure['tempos'] = [{'onset': generator.model.rational(fractions.Fraction(1, 2)), 'written': {'type': 'quarter', 'dots': 0}, 'bpm': generator.model.rational(124)}] + layout = self.layout(source) + self.assertGreater(len(layout.pages), 2) + self.assert_paired_pages(layout) + self.assertEqual(layout.pages[0].systems[0].scale, 1) + self.assertEqual(self.primitives(layout, 'tempo'), []) + self.assertEqual(len(self.primitives(layout, 'section')), 4) + self.assertEqual(len(self.primitives(layout, 'subtitle')), len(layout.pages)) + without_tempos = copy.deepcopy(source) + for measure in without_tempos['staves'][0]['measures']: + measure.pop('tempos', None) + self.assertEqual(layout, self.layout(without_tempos)) + self.assertEqual(generator.playback.compile_timeline(source), generator.playback.compile_timeline(without_tempos)) + def test_long_credits_wrap_without_overflow_or_page_specific_sizing(self): + source = tests.test_musicxml.parse(tests.test_accompaniment.xml_bars([tests.test_musicxml.xml_note()] * 32)) + source['metadata']['composer'] = 'A moderately long composer credit ' * 6 + layout = self.layout(source) + self.assert_paired_pages(layout) + header = [p for p in layout.pages[0].primitives if p.role in ('title', 'subtitle')] + self.assertGreater(len(header), 2) + for page in layout.pages: + self.assertEqual(header, [p for p in page.primitives if p.role in ('title', 'subtitle')]) def test_guitar_pages_always_pair_systems_including_tall_passages(self): content = tests.test_musicxml.xml_note('E', octave=5) source = tests.test_musicxml.parse(tests.test_accompaniment.xml_bars([content] * 32))