Compare commits
47 Commits
896de203b3
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 150394d598 | |||
| 1bacfd0f33 | |||
| 3f63b255ac | |||
| bc7baea7c4 | |||
| 300097a37e | |||
| 841a3f974e | |||
| 3a01b4b6bd | |||
| a0e13434e4 | |||
| 23b606e47f | |||
| d2f493c17b | |||
| 125aaa1637 | |||
| 2f21ec1f16 | |||
| c7f6a30a13 | |||
| e15dc31568 | |||
| bb3bba6bbb | |||
| 8423f3d788 | |||
| e71385dad1 | |||
| df83cae38c | |||
| 04bb44b9d0 | |||
| 82349cf897 | |||
| ffdbe48258 | |||
| e7180e557b | |||
| db7966a430 | |||
| bcaf2f1403 | |||
| 654299decd | |||
| ef62af892b | |||
| 0e68f5364b | |||
| 68df7292ee | |||
| f234dd6d51 | |||
| 405066eb43 | |||
| 8fdd736e13 | |||
| e8ac7b5edd | |||
| 04c6ea2e00 | |||
| 59afd78205 | |||
| 5fff5a165e | |||
| a0bd19b3ba | |||
| f2f371b951 | |||
| f5861fcdf6 | |||
| 28fc67fba1 | |||
| a7b64c5361 | |||
| 5414caf30a | |||
| 75655786e9 | |||
| eae432aa83 | |||
| ce695a626a | |||
| 7b60182a3d | |||
| 09656a9d60 | |||
| 2a1aa2c67a |
+1
-1
@@ -4,7 +4,7 @@ build/*
|
||||
build/build_tools/*
|
||||
!build/build_tools/docker/
|
||||
build/build_tools/docker/*
|
||||
!build/build_tools/docker/format-requirements.txt
|
||||
!build/build_tools/docker/format_requirements.txt
|
||||
dist
|
||||
node_modules
|
||||
*.log
|
||||
|
||||
+15
-15
@@ -88,44 +88,44 @@ jobs:
|
||||
python3 \
|
||||
python3-venv
|
||||
python3 -m venv build/build_common/ci_python
|
||||
build/build_common/ci_python/bin/python -m pip install --no-cache-dir conan==2.26.2 -r generator/requirements.txt
|
||||
build/build_common/ci_python/bin/python -m pip install --no-cache-dir conan==2.26.2
|
||||
echo "$PWD/build/build_common/ci_python/bin" >> "$GITHUB_PATH"
|
||||
- name: Restore Conan cache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: build/build_common/conan_cache
|
||||
key: product-vamp-conan-${{ runner.os }}-${{ hashFiles('conanfile.py', 'modulus.json', 'conan/profiles/*') }}
|
||||
restore-keys: product-vamp-conan-${{ runner.os }}-
|
||||
key: product_vamp_conan_${{ runner.os }}_${{ hashFiles('conanfile.py', 'modulus.json', 'conan/profiles/*') }}
|
||||
restore-keys: product_vamp_conan_${{ runner.os }}_
|
||||
- name: Configure native release
|
||||
run: python3 modulus.py configure --target x86_64_gcc12_release --update
|
||||
- name: Check package tooling
|
||||
run: python3 -m unittest discover -s tests -p 'test_publish_package.py'
|
||||
run: python3 modulus.py python -m unittest discover -s tests -p 'test_publish_package.py'
|
||||
- name: Check code style
|
||||
run: |
|
||||
python3 -m pip install --no-cache-dir -r build/build_tools/docker/format-requirements.txt
|
||||
python3 -m pip install --no-cache-dir -r build/build_tools/docker/format_requirements.txt
|
||||
python3 modulus.py format --check
|
||||
- name: Identify engraving renderer
|
||||
id: renderer
|
||||
run: echo "fingerprint=$(python3 -m generator --renderer-fingerprint)" >> "$GITHUB_OUTPUT"
|
||||
run: echo "fingerprint=$(python3 modulus.py python -m generator --renderer-fingerprint)" >> "$GITHUB_OUTPUT"
|
||||
- name: Restore engraving cache
|
||||
id: engraving-cache
|
||||
id: engraving_cache
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: build/build_common/engraving-cache/${{ steps.renderer.outputs.fingerprint }}
|
||||
key: product-vamp-pages-${{ steps.renderer.outputs.fingerprint }}-${{ hashFiles('generator/**/*.py', 'generator/*.py', 'data/songs/*.xml', 'data/rhythms/**/*.xml', 'data/scales/**/*.xml') }}
|
||||
restore-keys: product-vamp-pages-${{ steps.renderer.outputs.fingerprint }}-
|
||||
path: build/build_common/engraving_cache/${{ steps.renderer.outputs.fingerprint }}
|
||||
key: product_vamp_pages_${{ steps.renderer.outputs.fingerprint }}_${{ hashFiles('generator/**/*.py', 'generator/*.py', 'generator/palette.json', 'data/songs/*.xml', 'data/composition/*.json', 'data/models/*.json', 'data/training/*.json', 'data/training/*.xml') }}
|
||||
restore-keys: product_vamp_pages_${{ steps.renderer.outputs.fingerprint }}_
|
||||
- name: Build native release
|
||||
run: python3 modulus.py build --target x86_64_gcc12_release
|
||||
- name: Save engraving cache
|
||||
if: steps.engraving-cache.outputs.cache-hit != 'true'
|
||||
if: steps.engraving_cache.outputs.cache-hit != 'true'
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: build/build_common/engraving-cache/${{ steps.renderer.outputs.fingerprint }}
|
||||
key: ${{ steps.engraving-cache.outputs.cache-primary-key }}
|
||||
path: build/build_common/engraving_cache/${{ steps.renderer.outputs.fingerprint }}
|
||||
key: ${{ steps.engraving_cache.outputs.cache-primary-key }}
|
||||
- name: Test native release
|
||||
run: python3 modulus.py test --target x86_64_gcc12_release
|
||||
- name: Test asset generation
|
||||
run: python3 -m unittest discover -s tests -p 'test_*.py'
|
||||
run: python3 modulus.py python -m unittest discover -s tests -p 'test_*.py'
|
||||
- name: Fetch Pico SDK
|
||||
if: ${{ gitea.event_name == 'workflow_dispatch' || (gitea.event_name == 'push' && gitea.ref == 'refs/heads/master') }}
|
||||
env:
|
||||
@@ -150,4 +150,4 @@ jobs:
|
||||
env:
|
||||
PACKAGE_REGISTRY_USER: ${{ secrets.CONAN_USER }}
|
||||
PACKAGE_REGISTRY_TOKEN: ${{ secrets.CONAN_TOKEN }}
|
||||
run: python3 package/scripts/publish_latest_generic_package.py
|
||||
run: python3 modulus.py publish
|
||||
|
||||
+1
-1
@@ -7,6 +7,6 @@ if(VAMP_PICO_FIRMWARE_PROJECT)
|
||||
return()
|
||||
endif()
|
||||
|
||||
project(product-vamp LANGUAGES CXX)
|
||||
project(product_vamp LANGUAGES CXX)
|
||||
|
||||
include(cmake/zero.cmake)
|
||||
|
||||
@@ -5,15 +5,21 @@ Product Vamp is a two-device sheet-music appliance.
|
||||
- Raspberry Pi Zero 2 W hosts the control Wi-Fi AP, runs the display/control service in Docker, and drives a Waveshare Zero-DISP-7A 1024x600 touch display.
|
||||
- Raspberry Pi Pico 2 W runs UF2 firmware for a Waveshare 2-inch capacitive touch LCD and sends menu/page commands over the Zero-hosted AP.
|
||||
|
||||
Python builds the complete SQLite catalog with the score assets. The Zero opens that packaged catalog read-only through Noto, without creating a database, migrating schemas, or importing JSON at startup. Runtime navigation and rendering use Ligo for the HTTP API, Luma for touch UI rendering, and Modulus for shared build/runtime utilities.
|
||||
Python builds the complete SQLite catalog with the score assets. The Zero opens that packaged catalog read-only through Noto, without creating a database, migrating schemas, or importing JSON at startup. Runtime services use Ligo for the HTTP API, Luma for touch UI rendering, Sonus for audio playback, and Modulus for shared build/runtime utilities.
|
||||
|
||||
The catalog stores shared, immutable menu metadata. Complete score bundles stay in SQLite and are loaded individually when selected; snapshots and Pico heartbeats do not copy the catalog's musical JSON.
|
||||
|
||||
Pico controls:
|
||||
Device controls:
|
||||
|
||||
On the Zero, tap menu rows and switches directly; Tempo has minus/plus buttons. The main menu offers **Performance** and **Settings**. **Settings → Solos** switches both guitar parts between written solos (On) and beat slashes for improvisation (Off), including any solo pickup. Chord symbols and the rest of the arrangement stay in place. Solos starts On and remembers your choice until the app restarts; it applies when you next open a part on either device.
|
||||
|
||||
On the Pico (and on the Zero while viewing a score):
|
||||
|
||||
- Tap: next menu item or next score page.
|
||||
- Double tap: previous menu item or previous score page.
|
||||
- Tap and hold: select the highlighted setting, song, or part, or return from score view to the previous menu.
|
||||
- Tap and hold: select the focused item, enter/leave tempo editing, or return from a score to its part menu.
|
||||
|
||||
The HTTP service is device-only: Pico controls, title artwork, and health checks. There is no browser remote.
|
||||
|
||||
## Build
|
||||
|
||||
@@ -29,9 +35,11 @@ Release verification:
|
||||
```sh
|
||||
python3 modulus.py configure --target x86_64_gcc12_release
|
||||
python3 modulus.py build --target x86_64_gcc12_release
|
||||
python3 modulus.py test --target x86_64_gcc12_release
|
||||
python3 modulus.py python -m unittest discover -s tests -p 'test_*.py'
|
||||
```
|
||||
|
||||
`python3 modulus.py run` uses `package/config/vamp.development.json` for a headless readiness check against native build assets. `vamp-zero --once` checks the packaged database and referenced page/audio assets, checks runtime writes and the server bind, then exits without opening audio or display hardware. Missing or incompatible catalogs require rebuilding or reinstalling; they are never repaired at runtime. `--check-config` only validates configuration; `--health-check` probes the running service's `/api/health` endpoint without modifying files.
|
||||
`python3 modulus.py run` uses `package/config/vamp.development.json` for a headless readiness check against native build assets. `vamp_zero --once` checks the packaged database and referenced page/audio assets, checks runtime writes and the server bind, then exits without opening audio or display hardware. Missing or incompatible catalogs require rebuilding or reinstalling; they are never repaired at runtime. `--check-config` only validates configuration; `--health-check` probes the running service's `/api/health` endpoint without modifying files.
|
||||
|
||||
Configure/build read public packages anonymously from the khodo Conan registry, even when the project cache contains an expired login. `configure --update` refreshes both the exported Modulus tooling and Conan dependencies. `--no-remote` uses only locally cached packages. Publishing is the only operation that needs credentials. CMake checks the required Sonus and Luma APIs during configuration and reports stale dependencies early.
|
||||
|
||||
@@ -55,7 +63,7 @@ Modulus also generates `.nvim.lua` for Neovim 0.11+ with `exrc` enabled. Review
|
||||
|
||||
## Package
|
||||
|
||||
Product packaging targets Raspberry Pi OS/Debian trixie on ARM64 and optionally builds Pico firmware. Set `PICO_SDK_PATH` when building the firmware artifact:
|
||||
Product packaging targets Raspberry Pi OS/Debian trixie on ARM64. The configured package builds both the Zero Docker image and Pico firmware. The build container includes the Pico SDK; when building directly outside that container, set `PICO_SDK_PATH`:
|
||||
|
||||
```sh
|
||||
PICO_SDK_PATH=/path/to/pico-sdk python3 modulus.py package --update
|
||||
@@ -64,13 +72,13 @@ PICO_SDK_PATH=/path/to/pico-sdk python3 modulus.py package --update
|
||||
The package command creates:
|
||||
|
||||
```text
|
||||
build/packages/product-vamp-arm_64_gcc12_release.tar.gz
|
||||
build/packages/product-vamp-arm_64_gcc12_release.tar.gz.sha256
|
||||
build/packages/product_vamp_arm_64_gcc12_release.tar.gz
|
||||
build/packages/product_vamp_arm_64_gcc12_release.tar.gz.sha256
|
||||
```
|
||||
|
||||
The tarball contains the Zero Docker archive, Pi install scripts, generated catalog database, pages, audio, fonts, Pico title artwork, and Pico UF2 firmware. Complete score JSON is stored inside `catalog.db`; individual JSON files remain build intermediates and are not deployed. Builds replace the same target-specific archive without a release label. The manifest and `vamp-zero --build-info` identify the source commit.
|
||||
The tarball contains the Zero Docker archive, Pi install scripts, generated catalog database, pages, audio, fonts, Pico title artwork, and Pico UF2 firmware. Complete score JSON is stored inside `catalog.db`; individual JSON files remain build intermediates and are not deployed. Builds replace the same target-specific archive without a release label. The manifest and `vamp_zero --build-info` identify the source commit.
|
||||
|
||||
Run `sudo zero/install-zero.sh` from an extracted bundle on the Zero. Every installation resets all Product Vamp data and settings, including the control Wi-Fi profile, to the new bundle defaults. No previous database rows or configuration are migrated. Unrelated OS data and networks are untouched. Installing through the control Wi-Fi can disconnect your session; use a local console or an independent connection.
|
||||
Run `sudo zero/install_zero.sh` from an extracted bundle on the Zero. Every installation resets all Product Vamp data and settings, including the control Wi-Fi profile, to the new bundle defaults. No previous database rows or configuration are migrated. Unrelated OS data and networks are untouched. Installing through the control Wi-Fi can disconnect your session; use a local console or an independent connection.
|
||||
|
||||
The installer probes the incoming image before removing existing application data. A failed replacement leaves Product Vamp stopped and reports an error; rerun the installer after fixing the cause. Normal service restarts do not perform installation cleanup. No automatic backup of the previous installation is retained.
|
||||
|
||||
@@ -79,47 +87,80 @@ Publishing the rolling generic package requires credentials only for upload:
|
||||
```sh
|
||||
PACKAGE_REGISTRY_USER=<user> \
|
||||
PACKAGE_REGISTRY_TOKEN=<token> \
|
||||
python3 package/scripts/publish_latest_generic_package.py
|
||||
python3 modulus.py publish
|
||||
```
|
||||
|
||||
Artifacts are published to the khodo generic package registry's required `latest` slot. Publish the updated Modulus tooling before running Product Vamp CI so packaging and publishing agree on the stable filenames. CI checks this contract immediately after configure using a tiny fixture archive, without compiling or contacting the registry. A failure here means the exported Modulus packager needs updating; rerun the full workflow after publishing Modulus, not just the upload step.
|
||||
|
||||
## Score Assets
|
||||
|
||||
Uncompressed MusicXML 3.1/4.0 scores exported from Soundslice or MuseScore live in `data/`. Generated score JSON is not committed.
|
||||
Uncompressed MusicXML 3.1/4.0 source scores exported from Soundslice or MuseScore live in `data/songs/`. Generated score JSON is not committed.
|
||||
|
||||
`data/songs` supplies the authored music. `data/rhythms/<meter>/<series>/` supplies the accompaniment rhythm library for 2/4, 3/4, 4/4, and 5/4. All three series are active: the original quarter/eighth patterns plus series `3` with half, dotted-half, and whole notes/rests. Rhythm snippets are build inputs, not separate catalog entries or runtime files. Generation loads the library once and shares it across parts.
|
||||
`data/songs/` supplies the original melody and harmony. `data/composition/` holds guitar/difficulty settings, sparse accompaniment figures, and harmonic-validation policies. `data/training/manifest.json` registers authored solos and their source/slot pairings; `data/models/solo.json` holds the frozen pooled prediction model. The former scale, interval, and rhythm catalogs and handwritten phrase composer have been removed.
|
||||
|
||||
`data/scales` supplies the 21 C-centered modes of major, melodic minor, and harmonic minor. The Python build transposes these patterns internally to label the acoustic and electric solo passages; it never transposes the songs or stores scale assignments in song XML. Scale changes appear above the existing solo chord symbols, with detailed build-only reports in `generated-assets/analysis/`. Editing a scale regenerates assets, and invalid patterns fail before replacing the previous output.
|
||||
Six roles generate independently: acoustic accompaniment/solo; electric accompaniment/melody/solo; vocal melody. A process pool and per-role caches support parallel and incremental builds. Each role uses the source and its own inputs without reading another generated role. Canonical accompaniment repeats at corresponding source-form positions and does not react to generated solos. Vocal melody preserves the authored notes and lyrics. Electric melody preserves source pitches and harmonizes eligible sustained notes, reattacking them at chord changes.
|
||||
|
||||
Electric accompaniment and electric melody share compact chord families on strings 1–4. Melody harmonization adapts these to keep the original melody on the lowest-numbered feasible string, preferring it above the added chord tones. The separate Electric Solo stays monophonic. Acoustic accompaniment uses one bass note on string 5 or 6 and three upper notes on strings 2, 3 and 4. Transposable degree families cover triads, sevenths/sixths, suspensions, diminished/augmented and extended/altered chords, with root/fifth bass alternatives on both bass strings. Plain major/minor chords also allow third basses; explicit slash basses and inversions take priority. Unplayable variants are discarded. Each instrument selects a connected voicing path across the source form to reduce hand movement, then reuses it through the arrangement.
|
||||
|
||||
Accompaniment uses independently authored two-bar jazz pattern families, chosen against each song's original melody and harmonic rhythm. Acoustic repeats two patterns (A–B); electric repeats four (A–B–C–D). Occasional source-phrase-ending fills recur at the same positions in every iteration; both instruments allow at most one per eight full measures, including the repeat join. Acoustic normally has 1–3 attack positions per full bar with quarter/eighth bass and upper-chord notes played together or in sequential pairs. Electric has distinct patterns with normally 0–2 attacks per bar, stabs, sustains and space. Cross-bar holds use ties; repeated attacks remain attacks. Pattern phase follows source-form position, including partial entries and odd-length forms. Meter changes use compatible cycles, with explicit diagnostics if fewer distinct patterns are available. Tempo changes do not reshuffle the accompaniment.
|
||||
|
||||
Each instrument has 24 distinct two-bar patterns in 4/4, 24 in 3/4, and 24 for each of the 3+2 and 2+3 groupings in 5/4. Written additive grouping takes precedence. Otherwise, the original chord changes and melody choose one consistent 5/4 grouping per continuous meter section, shared as source analysis by the independently generated parts. Explicit meter matching prevents treating 6/8 as 3/4. The learned solo model and playback count-in are unchanged by this accompaniment expansion.
|
||||
|
||||
Both accompaniment parts balance movement with sounding register and a soft cost for mean fret positions above nine; comfortable shifts can win over staying high. Acoustic uses a register center of MIDI 53 and electric uses 60. Compact spans and preferred chord families remain higher priorities, including for the final sustained chord. Electric melody's supporting chords use the same balance after the existing melody-string and foreground priorities; the original melody pitches and rhythm remain fixed. Voicing preferences do not reseed accompaniment rhythms.
|
||||
|
||||
Acoustic attacks normally play bass and upper chord together. Consecutive attacks exactly an eighth note apart split into bass–upper pairs within the same harmony; an odd leftover attack plays both together. Pairing continues across barlines and two-bar pattern boundaries, but stops at chord changes, chorus boundaries and source-defined entries/handoffs. The first attack for each new chord therefore includes bass, including a qualified anticipated entrance. Delayed entrances remain delayed. Every new acoustic attack releases the previous sound: a bass eighth followed by an upper-chord quarter has no bass underneath the quarter. Complete-cycle selection, fills and final realization use this same release rule. Bass and upper notes share one engraved part; uninterrupted holds may still tie across barlines.
|
||||
|
||||
Each song has six canonical roles: electric melody, electric accompaniment, electric solo, acoustic accompaniment, acoustic solo, and vocal melody. Matching source-form positions reuse the same musical events and TAB whenever a role returns. Final-turnaround omission changes only affected harmony; source-defined pickups/handoffs and the three-bar instrumental closing sustain remain explicit exceptions.
|
||||
|
||||
**Registered Solo 1 is notated exactly in the acoustic part and Solo 2 exactly in the electric part.** Unregistered song/slot pairs use deterministic prediction from one pooled statistical model trained on both slots. There is no learned acoustic/electric style distinction. Prediction uses up to four recent pitch/rhythm events, source-melody features, harmony, and metrical position; it does not plan complete themes or guarantee long-range phrase development. The current corpus is four authored solos from Autumn Leaves and All of Me.
|
||||
|
||||
Training, authored score reuse, and prediction share contextual harmony validation based on actual notes, timing, and chords. Explanatory labels and justification tags are not required. Unsupported relationships fail with a diagnostic rather than silently changing notes. Both solo roles use strings 1–6 and frets 1–12 without open strings. No dynamics, accents, velocity shaping, or random timing are added.
|
||||
|
||||
`./modulus.py python -m generator.compose --song ... --role acoustic_solo --data-dir data --output ...` builds one independent role as JSON. To exercise prediction for a registered song, pass `--settings` with a JSON file containing `{"predict": true}`. Each song produces five score bundles: the normal acoustic, electric and vocal parts, plus acoustic and electric `_improv` variants. The variants reuse the same accompaniment and melody, replacing the full solo allocation (including pickup rests) with meter-aware slashes in notation and TAB. Their subtitles identify them as Improvisation. Normal scores retain written solos; separate solo MusicXML files are not generated. Authored XMLs remain under `data/training`, and regression tests compare their sounding events directly with generated score data.
|
||||
|
||||
See [Shared Part Generation](TECHNICAL_GUIDE.md#shared-part-generation) and [Authored Repertoire and Learned Solos](TECHNICAL_GUIDE.md#authored-repertoire-and-learned-solos) for the active pipeline and limitations. Keep temporary comparisons and one-off diagnostics under `/tmp/`; `build/` retains product outputs, tools and dependencies.
|
||||
|
||||
To inspect generated assets without building the full package, run:
|
||||
|
||||
```sh
|
||||
python3 -m generator --data-dir data --output-dir /tmp/product-vamp-generated --static-assets-dir package/assets --check
|
||||
./modulus.py python -m generator --data-dir data --output-dir /tmp/product_vamp_generated --static-assets-dir package/assets --check
|
||||
```
|
||||
|
||||
The `--check` path compares generation invariants against `data/expected/performance_summary.json`.
|
||||
The pinned build-only dependencies are in `generator/requirements.txt`. Configure/build automatically refresh the project build image when this file changes; direct builds must install it in their Python environment.
|
||||
The `--check` path compares generation invariants against `tests/fixtures/performance_summary.json`.
|
||||
Modulus owns the pinned build-only dependencies in its optional `assets` group, selected by `tooling.python.groups` in `modulus.json`. Configure prepares `build/build_common/python`; `./modulus.py python` and CMake use that environment and the exported Modulus modules. Builds never install Python dependencies. After dependency pins change, run configure again. C++-only libraries do not opt in, and Python is not packaged for the Pi.
|
||||
|
||||
CMake builds engrave with two Python workers and share a disposable page cache under `build/build_common/engraving-cache`. Native and ARM packaging reuse unchanged pages; CI also retains this cache between runs. Music, playback, and catalog validation still run for every generation. Set `VAMP_ENGRAVING_JOBS` (1-16) to adjust concurrency, or set `VAMP_ENGRAVING_CACHE_DIR` to an empty CMake value to disable caching. Direct generator runs can opt in with `--jobs 2 --engraving-cache build/build_common/engraving-cache --progress`.
|
||||
CMake builds use two composition workers and two engraving workers, with separate disposable caches under `build/build_common/composition_cache` and `build/build_common/engraving_cache`. Native and ARM packaging reuse unchanged roles and pages; CI also retains the page cache between runs. Music, recording, and catalog validation still run for every generation. Set `VAMP_COMPOSITION_JOBS` or `VAMP_ENGRAVING_JOBS` (1-16) to adjust concurrency, or set `VAMP_ENGRAVING_CACHE_DIR` to an empty CMake value to disable persistent page caching. Direct generator runs default to two composition workers and one engraving worker, without persistent caches; use `--composition-cache`, `--engraving-cache`, `--composition-jobs`, `--jobs`, and `--progress` as needed.
|
||||
|
||||
Identical notation bodies share layout and body rasterization even when titles or score identities differ; each score retains its own header, pages, music, and catalog identity. A `cold namespace` means no cache directory exists for the current renderer fingerprint. It does not mean that every score must be rendered independently: repeated bodies can still be reused within that build, including with persistent caching disabled. Progress separates full-score hits, body hits, newly rasterized bodies, and composed pages.
|
||||
|
||||
The build-time pipeline is Soundslice/MuseScore -> `.xml` -> musical model and rhythm plans -> part generation -> JSON, engraved PNG pages, generated-tone audio, Pico title artwork, and a read-only catalog database. Sources in `data/songs/` retain the seven-section performance form. Songs generate Acoustic, Electric, and Vocal parts in their authored key, without key variants or a key-selection menu.
|
||||
Add a source and its authored solo, then retrain the pooled model, without changing generator code:
|
||||
|
||||
Accompaniment uses deterministic four-bar phrase cycles: a two-bar motif repeats with a one-beat variation in the fourth bar when a suitable candidate exists. Acoustic has independently planned bass and upper-chord rhythms, including simultaneous attacks, sharing one fixed playable voicing until the harmony changes within an arrangement iteration. Bass, upper voices, and TAB positions stay constant across rests, barlines, and repeated chord symbols. Any defined chord tone can serve as the bass; explicit slash basses and inversions remain authoritative. The rhythms combine into one notated voice with no ties: each attack releases by the next attack or barline, simultaneous tones share a stem and duration, and rests appear only when the entire part is silent. Held notes are not reattacked. Electric accompaniment targets about two attacks per 4/4 bar, scaled for other meters, favoring gaps around the melody and acoustic rhythms. Its notes retain the selected rhythm's duration without a one-beat cap, stopping at chord changes or barlines and reusing the corresponding melody passage's chord shape when available. Both parts remain tie-free; clipped binary durations that need ties shorten to one conventional note followed by silence. Rhythm snippets supply attacks and rests; tied continuations do not create accompaniment attacks. Structured harmony supplies chord tones. N.C. and absent harmony remain silent. Solo slashes and the seven-section form retain their roles. Unsupported accompaniment meters and mid-measure meter changes fail explicitly.
|
||||
```sh
|
||||
./modulus.py python -m generator.train --add-source /path/to/song.xml --add-solo /path/to/solo1.xml --slot 1
|
||||
./modulus.py python -m generator.train --add-source data/songs/song.xml --add-solo /path/to/solo2.xml --slot 2
|
||||
```
|
||||
|
||||
There are no musical genre presets, genre defaults, or genre metadata. Obsolete `vamp:style` hints are rejected; visual styles, fonts, colors, and barline notation remain supported. Phrase cycles are written into the generated score and played once in reading order.
|
||||
To retrain existing pairs, run `./modulus.py python -m generator.train`; add `--leave-one-song-out` for held-out likelihood diagnostics. Training writes `data/models/solo.json` and `build/training/report.json`. Ordinary builds use registered authored music or the saved model and never retrain automatically. Exact registered playback verifies authored reuse; it does not demonstrate model memorization or musical quality on unfamiliar songs. [Training and playback details](TECHNICAL_GUIDE.md#authored-repertoire-and-learned-solos) cover pairing, timing, pitch convention, data migration, and limitations.
|
||||
|
||||
Guitar parts share standard tuning and chord-tone helpers but use separate acoustic and electric placement systems. Both use frets 1-20, exclude open strings, and require a maximum fret difference of three. Frets 7-10 qualify; frets 7-11 do not. Acoustic requires a bass on string 5 or 6 plus all three upper strings 4, 3, and 2, with at least one occupied string at fret 12 or below. Electric uses chords on strings 1-3 or 1-4. Electric melody notes longer than a quarter note, including full tied runs, receive chords when playable; chord changes create fresh attacks even for short remaining fragments. Electric melodies are raised one octave; vocal registers stay unchanged. All parts still sound one octave below their generated notation, and explicit MusicXML transposition is honored once. Unplayable melody harmonizations remain single notes with a diagnostic; unplayable accompaniment or exact melody pitches fail generation.
|
||||
The build-time pipeline is MusicXML -> source analysis -> independent roles -> assembled parts -> semantic JSON, supplied recordings, engraved PNG pages, Pico title artwork, and a read-only catalog database. Each source produces the six main performance sections plus the held Ending as Acoustic, Electric, and Vocal parts in its authored key, without key variants or a key-selection menu. Performance measure numbers run continuously across the complete arrangement, starting at 1 in the lead-in; they do not restart with a new section or chorus. Pickups occupy the preceding measure.
|
||||
|
||||
All parts use two music systems per page, with a single system only when the score ends on an odd system. Lines break only between measures and share consistent staff/TAB widths. A measure that cannot fit at readable spacing fails with a diagnostic instead of being split. Tall notation is scaled uniformly to fit the two rows; guitar notation and TAB stay together and aligned. TAB displays frets and ties without duplicate rests; standard notation retains the complete rhythm. The generated `.pages/*.png` files are the same page images displayed by the product.
|
||||
All generated monophonic guitar material uses frets 1–12 without open strings. Chords use two span tiers: **one to three consecutive fret positions share the primary tier; exactly four positions are a fallback** (e.g. 7–9 is primary, 7–10 is fallback). Five or more positions are forbidden. Selection minimizes fallback use before family, melody-string, movement or register preferences. A chord can extend to fret 20 while retaining at least one sounding anchor on frets 1–12 throughout its duration. Acoustic bass remains within frets 1–12 and upper chords need their own anchor when played separately. Some chord/key combinations still have no legal inversion; generation reports them instead of removing required tones. Electric source-melody harmonization retains its chord-change reattack policy. Import preserves exact source pitches and ties; unplayable or unsupported input fails explicitly rather than being silently octave-folded.
|
||||
|
||||
Electric melody prioritizes four-string chords, then melody on top. Every generated guitar voicing requires the root, the actual fifth, or both somewhere in the voicing, not necessarily in the bass. Defining chord tones remain mandatory. Acoustic chooses four connected string-voice journeys independently for each arrangement iteration, minimizing total fret travel across harmonic spans. Upper strings stay fixed; bass movement counts both fret distance and one step for switching between strings 5 and 6. All bass inversions are eligible. There is no acoustic register, physical-reach, or shape-effort penalty beyond its hard fret constraints. Complete triads are preferred when feasible; doubling is allowed, authored omissions are never restored, and missing optional tones break equal-movement ties. Electric retains its existing register, span, shape, and position-center movement costs. This is a fretboard-feasibility approximation, not a finger-assignment model. Exact melody pitches and rhythms remain unchanged.
|
||||
There are no genre presets or runtime composition. The complete arranged score is played in reading order. The source-defined form and continuous whole-arrangement measure numbering remain unchanged.
|
||||
|
||||
Write all music in reading order: repeat bars, numbered endings, navigation jumps, and pass-specific ties are rejected. The seven-section performance arrangements remain fully written out. Chord labels use `M`, `m`, `aug`, `dim`, `sus`, and `mM7`, including explicit major triads such as `CM`. Recognized Soundslice text-only harmonies are normalized into structured chords; parenthesized chords mark optional turnarounds omitted from the final arrangement ending.
|
||||
Normal browsing uses two music systems per page, with a single system only when the score ends on an odd system. Playback uses overlapping pairs (1–2, 2–3, 3–4): each new active line moves to the top, revealing the next below. The final line moves to the top with an empty lower half. Measure numbers sit above their starting barlines in a clear lane; playback outlines the active measure number in the accent color. Lines break only between measures and share consistent staff/TAB widths. A measure that cannot fit at readable spacing fails with a diagnostic instead of being split. Tall notation is scaled uniformly to fit the two rows; guitar notation and TAB stay together and aligned. TAB displays frets and ties without duplicate rests; standard notation retains the complete rhythm. The generated `.pages/*.png` files are the same page images displayed by the product.
|
||||
|
||||
The main menu's **Playback** toggle plays the selected part once at the menu BPM, suppresses the metronome, and returns to the part menu after natural completion. Manual page turns do not seek or restart audio. Playback is off by default. Python generates shared PCM tones and exact beat timelines; C++/Sonus only loads, schedules, and mixes them. Audio sample sustain loops hold individual notes for their written duration; they never repeat musical passages. No SoundFonts or runtime synthesizer are required. The main menu contains Songs, Playback, Metronome, and Tempo. Navigation is Song -> Part -> Score.
|
||||
Write all music in reading order: repeat bars, numbered endings, navigation jumps, and pass-specific ties are rejected. The performance arrangements, including the held Ending, remain fully written out. Chord labels use `M`, `m`, `aug`, `dim`, `sus`, and `mM7`, including explicit major triads such as `CM`. Recognized Soundslice text-only harmonies are normalized into structured chords; parenthesized chords mark optional turnarounds omitted from the final vocal pass.
|
||||
|
||||
Settings provides independent **Metronome** and **Backing** toggles, both off by default, plus **Tempo**. Song -> Part -> Score navigation stays the same. With both toggles off, pages turn manually. With either enabled, opening a part starts a one-bar count-in and an automatic performance; tap/double-tap page commands are ignored, and hold exits to the part menu. Natural completion also returns there.
|
||||
|
||||
A performance is an eight-bar intro followed by five complete passes: Vocal Melody, Guitar Melody, Acoustic Solo, Electric Solo, and Vocal Melody. A final Ending section adds one guitar chord attack sustained across three full measures, with vocal rests. The current 32-bar songs contain 171 numbered bars. The ending holds the final performed harmony (GM6 for All of Me, Dm for Autumn Leaves). Optional turnaround chords are omitted from the final vocal pass.
|
||||
|
||||
Audio comes exclusively from supplied WAV files: `package/assets/sounds/beat1.wav` accents each measure's first beat, and `beat2.wav` plays its other beats. Backing tracks belong in `package/assets/backing/<song_id>_<bpm>.wav`, for example `all_of_me_120.wav`. The normalized song ID comes from the source filename. Files are copied unchanged; the app never synthesizes notes or stretches recordings.
|
||||
|
||||
Tempo choices are 60, 70, 80, 90, 100, 110, and 120 BPM. With Backing on, choices are the tempos available for every catalog song; currently that is 120 BPM. Enabling Backing selects the closest available tempo, preferring the slower choice on a tie. If no tempo is shared, Backing is unavailable. Add recordings at the other tempos and rebuild to enable them.
|
||||
|
||||
Backing recordings include one bar of count-in, the complete arrangement including its three-bar held ending, and decay. The existing WAVs are copied unchanged. The recorded count-in plays alone. Metronome clicks stop at the start of the written Ending section; those three measures and the decay remain unclicked. Metronome-only mode supplies its own count-in, waits silently through the ending, and then stops. Playback line turns and measure highlighting follow the rendered audio clock through all 171 measures, including rests and ties; the final line stays visible through the recording decay. Preparation and count-in have no highlighted measure.
|
||||
|
||||
Code style is managed by Modulus, using compact two-space formatting. Python imports modules by their full names and qualifies imported symbols; only `from __future__ import annotations` is exempt, and imports have no aliases. Run `./modulus.py format` to format C++ and Python, or `./modulus.py format --check` to check formatting and prohibited aliases. The project-local Neovim integration routes Conform formatting through the same container tools, including format on save and existing LazyVim toggles. Run configure first when the image or exported tooling needs updating. Use `tooling.editor.clang_format` for C++ overrides and `tooling.format.exclude` for project-relative exclusion globs; do not edit generated `.clang-format` files.
|
||||
|
||||
@@ -127,7 +168,11 @@ Use American English in project-owned identifiers, filenames, messages, and docu
|
||||
|
||||
See [Score Generation](TECHNICAL_GUIDE.md#score-generation) for supported MusicXML notation, Vamp properties, schema details, and diagnostics. There is no compact-JSON source format or legacy runtime adapter. Unsupported notation fails generation before existing assets are replaced.
|
||||
|
||||
Build-time engraving is implemented in Python in `generator/engraving`, using the bundled Petaluma OTF fonts and SMuFL metadata. MuseScore is an optional authoring tool, not a build dependency or rendering backend. The managed image and CI install the pinned Python requirements automatically; direct host builds use `pip install -r generator/requirements.txt`. Exact musical timing is retained through layout, and dense measures can continue across systems. Missing glyphs, unrepresentable page geometry, and failed notation audits stop generation before replacing existing assets.
|
||||
Build-time engraving is implemented in Python in `generator/engraving`, using the bundled Petaluma OTF fonts and SMuFL metadata. MuseScore is an optional authoring tool, not a build dependency or rendering backend. Configure installs the optional Modulus asset dependencies. Exact musical timing is retained through layout, with line breaks between complete measures. Missing glyphs, unrepresentable page geometry, and failed notation audits stop generation before replacing existing assets.
|
||||
|
||||
Every normal build also writes printable PDFs to `build/<target>/generated_assets/print/`: written-solo and improvisation versions of each acoustic and electric part, plus one vocal part per song, including every arranged iteration and the ending. Print at actual size on portrait US Letter paper. Pages have white backgrounds, black notation, at least half-inch printer margins, and multiple systems per sheet; guitar parts include TAB. These are fresh 300 DPI renders, without the duplicated lines used by playback transition pages. PDFs use the existing Modulus-managed Pillow dependency, are cached separately, and remain build-only artifacts rather than being installed on the device.
|
||||
|
||||
`generator/palette.json` preserves the sheet music’s existing dark palette across Zero, Pico, score pages, and previews. Menus use the same Petaluma Script lettering, quiet rules, tune/composer hierarchy and restrained accent colors for a jazz Real Book feel. Performance status shows Count-in, Playing or Sustain, BPM, page progress and a hold-to-exit hint. CMake generates the shared C++ colors from the same palette used by Python. Palette changes invalidate the engraving cache without changing music, spacing, or pagination.
|
||||
|
||||
Petaluma is from Steinberg under the SIL Open Font License. Petaluma supplies music glyphs, and Petaluma Script supplies all visible text on score pages and both device interfaces. The Zero uses packaged `PetalumaScript.otf` for dynamic UI text; the Pico displays prerendered Petaluma Script artwork. Runtime packages retain `OFL.txt`; the music font and engraver stay build-only.
|
||||
|
||||
@@ -136,11 +181,12 @@ Pico artwork generation requires Pillow's Raqm layout support to preserve kernin
|
||||
Pico firmware embeds a small set of fixed labels, part names, digits, and the page separator, generated as four-bit coverage sprites under `generated/pico/static.p4`. Score generation prerenders titles into content-addressed `pico/titles/*.mask` assets referenced by the catalog and served by the Zero when the selection changes. Pico blends those pixels and composes page counts from digit sprites; it does not load fonts, shape text, or rasterize glyphs. All Pico text shaping and artwork generation run on the build host. The build image and CI install the pinned dependencies automatically. For a direct build, first run:
|
||||
|
||||
```sh
|
||||
python3 -m pip install -r generator/requirements.txt
|
||||
./modulus.py configure
|
||||
```
|
||||
|
||||
To inspect the fixed artwork independently, run `python3 -m generator.pico_artwork --static-output /tmp/product-vamp-pico/static.p4`. Changing the source OTF or artwork generator rebuilds the firmware sprites and generated title assets. These generated files are not authored music and are not checked in.
|
||||
To inspect the fixed artwork independently, run `./modulus.py python -m generator.pico_artwork --static-output /tmp/product_vamp_pico/static.p4`. Changing the source OTF or artwork generator rebuilds the firmware sprites and generated title assets. These generated files are not authored music and are not checked in.
|
||||
|
||||
## License
|
||||
|
||||
Product Vamp is released under the MIT License. Bundled third-party fonts keep their own licenses next to the font files.
|
||||
|
||||
|
||||
@@ -13,10 +13,12 @@ python3 modulus.py package
|
||||
Copy the tarball to the Zero, verify its `.sha256`, unpack it anywhere, and run:
|
||||
|
||||
```sh
|
||||
sudo zero/install-zero.sh
|
||||
sudo zero/install_zero.sh
|
||||
```
|
||||
|
||||
The installer loads `zero/product-vamp-zero-linux-arm64.docker.tar`, installs `/etc/product-vamp/vamp.json` if missing, configures NetworkManager AP mode, and enables the systemd units.
|
||||
The installer loads and probes `zero/product_vamp_zero_linux_arm64.docker.tar`, replaces Product Vamp configuration with the bundle defaults in `/etc/product_vamp/vamp.json`, recreates the control Wi-Fi profile, and enables the systemd units. Every installation resets Product Vamp data and settings; there is no automatic backup or migration. Use a local console or independent network connection because replacing the control Wi-Fi profile can disconnect the session.
|
||||
|
||||
Project-owned install paths, services, executables, and archives use underscores. The checkout and Git URL remain `product-vamp`. On upgrades, the installer validates and probes the incoming image before removing the old hyphenated Product Vamp paths, services, and network profile. Unrelated services, networks, and data are preserved; symlinked installation paths are rejected.
|
||||
|
||||
On reinstalls, the installer skips apt entirely when the required OS packages are already present. If packages are missing, the Zero needs upstream internet before the installer can finish provisioning Docker, NetworkManager, and SQLite.
|
||||
|
||||
@@ -29,26 +31,34 @@ Defaults:
|
||||
- Zero IP: `192.168.42.1`
|
||||
- API: `http://192.168.42.1:8080`
|
||||
|
||||
For API-only quick checks, set `runtime.headless` to `true` or run `vamp-zero --once` from a development build.
|
||||
To run the service without its display, set `runtime.headless` to `true`; audio is controlled separately by `audio.enabled`. For a readiness check that validates configuration, catalog, page/audio assets, runtime writes, and server binding without opening hardware, run `python3 modulus.py run` from the configured development checkout. This invokes `vamp_zero --once` with the development configuration and exits after the checks. On an installed Zero, probe the running service with:
|
||||
|
||||
Score inputs are tracked under `data/songs/`. The build/package step generates acoustic, electric, and vocal parts, engraved pages, audio, and the read-only catalog database. Installation replaces these assets together; no database migration or runtime score import is needed.
|
||||
```sh
|
||||
sudo docker exec product_vamp_zero /usr/bin/vamp_zero --config /etc/product_vamp/vamp.json --health-check
|
||||
```
|
||||
|
||||
Score inputs are tracked under `data/songs/`. The build/package step generates acoustic, electric, and vocal parts, engraved pages, supplied WAV recordings, and the read-only catalog database. Installation replaces these assets together; no database migration or runtime score import is needed.
|
||||
|
||||
## Raspberry Pi Pico 2 W
|
||||
|
||||
Hold BOOTSEL while plugging the Pico into USB, then copy:
|
||||
|
||||
```text
|
||||
pico/product-vamp-pico2w.uf2
|
||||
pico/product_vamp_pico2w.uf2
|
||||
```
|
||||
|
||||
to the mounted `RPI-RP2` drive.
|
||||
|
||||
The default firmware connects to SSID `Vamp Control` with passphrase `vamp-control`, then talks to `192.168.42.1:8080`.
|
||||
|
||||
The Pico screen is landscape. Its top bar is blue while connecting, yellow while retrying or when the Zero API is unavailable, and green when the Zero responds. The area below the bar stays blank until a score is active, then it shows the title, selected part, and page count.
|
||||
The Pico screen is landscape and uses the shared dark theme. The header's connection indicator is green when connected, amber while connecting or offline, and red on a Wi-Fi initialization error; status text distinguishes connecting, offline, error, and busy states. The body shows the focused menu item, song title, or setting and its value. In score view it shows the title, selected part, performance phase, BPM, page count, and hold-to-exit hint. The palette and Petaluma Script lettering match the engraved sheet music.
|
||||
|
||||
Controls:
|
||||
|
||||
- Tap: next menu item or next page.
|
||||
- Double tap: previous menu item or previous page.
|
||||
- Tap and hold: select the highlighted menu row, or return from score view to the previous menu.
|
||||
- Tap: next menu item, or next page when both audio toggles are off.
|
||||
- Double tap: previous menu item, or previous page when both audio toggles are off.
|
||||
- Tap and hold: select the highlighted menu row, enter/leave tempo editing, or return from score view to the part menu. While editing tempo, tap increases BPM and double tap decreases it.
|
||||
|
||||
Settings has independent Metronome and Backing toggles. Either starts automatic playback when a part opens; both off enables manual reading. Backing plays the recorded count-in and held ending. Metronome clicks stop at the written three-bar Ending section; page timing continues through the hold. Hold exits at any time.
|
||||
|
||||
Keep the two metronome samples under `package/assets/sounds/`. Put song recordings under `package/assets/backing/`, named `<normalized_song_id>_<bpm>.wav`. Supply separate files at 60, 70, 80, 90, 100, 110 and 120 BPM, each with one bar of count-in, the complete eight-bar intro plus five body passes, and its three-bar held ending plus decay (171 written bars for the current songs). Rebuild/package after adding recordings. Backing tempo choices include only tempos supplied for every song; the current package has 120 BPM for both songs.
|
||||
|
||||
+210
-79
@@ -9,9 +9,9 @@ Product Vamp follows the Modulus product layout used by the khodo repos:
|
||||
- `include/vamp_protocol` and `src/vamp_protocol`: shared route and page-command contracts used by both devices.
|
||||
- `cmake/pico.cmake` and `cmake/zero.cmake`: device-specific build definitions selected by the root `CMakeLists.txt`.
|
||||
- `include/vamp_style.hpp` and `src/vamp_style.cpp`: shared visual palette. `include/vamp_pico/artwork.hpp` defines the Pico coverage-image and sprite interfaces; fixed artwork is generated in the build directory.
|
||||
- `data`: authored MusicXML for performance songs and accompaniment rhythms, plus the generator regression summary.
|
||||
- `generator`: build-time Python rhythm planning, part generation, guitar placement, engraving, audio compilation, Pico artwork, and catalog construction.
|
||||
- `package`: generic bundle inputs, scripts, config, static font assets, and device install files.
|
||||
- `data`: original songs, paired training solos, the frozen solo model, and harmonic/accompaniment policies. Expected-output fixtures live under `tests/`.
|
||||
- `generator`: build-time Python source analysis, independent role generation, authored solo reuse, learned prediction, guitar placement, engraving, recording validation, Pico artwork, and catalog construction.
|
||||
- `package`: generic bundle inputs, scripts, config, fonts, metronome samples and backing recordings, and device install files.
|
||||
|
||||
## Zero Runtime
|
||||
|
||||
@@ -21,53 +21,59 @@ The Zero process can run headless for local/API quick checks or with Luma for th
|
||||
|
||||
The API is plain HTTP on the private AP:
|
||||
|
||||
- `GET /api/status`
|
||||
- `GET /api/health`
|
||||
- `GET /api/remote/display`
|
||||
- `GET /api/remote/title`
|
||||
- `POST /api/remote/title` (registered title image ID)
|
||||
- `POST /api/remote/heartbeat`
|
||||
- `POST /api/remote/next`
|
||||
- `POST /api/remote/previous`
|
||||
- `POST /api/remote/select`
|
||||
|
||||
There is no browser remote, HTTP font route, or full-catalog status dump. `control` owns serialized device actions; direct menu actions carry the displayed input revision and catalog identity so intervening remote navigation invalidates them. Pico display responses include only focused-item/settings values and the selected title artwork ID.
|
||||
|
||||
Page commands use `/api/remote/next` and `/api/remote/previous`; the old `/api/page/*` routes are removed.
|
||||
|
||||
The AP setup pins NetworkManager to 2.4 GHz channel 6 with WPA2/RSN and CCMP ciphers so the Pico W can join using `CYW43_AUTH_WPA2_AES_PSK`.
|
||||
|
||||
On Raspberry Pi OS Lite, the installed display service owns `tty1`, conflicts with `getty@tty1.service`, and starts the Zero container through `product-vamp-start-zero`. The wrapper switches to the display VT when `chvt` is available and runs `vamp-zero` inside the container through `setsid --wait --ctty` with `/dev/tty1` as stdin, giving raylib's DRM backend a real virtual terminal while keeping Docker attached to the long-running display process. SSH remains the normal admin path and `tty2` is enabled as the fallback local console.
|
||||
On Raspberry Pi OS Lite, the installed display service owns `tty1`, conflicts with `getty@tty1.service`, and starts the Zero container through `product_vamp_start_zero`. The wrapper switches to the display VT when `chvt` is available and runs `vamp_zero` inside the container through `setsid --wait --ctty` with `/dev/tty1` as stdin, giving raylib's DRM backend a real virtual terminal while keeping Docker attached to the long-running display process. SSH remains the normal admin path and `tty2` is enabled as the fallback local console.
|
||||
|
||||
At startup the Zero validates the packaged `catalog.db` application identifier and required table structure, opens it read-only through Noto, and loads menu metadata. It never creates or migrates a database, scans score JSON, or repairs metadata. The main menu contains Songs, Playback, Metronome, and Tempo. Song -> Part -> Score navigation offers Acoustic, Electric, and Vocal without key selection. Musical interpretation, spacing, beaming, ties, accidentals, and pagination happen on the build host. The Zero displays engraved PNGs and retains at most two page textures.
|
||||
At startup the Zero validates the packaged `catalog.db` application identifier and required table structure, opens it read-only through Noto, and loads menu metadata. It never creates or migrates a database, scans score JSON, or repairs metadata. The main menu contains Performance and Settings. Settings holds Backing, Metronome, Solos, and Tempo; its values apply for the current session. Song -> Part -> Score navigation offers Acoustic, Electric, and Vocal without key selection. Musical interpretation, spacing, beaming, ties, accidentals, and pagination happen on the build host. The Zero displays engraved PNGs and retains at most two page textures.
|
||||
|
||||
Runtime catalogs contain immutable metadata shared by navigation, the HTTP service, and the UI. Song groups reference canonical records by index. SQLite retains complete bundles, while cached measure/page counts let menu queries avoid reading musical JSON. Python constructs the complete database in one transaction before deployment; metadata and embedded JSON are published together after an integrity check. The single `songs` table uses strict column types, primary-key and path uniqueness constraints, and JSON validity checks. Menu rows are ordered by title, composer, part, and ID with binary collation, using the matching `songs_menu` index; C++ groups the ordered rows in one pass without sorting them again. Noto provides read-only connections, bound score lookups, application-ID checks, and quick integrity checks. Product-specific schema and asset-path validation remain in the application. There are no custom rows, runtime imports, metadata-repair triggers, or persisted page-state tables. Selecting a score loads only that bundle asynchronously, discarding stale results after navigation; the view keeps at most two page textures.
|
||||
Runtime catalogs contain immutable metadata shared by navigation, the HTTP service, and the UI. Song groups reference canonical records by index. SQLite retains complete bundles, while cached measure/page counts let menu queries avoid reading musical JSON. Python constructs the complete database in one transaction before deployment; metadata and embedded JSON are published together after an integrity check. The `songs` table includes a required integer `solos_enabled` flag (0 or 1), matching the boolean in music metadata. Catalog generation and startup validate paired variants for arranged guitar parts and a single shared Vocal. This schema requires rebuilt assets and updated Zero/Pico software; runtime migration is not supported. The `songs` table uses strict column types, primary-key and path uniqueness constraints, and JSON validity checks. Menu rows are ordered by title, composer, part, and ID with binary collation, using the matching `songs_menu` index; C++ groups the ordered rows in one pass without sorting them again. Noto provides read-only connections, bound score lookups, application-ID checks, and quick integrity checks. Product-specific schema and asset-path validation remain in the application. There are no custom rows, runtime imports, metadata-repair triggers, or persisted page-state tables. Selecting a score loads only that bundle asynchronously, discarding stale results after navigation; the view keeps at most two page textures.
|
||||
|
||||
`--once` (also `runtime.exit_after_startup`) is a headless readiness check: it checks database integrity and validates the catalog and referenced page assets, checks runtime-directory writes and the configured server bind, and exits without opening audio/display devices or publishing a readiness heartbeat. Page checks include containment, checksums, CPU-only PNG decoding, and exact 976x484 dimensions. The configured heartbeat destination must be absent or a regular file, never a directory, symlink, or special file. Runtime writes and readiness probes use exclusive sibling temporary files; readiness leaves an existing heartbeat unchanged and removes its probes. `--health-check` instead probes the running service's read-only `/api/health` endpoint using the configured timeout. A stopped/unresponsive service or an invalid response fails the check; it does not create or repair files. `--check-config` remains configuration-only.
|
||||
|
||||
Pico networking progresses without blocking touch sampling. Navigation commands use a bounded 16-entry FIFO ahead of background status polls; a full queue reports busy. Commands are not automatically retried because a timed-out request may already have executed. Background polls wait one second after completion before trying again.
|
||||
|
||||
Zero and Pico share one gesture state machine: a second release within 220 ms of the first release produces previous, a hold of at least 700 ms produces select once, and other taps produce next. A late second release preserves both single taps; holding consumes a pending first tap. Zero schedules pending-tap deadlines without polling and discards canceled or obsolete timer callbacks.
|
||||
The Zero menus use direct taps: release on a row to select it, tap switches to toggle them, and use the tempo minus/plus buttons to adjust BPM. Drags, canceled touches, multiple fingers, and stale menu actions do not activate items. Back clears tempo editing; returning to Settings restores the last setting's focus. Long song lists have previous/next focus buttons.
|
||||
|
||||
In score view, Zero and Pico share one gesture state machine: a second release within 220 ms of the first release produces previous, a hold of at least 700 ms produces select once, and other taps produce next. A late second release preserves both single taps; holding consumes a pending first tap. Zero schedules pending-tap deadlines without polling and discards canceled or obsolete timer callbacks.
|
||||
|
||||
Score loading uses a dedicated single-worker executor for SQLite reads and JSON parsing. Completion returns to the control executor. The loader retains one in-flight request, coalesces pending selections, and discards stale results, keeping database work off HTTP and playback polling.
|
||||
|
||||
## Score Generation
|
||||
|
||||
The build runs `python3 -m generator` against `data/` and writes build-only assets under the CMake binary tree. Every song produces acoustic, electric, and vocal parts in its authored musical key. Source counts are discovered, not fixed in code. Generator-only optional chord markers are consumed before publishing.
|
||||
The build runs `./modulus.py python -m generator` against `data/` and writes build-only assets under the CMake binary tree. Every song produces acoustic, electric, and vocal parts in its authored musical key. Source counts are discovered, not fixed in code. Generator-only optional chord markers are consumed before publishing.
|
||||
|
||||
Songs live directly in `data/songs/`. Each source produces acoustic, electric, and vocal parts under `songs/`, with matching page directories. Adding, renaming, or removing a source requires no registry edit. Regeneration replaces the output tree and catalog. The two current songs generate six parts.
|
||||
Songs live directly in `data/songs/`. Each source produces acoustic, electric, and vocal parts under `songs/`, with matching page directories. Adding, renaming, or removing a source requires no registry edit. Regeneration replaces the output tree and catalog. Each song generates five bundles: the usual three parts and acoustic/electric `_improv` alternatives. The two current songs generate ten bundles. Solos defaults to On at each app start; Off selects the improvisation guitar variants while Vocal is shared. Part menus retain three rows, using the selected variant’s normal and playback page counts. Pico status includes `solos=0/1`.
|
||||
|
||||
The pipeline is Soundslice/MuseScore -> uncompressed `.xml` -> musical model and rhythm plans -> part generation -> semantic JSON, audio, engraved pages, and Pico title artwork -> packaged SQLite catalog and assets. Export MusicXML 3.1 or 4.0, `score-partwise`, with one part and one staff. The musical model retains independent voices and per-tone durations/ties. Packaged music describes each generated part, not an archival copy of the XML.
|
||||
The pipeline is Soundslice/MuseScore -> uncompressed `.xml` -> musical model and rhythm plans -> part generation -> semantic JSON, supplied WAVs, engraved pages, and Pico title artwork -> packaged SQLite catalog and assets. Export MusicXML 3.1 or 4.0, `score-partwise`, with one part and one staff. The musical model retains independent voices and per-tone durations/ties. Packaged music describes each generated part, not an archival copy of the XML.
|
||||
|
||||
### Rhythm Sources
|
||||
### Musical Data
|
||||
|
||||
`data/rhythms/<meter>/<series>/` is an active build input for accompaniment, using meter directories `2-4`, `3-4`, `4-4`, and `5-4`. Series `1` and `2` each contain `4^N` four-digit numbered XML files for an N/4 meter: 16 in 2/4, 64 in 3/4, 256 in 4/4, and 1,024 in 5/4. Series `3` adds 2, 18, 118, and 680 files respectively, for 3,538 files across all three series. Numbering starts at `0001.xml` in every directory. All three series participate in accompaniment selection. Snippets do not create menu entries and their XML is not deployed.
|
||||
Generator dependencies run from pure musical values and source analysis toward composition, assembly, and publication. `model` contains primitive values; `validation` checks score documents; `score` contains pure score operations; and `score_io` owns bundle/file validation. `source` owns canonical source identity and immutable source events. `arrange.form.FormPlan` supplies source-derived sections, ownership windows, and pickup stops to both accompaniment and role assembly.
|
||||
|
||||
- Series `1` uses two measures. Read the file number minus one as `2*N` binary digits, most significant first: `0` is a quarter rest and `1` is a C5 quarter note.
|
||||
- Series `2` uses one measure. Read the file number minus one as `N` base-4 digits, most significant first: `0` is a quarter note, `1` a quarter rest, `2` two eighth notes, and `3` an eighth rest followed by an eighth note.
|
||||
- Series `3` uses one measure, extending the series `2` beat patterns with half notes/rests, dotted-half notes/rests, and whole notes/rests. Blocks start on quarter-note beat boundaries and must fill the measure exactly. Each pattern includes at least one long-value block, so existing series `2` patterns are not duplicated. Files follow lexicographic block order: quarter note, quarter rest, two eighth notes, eighth rest plus eighth note, half note, half rest, dotted-half note, dotted-half rest, whole note, whole rest. Whole notes do not fit in 2/4 or 3/4; no events cross barlines.
|
||||
- All pitched notes are C5, with a Vocal part, treble clef, C major, and tempo 120. Measures without eighths use divisions 4; measures containing eighths use divisions 8. Consecutive pitched eighths beam together, interrupted by rests, longer notes, and barlines. In 4/4, beams also break at the half-bar; the other meters use whole-measure groups. Isolated eighth notes have no beam.
|
||||
`composition` generates one role from an explicit immutable `vocabulary.CompositionContext`; `production` schedules typed worker requests and publishes the assembled parts. Lower musical functions receive that context explicitly. The scoped vocabulary API remains available for standalone callers and tests. Cached vocabulary loads return owned copies so one caller cannot alter another caller's resources.
|
||||
|
||||
`generator.rhythm.load_library()` parses the library once per asset generation. Immutable snippets retain exact event onsets, durations, written values, rests, beams, and continuations. Their placeholder pitches and tempo do not transpose chords or select playback BPM. A snippet must contain one or two complete sequential bars in one supported meter and voice, without grace notes, tuplets, time modifications, tremolo, or meter changes.
|
||||
Role cache identities include the transitive generator imports of the composition entrypoint. Engraving cache identities similarly include renderer dependencies. Cache identities never seed musical choices. `cache` provides shared content identity and staged-file publication mechanics, while role, PNG, and PDF adapters retain their own validation. `engraving.worker` owns rendering and its bounded image cache; `engraving.pipeline` groups and schedules work. `performance` contains pure timing contracts, and `audio_assets` validates and copies supplied recordings.
|
||||
|
||||
`generator.accompaniment` selects a two-bar motif, either a complete two-bar snippet or a pair of one-bar snippets, and realizes a four-bar `A, B, A, B'` cycle. The fourth bar varies one beat when a suitable candidate exists. The cycle repeats through the section, restarting at section or meter boundaries; a final partial cycle uses only the required bars. The immutable plan has separate `acoustic_bass`, `acoustic_upper`, and `electric` lanes. Density targets are one bass attack per two quarter-note beats, one upper-chord attack per beat, and one electric attack per two beats. These are scoring targets, not per-measure limits: electric aims for about two attacks in 4/4, with metrical scaling and phrase variation. Harmonic coverage and pulse support take priority for acoustic, while electric favors responses around melody and acoustic attacks. Silent electric bars are allowed. Simultaneous bass and upper attacks are allowed, as are collisions with the melody. Source identity breaks ties deterministically; selection does not enumerate every pair of one-bar snippets or introduce randomness. Long values compete normally, without a series preference or duration quota.
|
||||
The reviewed output contract is checked by `tests.test_output_contract` for complete synthetic role scores, including learned solos, and by `python -m tests.asset_contract <generated-assets-directory>` for every non-diagnostic asset. CTest runs the asset check against the normal build output. Musical output, JSON/catalog serialization, PNGs, and PDFs must remain unchanged during structural refactors; diagnostic text and cache identities may change.
|
||||
|
||||
Pickups use the corresponding tail of a full-meter rhythm bar. Harmonic state carries across bars until changed or canceled by N.C.; a snippet attack sounds only when a chord is active. A held generated accompaniment chord stops before a different harmony or N.C., leaving silence until the next selected attack. Electric notes have no fixed duration cap: half, dotted-half, and whole notes sustain until their planned end or a musical boundary. Snippet tie continuations remain silent. Shared duration spelling shortens a clipped binary span requiring ties to one conventional note followed by rests; nonbinary boundaries retain exact rational timing. Melody attacks influence selection but do not directly delete acoustic attacks. Missing rhythm material, unsupported accompaniment meters, and mid-measure meter changes produce errors. The broader import and engraving model still accepts the meters described below.
|
||||
`data/songs/` contains authoritative source scores. `data/training/manifest.json` pairs each authored solo with a source and a slot (1 or 2), and declares its pitch convention. Both slots train **one pooled model**. Slot 1 maps to acoustic playback and slot 2 to electric playback; slot and instrument names are not model features. The four XML files retain their notes, harmony, timing, ties, rests, Autumn Leaves pickup and All of Me's full-bar opening. Explanatory labels such as `Lead in`, `b9` and `6` were removed; they were not model features. Written chord extensions remain intact.
|
||||
|
||||
`data/models/solo.json` is an explicitly trained, versioned statistical model. Its short-context counts, rhythm and register statistics are learned from the paired examples. Provenance records input hashes and the training version. This is supervised use of the supplied solos, not independence from them and not a neural network pretrained on an external corpus.
|
||||
|
||||
`data/composition/` contains shared guitar/difficulty policy, sparse accompaniment figures and explicit harmonic-treatment validation rules. The exhaustive rhythm/interval catalogs, 21-pattern scale catalog, fixed maps, old solo grammar and handwritten phrase scorer have been removed. The renderer can still display existing scale annotations as part of its compatible score schema; new solos do not create them.
|
||||
|
||||
### MusicXML Contract
|
||||
|
||||
@@ -97,17 +103,19 @@ Standard MusicXML kinds and explicit degrees remain authoritative. For Soundslic
|
||||
|
||||
Musical genres and player-style presets are removed. There is no default genre, alias table, generated `style` metadata, or genre selection. The strict importer rejects every obsolete `vamp:style` miscellaneous-field hint, including an empty value, instead of discarding it. The XML writer does not emit that field. Keys, modes, keyless notation, and local changes remain preserved; there is no transposition reference or `vamp:tonic` property. Visual styling, font attributes, engraving `Style`, presentation fingerprints, and ordinary `<bar-style>` notation are unrelated and remain supported.
|
||||
|
||||
Parenthesized chord symbols mark optional turnarounds, including Soundslice's text-only `(Fm7)` and `(Bb7)` exports. Alternatively, place staff text `vamp:optional-chord` at the same onset as exactly one harmony; this text may be hidden. Earlier arrangement sections retain those chords and their parentheses; the final ending omits them. The normalized harmony stores `parenthesized` display metadata separately from the generator-only `chord_optional` flag. Orphaned/duplicate markers and unknown `vamp:` properties are errors; consumed directives never enter runtime JSON.
|
||||
Parenthesized chord symbols mark optional turnarounds, including Soundslice's text-only `(Fm7)` and `(Bb7)` exports. Alternatively, place staff text `vamp:optional-chord` at the same onset as exactly one harmony; this text may be hidden. Earlier arrangement sections retain those chords and their parentheses; the final vocal pass omits them. The normalized harmony stores `parenthesized` display metadata separately from the generator-only `chord_optional` flag. Orphaned/duplicate markers and unknown `vamp:` properties are errors; consumed directives never enter runtime JSON.
|
||||
|
||||
### Linear Reading Order
|
||||
|
||||
There is no repeat analyzer, expansion pass, or repeat/ending engraver. Performance retains the seven-section arranger, writing every section explicitly onto successive pages; neither display nor playback jumps backward.
|
||||
There is no repeat analyzer, expansion pass, or repeat/ending engraver. Performance writes an eight-bar intro and five full passes (vocal, guitar melody, acoustic solo, electric solo, vocal), followed by three held ending measures, explicitly onto successive pages; neither display nor playback jumps backward.
|
||||
|
||||
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.
|
||||
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 readable, spaced filename titles 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.
|
||||
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 171 arrangement bars: the eight-bar intro, five 32-bar passes, and three written held-ending measures.
|
||||
|
||||
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.
|
||||
Improvisation assembly reuses the independent accompaniment and melody roles and fills each source-defined solo window with regular beat slashes. The complete pickup allocation also becomes slashes, including rests within that allocation; music before a partial pickup and subsequent melody handoffs are preserved. Slash events carry no pitches or fret positions, and render in both the staff and TAB. This does not rerun solo composition or change backing recordings, measure numbering, harmony, or performance duration. Both variants receive normal/playback pages and build-only printable PDFs.
|
||||
|
||||
Ordinary ties still link adjacent matching tones across measures and systems. Tuplets, independent voices, local staff changes, and manual page navigation are unchanged. The recording’s three-bar sustain tail has no added score section or metronome clicks.
|
||||
|
||||
### Runtime Schema
|
||||
|
||||
@@ -115,7 +123,7 @@ A newly generated bundle has three top-level fields:
|
||||
|
||||
- `music`: metadata and a single staff containing measures, independent voice lanes, timed harmonies/attributes/tempos, instruments, tuplets, and octave spans.
|
||||
- `presentation`: engraver name, style checksum, fixed width/height, ordered relative PNG paths with SHA-256 checksums, and the `title_image` content identifier for Pico artwork.
|
||||
- `playback`: availability, exact performed beat duration/events, shared PCM sample descriptors, and a generated release envelope. Unavailable interpretations carry a reason instead of an approximate timeline.
|
||||
- `performance`: normalized source song ID, exact score duration, count-in length and metronome beat/accent positions. Each presentation page additionally stores `first_measure`, `measure_count`, `start_beat` and `end_beat`, derived from its actual engraved systems. These ranges must cover every measure once, without gaps.
|
||||
|
||||
There are no authored-key/selected-key metadata pairs or musical genre/style fields. The score's key metadata describes its actual music, and menus display that key alongside its part name. Instrument normalization transforms explicit key cancellations with the same interval as the notes. Presentation's `style_sha256` identifies visual engraving settings and fonts, not a musical genre.
|
||||
|
||||
@@ -123,97 +131,220 @@ Measure durations, event onsets/durations, harmony offsets, span times, and pitc
|
||||
|
||||
### Shared Part Generation
|
||||
|
||||
`parts.py` owns shared source validation, melody-copying, measure construction, rests, and solo slashes. `rhythm.py` loads snippets; `accompaniment.py` plans phrase cycles, realizes independent bass/upper voices or electric chord attacks, and owns shared tie-free duration spelling. Before guitar placement, `acoustic.py` shortens generated bass/upper attacks so they cannot overlap and groups them into continuous harmony spans; afterward it combines them into one notated voice. `guitar.py` selects one complete grip per acoustic span using its shared candidate generation and placement search. `melody.py` identifies long tied melody runs and splits them at harmony changes before guitar placement. `arrange/generate.py` supplies the existing seven-section song form. `pitch.py` resolves source instrument transposition and the shared written-octave convention. There is no generic twelve-key transposer.
|
||||
`production.generate_role` accepts immutable canonical source analysis, a role, production data and settings. Canonical musical identity excludes display titles and filenames. Accompaniment, source melody, vocals and each solo have their own caches and can run in independent worker processes. No role reads another generated role. Assembly applies source-defined participation windows, including guitar-role exclusions and returning pickups, without changing another role's decisions.
|
||||
|
||||
Generated accompaniment has no ties. Acoustic attacks release at the earliest of their planned end, the next combined bass/upper attack, or the barline. Simultaneous bass/upper attacks use the shorter planned duration for the entire grip. If a binary duration would need ties, it shortens to the longest conventional single note that fits, followed by silence; no extra attack or artificial tuplet is introduced. Rhythm-snippet continuations are silent, and the planner does not count them as acoustic coverage. After placement, consolidation preserves the prepared timing and TAB assignments, combines simultaneous tones under one stem, and writes rests only for complete silence. A silent full bar has one measure rest. Old lane stem directions and beam groups are removed in favor of single-voice engraving. Authored melody ties, solo slashes, and electric melody harmonization remain separate from this build-time accompaniment policy.
|
||||
`parts.py` retains exact source notes, rests, lyrics and ties. `melody.py` harmonizes eligible sustained electric source-melody notes using their actual chord, preserving source pitches while splitting and reattacking held notes at harmony changes. Guitar notation applies its octave transposition once. `comping.Canonical` independently chooses compact chord voicings and rhythm from the source form and shared policy, then reuses that part at the same source-form position throughout the arrangement. There is no generated-solo response or reuse of a generated melody's grips. Sparse bars and deliberate releases are legal.
|
||||
|
||||
Acoustic accompaniment uses the planned foundation. Electric accompaniment sections in songs use the response plan; song electric melody sections are raised one octave before harmonization. Song sections remain Rhythm Lead-in, Vocal Melody, Guitar Melody, Acoustic Solo, Electric Solo, Vocal Melody, and Ending, with each part retaining its melody, accompaniment, rest, or solo-slash role. Optional turnarounds are removed before planning the final ending. The generated phrase cycles contain explicit events in reading order, not runtime loops or repeat signs.
|
||||
Electric accompaniment shares the electric melody's `guitar.chord_positions(..., profile='electric')` families: strings 1–3 or 1–4, with a preference for four-note grips. `chord_families.py` classifies actual shapes as drop-two, close-position, compact-open, compact-doubled or three-note shells, ranked by versioned policy. Electric melody chords must also use strings 1–3 or 1–4, always including string 1. The exact source pitch is retained even when a legal supporting chord tone must sound above it. Within the selected span tier, the melody's lowest feasible string number and foreground position precede chord size. A primary grip with the melody on string 2 beats a four-fret grip with it on string 1. Short monophonic melody notes and solos use the shared hand-window placement objective. A harmonization with no legal chord retains the existing reported single-note fallback. These electric roles use the same written chord requirements without taking responsibility for the slash bass. Acoustic accompaniment uses `acoustic_voicing.candidates`: exactly one bass on string 5/6 and one upper note each on strings 4/3/2. Without an explicit slash bass or inversion, its bass is a root or written fifth (including an altered fifth); plain major/minor triads also permit the third. Plain triads retain all three chord members. Explicit bass/inversion requirements override this choice.
|
||||
|
||||
Each source is parsed, validated, and normalized once for all three parts. The batch generator computes shared accompaniment plans before building those parts. Public `arrange_document` and `generate_performance_scores` calls require a keyword `rhythms` argument holding a `generator.rhythm.Library`; internal part builders receive precomputed plans. Builders treat the prepared source and plans as read-only and own their generated notes and spans. Source-path checks reject colliding song slugs before writing parts: for example, `one-two.xml` and `one_two.xml` would both produce `one-two-acoustic.json` and cannot coexist.
|
||||
Acoustic families are transposable degree orders for triads, tetrads and extended chords, with root/fifth alternatives on both bass strings. Slots resolve to the written third/suspension, sixth/seventh, fifth and extension, including alterations and omissions. They are not per-song grip tables. Only harmonically and physically valid realizations enter selection; unavailable bass/inversion variants are discarded. Coverage checks exercise 35 common qualities in all 12 keys. Four-fret fallbacks support previously unavailable acoustic Bb9, BbM9, Bb7#9 and Bb6add9; for example, Bb9 uses fifth-bass frets 8/10/7/9 on strings 5/4/3/2. Acoustic Bbm9 and Bm9 still have no grip meeting all constraints. Unsupported chords fail with source measure, beat and chord rather than silently omitting defining tones.
|
||||
|
||||
All three parts use octave-transposing notation: written notes sound one octave lower. This includes the vocal part for the singer's range. Unmarked source notation uses that convention by default. Vocal melodies retain their written pitches and octave numbers. Song electric melody sections add twelve semitones to both written and sounding pitch; the guitar's octave-transposing convention still applies. Written C4 sounds C3 (A-string fret 3), and written C#6 sounds C#5, within the 1-20 fret range. Generated accompaniment is notated using the same convention.
|
||||
The active voicing selector compares complete paths with dynamic programming over concrete grips. The leading cost minimizes four-fret grip selections: every span of one, two or three positions has zero cost in this tier. Existing criteria then apply within the tier. Electric accompaniment prioritizes chord size and shared family rank; acoustic prefers declared degree-order families on either bass string. Both then minimize hand-window travel, the passage maximum hand position, secondary finger/grip effort, missing optional tones and sounding-register distance, in that order. Stable role-specific keys resolve equal costs. Since accompaniment transitions have travel costs but no hard travel cutoff, four-fret candidates are safely removed from a span when any primary grip exists; this exact dominance reduction keeps the repeat search small. Electric placement retains distinct alternatives where future held/tied notes can constrain feasibility, and does not charge tied continuations as fresh grip choices. The remaining acoustic placement helper uses the same leading fallback tier.
|
||||
|
||||
`pitch.py` resolves explicit MusicXML instrument transposition once before part generation. Explicit zero transposition is also authoritative. Octave-clef exports already encode sounding pitch in their note values, so they do not receive another implicit octave subtraction. Generated parts carry an explicit `transpose.octave_change: -1`; guitar placement and audio read that shared state. Internal concert-pitch normalization and written-pitch conversion cancel for ordinary source notation except for the intentional song electric melody octave increase. There is no automatic octave fitting, vocal-specific range shift, or key transposition.
|
||||
Silent spans retain the preceding hand position. A continuous accompaniment repeat includes the last-to-first transition. Source-harmony variants, such as relocated pickup harmony, are solved between fixed canonical neighbors without mutating a shared previous-grip state; request order cannot change them. Per-span composition reports include candidate counts, selected family, bass/string family availability, selected positions, bass degree and movement, plus `fret_span`, `span_group` and `span_candidates` (primary/fallback counts before dominance reduction). These are diagnostic sidecar fields; the score/runtime format is unchanged.
|
||||
|
||||
`fretboard.py` owns standard tuning E2 A2 D3 G3 B3 E4, fret positions, chord coverage, and pitch spelling. Both placement systems use frets 1-20 inclusive, exclude open strings, and share a maximum fret difference of three. `guitar.py` handles electric voicing and exact/held melody placement. Exact melody tones are never dropped or replaced, and sustained/tied tones retain their assignments. `acoustic_voicing.py` instead searches four named voices: a bass on string 5 or 6, and one voice on each of strings 4, 3, and 2. Acoustic assignments also require at least one occupied string at fret 12 or below. These are hard constraints: a failed voicing is not widened or reduced to two upper strings. Any defined chord tone, including thirds, sevenths, and extensions, can be the acoustic bass. Explicit slash basses and inversions override these choices; the bass remains the lowest sounding pitch.
|
||||
`comping_rhythm.py` selects recurring source-only figures from version 6 of `composition/accompaniment.json`. The normal acoustic cycle has two two-bar slots; electric has four. Each template and anticipation mode is evaluated at every occurrence of its slot before retrieval limits apply. Up to eight diverse candidates per slot enter bounded complete-cycle comparison. Distinct slots differ in attack/duration relationships, not just IDs, bass/upper assignments or anticipation flags. Repetition is not penalized. The source melody and harmonic rhythm affect selection; title, iteration, generated solo and tempo do not. `groove_cycles` reports slot identities, anticipation modes, aggregate cost, compared cycles and any reduction caused by vocabulary or form length.
|
||||
|
||||
Shared `ChordRequirements` separate mandatory pitch classes, allowed pitch classes, root-or-fifth alternatives, and bass constraints. Every complete generated guitar grip must contain the root, the fifth, or both, with no preference for the root itself. This rule applies equally to acoustic accompaniment, electric accompaniment, and electric melody chords, not isolated bass/upper attacks or unharmonized melody notes. The fifth follows the chord's actual degree, including diminished or augmented fifths. Explicitly removed degrees are never restored, and a harmony removing both root and fifth cannot generate a guitar chord. Defining thirds/suspensions, sixths/sevenths, alterations, and required extensions remain mandatory; an altered fifth cannot be omitted merely because the root is present.
|
||||
Meter-specific full patterns declare `meter` and, for 5/4, `grouping: [3, 2]` or `[2, 3]`; `meter: partial` marks the bounded one-bar pickup vocabulary. The loader checks nominal lengths, grouping, quarter/eighth arithmetic, electric lane overlap and distinct acoustic/electric onset patterns. Acoustic lane overlap is checked after automatic assignment. Each role has 24 distinct attack/duration figures per selectable pool: 4/4 (11 families), 3/4 (12 families), and each 5/4 grouping (12 families). The 4/4 pool removes one duplicate acoustic figure, develops another previously duplicated answer, and adds three electric variants. Patterns are independently authored from general principles, with research URLs and provenance in the resource, rather than transcriptions. The counts describe available choices, not required musical activity.
|
||||
|
||||
Acoustic spans follow the harmony timeline, including changes during silence. Within an iteration, barlines, rests, and repeated identical harmonies do not reset the voicing. Changed chord kinds, roots, degrees, basses, or inversions start a new span; N.C. and non-accompaniment passages end a span. A formal section label starts a new iteration and independent search, even if the harmony repeats. There is no last-to-first transition or shared song-wide chord dictionary. Rests and no-chord passages add no assignments; the next sounding harmony within the iteration is measured from the preceding assignment. A span with attacks is placed once as a complete four-voice assignment, then each bass or upper attack receives its subset; simultaneous attacks receive all four strings. Every iteration is planned before pitches are materialized, so failure leaves the document unchanged. Existing staged asset publication preserves previously published assets. Iteration and search state are build-only and add no runtime fields.
|
||||
`grouping_for` is a pure source-only decision. It honors written 3+2 or 2+3, otherwise compares actual chord changes at the secondary boundary, then melody entrances following at least an eighth-note rest, then other melody attacks; equal evidence defaults to 3+2. An unchanged chord marking is not a change. The selection stays fixed through a continuous meter section, and each role derives it independently from the same source. Fills cannot borrow another grouping. No accents or playback swing changes are inferred. `groove_cycles` additionally reports grouping, its evidence and the eligible pattern count. Equal-duration compound meters (such as 6/8) do not borrow the 3/4 vocabulary; unsupported comping meters fail explicitly.
|
||||
|
||||
Electric chord blocks use strings 1-3 or 1-4, including string 1. Rootless voicings containing the fifth and octave doublings are ordinary candidates. An unaltered fifth may be omitted when the root is present, and unaltered intermediate ninth/eleventh extensions may be omitted. Exact melody pitches, including non-chord tones, remain unchanged.
|
||||
Accompaniment dependency keys and choice streams include only full-pattern meters and partial lengths present in that source, plus the applicable instrument policy. Adding unused-meter patterns therefore does not reseed an existing song; unrelated role policies remain excluded. Research prose is excluded from musical seeds. This schema migration changes the accompaniment choice-key domain once; it does not promise identical previous 4/4 tie-break winners. Source melodies, registered solos, notation format and playback count-in are unchanged.
|
||||
|
||||
`melody.py` treats the full tied duration as one note when testing whether it exceeds one quarter-note beat. Qualifying notes receive a chord at their initial attack and at each subsequent changed harmony, even if a resulting fragment is less than one beat. Changed harmonies break ties and reattack the melody; repeated identical harmonies do not. N.C. releases the added voices while preserving the melody's sustain. Added tones through unchanged harmony retain their own ties. These melody rules are independent of accompaniment duration spelling. If no valid chord fits, the exact melody remains with a diagnostic; it is not octave-wrapped or omitted.
|
||||
The cycle begins at the first full source-body measure. A partial-form entry first fits the incoming harmony, then slices the sounded figure instead of restarting it; this prevents a previously clipped chord hold from reappearing as a new attack. An odd final bar uses the appropriate half-pattern. Meter changes restart a compatible cycle. Unsupported durations fail explicitly, and limited vocabularies report a shorter cycle. Optional final-harmony changes rebind the same selected pattern. Canonical grips are fixed wherever the chord and interval start remain unchanged, so a new turnaround cannot move neighboring unaffected voicings.
|
||||
|
||||
Electric placement uses the ordered `VoicingCost` components: string shortfall from four, melody covered, number of tones above the melody, combined effort, and missing optional pitch classes. These costs accumulate over the whole passage, so effort cannot outweigh the earlier electric musical priorities. Melody height compares sounding pitch; unison doubling does not cover it. Electric accompaniment uses the same ranking without the melody-height terms. The acoustic solver does not use this ranking.
|
||||
Fills replace only a two-bar figure's ending bar, using a same-family variation that improves the existing source-fit objective. Eligible boundaries are source section endings, form endings, or a melody breath of at least one quarter-note beat at the block end. Carried events from the opening bar are protected. The largest improvements are retained with an eight-measure minimum separation around the whole cyclic form, equally for both roles; no fill quota applies. Fills do not change cycle phase and recur at identical source positions. Reports record the base slot, selected fill, source index and reason.
|
||||
|
||||
Acoustic candidates are generated from chord-tone positions on the four voices, not a predefined shape dictionary or the electric candidate search. All four positions must satisfy the shared harmonic requirements and acoustic fret constraints, even when only bass or upper notes attack. Triads whose effective degrees are exactly 1, 3, and 5 prefer complete three-tone coverage when feasible; `harmony.is_triad()` examines authored chord semantics rather than voicing size. Doubling chord tones can fill four strings without inventing additional harmony. Authored omissions are never restored. Seventh and extended chords keep their existing coverage rules. Candidate sets are cached by harmonic requirements and triad completeness; no physical-reach filter, fallback widening, or position-center pruning is applied.
|
||||
Normal acoustic patterns use 1–3 attack positions per full bar. Their event layer is `acoustic`; the instrument's versioned `attack_assignment` policy is `combined_except_eighth_pairs`. Authored bass/upper decisions are replaced by chronological assignment across the complete canonical source form: ordinary attacks are combined, while adjacent half-beat-separated attacks in the same effective harmony become bass then upper. Pairs do not overlap; an odd leftover attack is combined. Bar and two-bar pattern boundaries do not reset pairing. Source-defined entries, handoffs and chorus boundaries do; the same boundary set applies at repeated form positions. Chord changes break pairs, but repeated identical chord labels do not. An anticipation uses its upcoming harmonic region for this decision. First attacks of new harmonic spans still include bass (`first_attack: bass_per_harmony`).
|
||||
|
||||
`electric.py` links song accompaniment attacks to harmonized melody events using authored source positions, not displayed measure numbers or a song-wide chord dictionary. References stay inside the corresponding source harmony span and must match its structured chord. Within a span, an attack uses the latest available melody grip at or before its source position, or the first later grip if it precedes all melody chords. This allows different shapes for the same chord in different passages. After guitar placement and melody tie resolution, linked stabs copy the actual melody pitches and TAB positions while retaining their own IDs, timing, and written durations; melody ties and markings are not copied. A melody that remains a single note provides no grip. Passages without a matching playable three- or four-string melody chord, including altered endings without a corresponding reference, retain independently generated electric shapes. No reference metadata reaches runtime JSON.
|
||||
Quarter/eighth articulations and explicitly authored sustains release at the earliest of their intended end, the next acoustic attack in either lane, or a required harmonic/handoff boundary. Bass cannot ring beneath a later upper attack, nor can an upper chord ring beneath a later bass attack. Combined attacks have one shared release. Shortening that would strand an anticipation first rebinds it to current harmony and recomputes assignment. `acoustic_context` and `realize_acoustic_form` implement the shared source-form contract used by cycle comparison, fill selection and final source-harmony variants, before grip placement or notation splitting. Raw candidates retain authored releases so a changed neighboring attack can be evaluated afresh. Fills must improve the resolved whole-form cost without changing events outside their editable second bar. Concrete block caches include their assigned event signature: a neighboring chord change can break a pair even when this block's own harmony is unchanged. The renderer verifies actual sounding lane events against the selected assignment. The completed validator follows sounding tie chains and rejects any overlap between distinct acoustic attacks, even across different lanes. Placement validates all simultaneously sounding strings, fret spans and anchors. Bass and upper events merge into one notated part. Uninterrupted cross-bar holds and the combined three-bar closing sustain remain intact.
|
||||
|
||||
Acoustic transition cost is the sum of absolute fret changes for all four named voices, plus one when the bass switches between strings 5 and 6. For example, bass string 5 fret 7 to string 6 fret 9 costs three steps, not just a string-change charge. An unchanged assignment costs zero. Exact dynamic programming minimizes total travel per iteration; equal travel costs prefer fewer missing optional chord tones, followed by stable position ordering. The starting assignment has no position cost. Harmony spans, not rhythmic attacks, determine the transitions. There are no acoustic register, distinct-fret, span, or physical-reach scoring terms. The three-fret limit and fret-12 anchor are eligibility checks, not preferences.
|
||||
Electric normally uses 0–2 attack positions per bar, with stabs, sustains and space. Direct events release at changed harmony. An eligible acoustic/electric template can anticipate a chord by half a beat when it continues into that chord; the grip comes from the upcoming harmony and releases by its following change. Acoustic anticipations also include bass on the new chord's first attack. Missing harmony remains silent. Protected participation limits retain the chosen figure, shortening only its affected releases and recording exceptions. Cross-bar sounding notes become ties, never automatic merging of repeated attacks.
|
||||
|
||||
Electric effort remains `highest_fret + 2 * max(0, highest_fret - 12) + 2 * max(0, distinct_frets - 1) + 3 * fret_span`, with Manhattan movement between doubled fret/string position centers. Its small-grid distance transform and exact melody constraints are unchanged. Unharmonized melody placement retains `movement + 2 * max(0, highest_fret - 12) + fret_span`, and pure tie continuations add no fresh shape or movement cost. The acoustic Autumn Leaves lead-in can use Em7b5/G at `6:3, 4:2, 3:3, 2:3` followed by A7b9/G at `6:3, 4:2, 3:3, 2:2`, moving only the second string by one fret. This is a regression example, not a prescribed chord shape; generated bass inversions do not rewrite source chord labels.
|
||||
All six production roles receive reuse audits. Musical comparisons include rests, pitch durations, ties and TAB while ignoring regenerated event IDs and global measure numbers. Source-defined pickup/participation changes and effective final-turnaround harmony are reported separately. The final three-bar hold remains instrumental.
|
||||
|
||||
There is no finger assignment, barre logic, or predefined chord-shape dictionary. These are proximity and fretboard-feasibility constraints, not a guarantee of comfortable fingering. Nonstandard tuning, capos, microtonal frets, and unplayable passages fail with source/part/event context; there is no slash fallback for a failed chord. Existing assets remain untouched after failure.
|
||||
Named activity, melody-support, harmonic-support and articulation contributions evaluate complete figures. Cycle selection aggregates them over all occurrences, retaining family diversity before the final bounded comparison. `groove_cycles.retrieval_cost` is the isolated-figure estimate used for shortlisting. `cost` is the actual selected base cycle's cost before optional fills; acoustic cycles are assigned and released together before this comparison. Acoustic `final_cost` reports the complete source-form result after fills and any meter-section joins. The selected score is never overwritten by a post-selection report. Reports identify the base slot, realized pattern, projected events, continuations, anticipation target times and source-context exceptions. Tempo affects metadata/cache identity but never musical choice. This release correction leaves musical data and role choice seeds unchanged; code fingerprints invalidate stale concrete caches.
|
||||
|
||||
### Playback Boundary
|
||||
Acoustic events use temporary bass/upper notation lanes for projection; then `acoustic.combine` converts their sounding intervals to one rhythmic voice before assembly. It splits notes at attack/release boundaries and ties only continuing pitches; repeated attacks stay separate. Staff and TAB share the result, with no competing rests or opposing layer stems. This preserves exact sounding durations instead of truncating overlaps. The older truncating `prepare` helper serves only the noncanonical legacy/test path. The product build audits canonical accompaniment reuse across arrangement iterations, allowing only source-derived changes in harmony, pickups and role handoffs. The `.roles` sidecars report pattern IDs, exact projected layer events, continuations, anticipation targets and exceptions. Their `selection_cost` records the complete figure’s local contributions, repeated on each projected bar for context; the cycle selector aggregates these by the number of measures in each occurrence, without an anti-repetition transition cost. Accompaniment dependency keys contain only that instrument's policy; electric melody consumes the shared electric voicing families. Solos retain their existing learned source-melody/harmony conditioning and registered exact performances.
|
||||
|
||||
All musical compilation and tone synthesis run in Python (`generator/playback.py`). Each transformed score receives a sorted timeline of independent tone events with rational quarter-note `onset` and `end` positions. Ties become one continuous attack. Rests and spacers remain silence, including trailing silence. Harmony labels are not auto-accompaniment: only pitches actually present in the selected arrangement sound. Cue notes are silent, hidden pitched notes sound, and pitchless rhythm slashes are silent.
|
||||
Acoustic sequential-release verification on October 7, 2026: `python3 modulus.py python -m unittest discover -s tests -p 'test_*.py'` passed 451 tests in 162.318 seconds. Coverage includes release in both lane directions, cross-bar pairing in 3/4, 4/4 and both 5/4 groupings, expired and surviving anticipations, complete-cycle ranking versus isolated retrieval, fills protecting neighboring assignments, malformed overlap before/after notation merging, canonical reuse, cold/warm caches and parallel roles. `python3 modulus.py format --check` passed. `python3 modulus.py build --target x86_64_gcc12_debug --target arm_64_gcc12_release` passed both generator/asset checks; 394 score JSON/PNG artifacts match across targets. Acoustic composition took 2.1 seconds for All of Me and 2.2 seconds for Autumn Leaves; native assets finished in 31 seconds and the cached ARM build in 11 seconds. Compared with the saved pre-change output, all attack pitches, onsets and TAB positions are identical: only 67 Autumn Leaves bass releases are shorter. Its arrangement measure 3 now contains bass [0, 1/2), upper chord [1/2, 3/2), and combined chord [2, 3), without ties. All of Me and the ten other-role documents are unchanged. Canonical reuse audits pass, and both three-bar instrumental endings retain one twelve-beat attack. Both acoustic opening pages were visually inspected; no audio audition was performed. The comparison baseline remains outside the repository under `/tmp/vamp-sequential-acoustic-yt_irkfd`.
|
||||
|
||||
The `soft-struck` profile generates shared mono 48 kHz PCM16 WAVs with a short attack/decay and a seamless sustain loop, plus a shared 50 ms release envelope. Exact sounding pitches, including supported microtones, determine samples. Instrument transposition is applied once from the generated musical model, without role- or filename-dependent octave heuristics. Samples are shared across scores and voices by content identity. There are no SoundFonts, bundled instrument samples, oscillators, or MusicXML parsing at runtime.
|
||||
Monophonic solos use strings 1–6 and frets 1–12, with no open strings or acoustic/electric string restrictions. Placement compares complete paths through legal positions, accounting for hand-region changes, travel time and string crossings. Ties retain their position. Chord placement retains its separate policy: frets 1–20, a sounding anchor on frets 1–12, primary spans of up to three consecutive positions and fallback spans of exactly four. The span is inclusive: 7–9 is three positions, 7–10 is four. Five positions are always invalid. The anchor must remain sounding, including after shorter notes release. Acoustic accompaniment additionally keeps its bass within frets 1–12 and requires an independent anchor in its upper three-note cluster, preserving the option of separate bass/upper attacks. These costs approximate physical feasibility; they do not assign fingers or guarantee comfortable playing.
|
||||
|
||||
Grace groups honor explicit steal-time-previous/following or make-time; unspecified groups share 25 percent of the following event. Conflicting grace modes, trailing grace groups, unsupported unpitched sound, tied measured tremolo, and incompatible paired tremolo make playback explicitly unavailable while retaining the notation. Measured tremolo uses written subdivision and tuplet ratios. The tone range is 20-18,000 Hz. Asset validation checks containment, SHA-256, PCM format/length, loop endpoints, envelope shape, event ordering, references, and rational timing. Generation remains transactional if validation fails.
|
||||
Guitar placement shares the `hand-window-2` model in `generator/hand_position.py`. **Both chords and single notes** may occupy any legal four-consecutive-fret window. Position 7 covers frets 7–10; a chord occupying only frets 7–8 can use positions 5, 6 or 7, according to its neighbors. Position is the bottom of the selected window, not necessarily an occupied fret. This is an approximate positioning model, not an anatomical finger assignment. Sounded-note limits remain binding: a solo note cannot exceed fret 12 merely because its hand window extends farther.
|
||||
|
||||
When grace groups steal from both ends of one donor, their adjustments accumulate against its original duration. Consuming the entire donor or any chord tone makes playback unavailable rather than overlapping the grace group and principal note.
|
||||
After the existing compact-span, chord-family and electric-melody foreground priorities, selection minimizes **total absolute hand-position travel**, then the **maximum hand position across the complete path**. Finger changes and string crossings within the same window contribute zero travel. Only after those two criteria tie do relative finger adjustment, string crossings, grip complexity and time pressure decide between paths. Acoustic bass is one voice even across strings 5 and 6; upper voices follow their strings. Added/removed chord voices contribute one secondary adjustment each. Solo secondary effort uses elapsed time from the preceding attack, not a tied notation fragment. A genuine continuation retains pitch, TAB and hand position without another movement charge.
|
||||
|
||||
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.
|
||||
A low fret is not rewarded independently at every event. All three voicing policies retain only `register_weight` (default 1), weighting distance from their sounding-register center after travel, peak position, secondary effort and optional-tone coverage. Centers remain 53 for acoustic accompaniment and 60 for electric accompaniment/melody. Exact melody and solo pitches are never transposed to meet these preferences. Canonical accompaniment selection includes source-form repeat joins and solves source-derived variations between actual selected neighboring grips **and hand positions**. Unchanged intervals retain both. The instrumental ending receives the last accompaniment grip and selected window; it does not infer the hand from the lowest occupied fret.
|
||||
|
||||
`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.
|
||||
The dynamic programs retain concrete grips/held strings, selected hand position and distinct earlier peaks. A later high position can equalize two earlier peaks and expose a subordinate tie-break, so retaining only one lowest-peak history is unsafe. Strictly worse primary travel at an identical endpoint/hand can still be discarded. Equal fret averages do not imply equal placement states. Stable ordering resolves equal complete costs.
|
||||
|
||||
`--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.
|
||||
Role reports expose `total_travel`, `shift_count`, `largest_shift`, `peak_position` and actual selected hand positions. Accompaniment costs separate travel from secondary `effort`; individual spans separate hand shift, finger adjustment, string changes, grip effort and register tie-breaking. Repeat travel is assigned to the first canonical span. Solo reports call the time-weighted subordinate value `secondary_effort`. Cache fingerprints include placement code while accompaniment rhythm seeds remain unchanged. Every role remains independently composed; the solo model, pitches and rhythms are unchanged.
|
||||
|
||||
### Solo Scale Maps
|
||||
The pre-window baseline is preserved outside production inputs under `/tmp/vamp-hand-window-baseline-dwh4anzh`. Verification compares sounded content and rhythms separately from TAB, and checks all electric melody chords for strings 1–3 or 1–4. Independent exhaustive test oracles cover complete grip/window paths, fixed neighbors, cyclic repeats and single-note paths; tests also cover a greedy-position trap, future peak equalization, zero-cost within-window string changes and tied-event invariance.
|
||||
|
||||
`generator/scales/` loads the 21 MusicXML patterns in `data/scales` once per build. Each file spells an ascending C-centered octave; seven distinct degrees define its intervals, including spellings such as B double-flat. The seven files in each family must be rotations of that family's first mode. The library transposes patterns internally, not song notes, and searches the 36 distinct pitch collections formed by the three families in twelve roots. No assignments or overrides are stored in song XML.
|
||||
Hand-window verification on October 8, 2026: `python3 modulus.py python -m unittest discover -s tests -p 'test_*.py'` passed 472 tests in 100.928 seconds. The subsequent asset build exposed a print-footer overlap: Letter pagination had reserved a nominal font height instead of the actual page-number outline. The new tight-page regression reproduced that failure, and `python3 modulus.py python -m unittest tests.test_printing` passed all eight tests after measured footer bounds replaced the estimate. Content and collision audits remain enabled.
|
||||
|
||||
The analyzer requires a declared tonic and mode in the song's MusicXML key. A one-flat signature with `<mode>minor</mode>` means D minor, not F major. Exact rational harmony offsets are read after arrangement and pickup overlap handling. Full chord semantics, explicit extensions and alterations, degree omissions, and slash basses constrain compatibility; reduced guitar grips never remove these requirements. Existing chord syntax is unchanged: `7alt` shorthand is still rejected, while explicit alterations are supported.
|
||||
`python3 modulus.py build --target x86_64_gcc12_debug --target arm_64_gcc12_release` then passed both asset checks and produced six complete PDFs (42 pages). Native regeneration took 33 seconds with cached roles and a cold engraving namespace; ARM reused the assets in six seconds. Before the footer repair, uncached composition completed in five seconds for all twelve roles, with solos taking about 0.5 seconds each. `python3 modulus.py test --target x86_64_gcc12_debug` passed in 13.27 seconds. All 400 score JSON, normal/playback PNG, report and PDF files match between native and ARM.
|
||||
|
||||
Selection first preserves every required pitch. Recognized ii-V pairs, resolving dominants, and leading-tone diminished resolutions establish local destinations; the declared key provides the default context elsewhere. Minor cadences prefer harmonic minor and major cadences prefer the destination's major collection when compatible. The arrival chord is evaluated afresh, so a plain D-minor tonic need not retain a preceding cadence's raised seventh. Among equally appropriate choices, a deterministic dynamic program minimizes collection changes, then contextual pitch differences. Equivalent modes share a pitch collection rather than forcing new boundaries. This is a conservative harmonic heuristic, not a claim that ambiguous harmony has only one interpretation.
|
||||
Against the saved pre-window baseline, all four solos retain exactly the same pitches, timing and ties; vocal documents and accompaniment rhythm reports remain identical. Electric melody retains its exact source notes and timing; supporting chord tones may change to enforce string 1. All 46 All of Me and 33 Autumn Leaves electric melody chord fragments now use strings 1–3 or 1–4; previously 13 and three fragments respectively omitted string 1. Short monophonic melody remains permissible.
|
||||
|
||||
Only the soloing part receives compact `scale_spans`, with absolute rational start/end offsets, labels, and matched status. `N.C.` and solo boundaries stop annotations. Accompaniment, melody, pitches, TAB, and playback are unchanged; no solo notes are synthesized. Original melody notes are not constraints on these slash-only solo passages. Unmatched chords print `No exact scale match` and emit a source/measure/beat warning without changing the harmony. Invalid scale data or missing tonal metadata instead fail generation before publication.
|
||||
| Solo | Total hand travel, before → after | Number of shifts, before → after | Peak hand position, before → after |
|
||||
|---|---:|---:|---:|
|
||||
| All of Me acoustic | 131 → 12 | 87 → 10 | 9 → 7 |
|
||||
| All of Me electric | 128 → 9 | 87 → 7 | 9 → 7 |
|
||||
| Autumn Leaves acoustic | 141 → 2 | 85 → 2 | 9 → 3 |
|
||||
| Autumn Leaves electric | 106 → 6 | 77 → 6 | 9 → 5 |
|
||||
|
||||
Scale labels appear above chord symbols at collection changes and system starts. Detailed parent collections, source and arranged positions, chord-root modes, degrees, chord-tone targets, and selection reasons are written to `generated-assets/analysis/<song>.txt`. These reports are published transactionally with the build output but excluded from both installation and Docker runtime assets. The C++ runtime only displays the generated pages; it does not load the scale library or run harmonic analysis.
|
||||
Travel is the sum of absolute window-position changes, measured in frets. An independent dynamic program over every legal string/fret/window confirmed that each new solo achieves the minimum raw travel for its unchanged sounding notes. This verifies the placement objective, not anatomical comfort or musical preference. The canonical accompaniment cycles now travel 10/14 frets for All of Me/Autumn Leaves acoustic, and 0/6 for electric; they retain source-based repeat consistency. No listening assessment was performed.
|
||||
|
||||
The sibling Modulus Conan helper was repaired to call `modulus.build_context.build_context`, replacing the removed `modulus.cli.build_context` API. Its Python suite passed 132 tests with four existing skips. A locally exported and built Modulus package passed `python3 modulus.py configure --target x86_64_gcc12_release`, followed by the release build and runtime test above. The offline attempt first identified missing cached Ligo sources; allowing ordinary Conan source retrieval completed configuration. An unwritable generated engraving cache was also restored to the build user's ownership. The Modulus source fix must be published through that repository's normal release process before remote CI using `modulus/latest` receives it; no remote package was published during this repair.
|
||||
|
||||
Recurring-groove verification on October 6, 2026: the full Python regression command passed 423 tests in 149.85 seconds. After the final partial-entry grip fix and one additional real-evaluator fill test, the focused accompaniment/arrangement command passed 59 tests in 21.64 seconds. The native test target passed in 30.58 seconds. The initial native rebuild took 42 seconds, including 7 seconds for independently generated roles and 33.62 seconds of engraving; accompaniment roles took 0.8–1.6 seconds each. The following ARM build reused all role/score caches and took 11 seconds. All four solo documents, both electric melodies and both vocals exactly matched the prechange baseline; native/ARM score assets matched byte for byte. The chosen base cycles differed by song and retained all two/four requested slots. Autumn Leaves selected the authored overlapping-quarter acoustic pattern. No optional fill improved these production winners, so no fills were forced; independently authored tests verify real source-fit selection of a fill. An acoustic score/TAB page was visually checked for overlap ties in a single part. Recordings were unchanged and no listening assessment was performed. Baseline snapshots stayed under `/tmp/`.
|
||||
|
||||
Shared-preference and bass-first verification on October 6, 2026: `python3 modulus.py python -m unittest discover -s tests -p 'test_*.py'` passed 408 tests in 61.35 seconds, and the native test target passed all 124 cases. Both product builds passed asset checks; 139 native/ARM score and page files matched byte for byte. All 273 acoustic measures containing new attacks started with bass, including 69 delayed entrances. Tied carries did not trigger new attacks. Both solos, vocals, electric accompaniment rhythms, and electric foreground melody pitches/timing/TAB matched the saved baseline exactly. Some All of Me melody support chords changed; Autumn Leaves' complete electric melody document did not. All of Me's canonical electric accompaniment mean fret dropped from 7.26 to 4.13 and movement cost from 57 to 48; Autumn Leaves stayed at 2.95 and 46. Recordings were unchanged. These are score checks and page inspections, not a listening assessment.
|
||||
|
||||
With no concurrent build, isolated cold role generation measured 0.56–0.57 seconds for acoustic accompaniment, 0.35–0.37 for electric accompaniment, and 0.26–0.29 for electric melody; cache hits took 0.02–0.04 seconds and matched clean regeneration for both songs. The normal two-worker native asset stage took about 14 seconds (4 composing, 9 engraving, 1 other); ARM reused the caches in about 4 seconds. Application compilation is separate from these asset-stage timings.
|
||||
|
||||
Lower-position verification on October 6, 2026: all 400 Python tests and 124 native test cases passed. Native and ARM builds passed asset checks; all 139 score/page files matched byte for byte. Against the saved production output, acoustic rhythms and all other five role documents were identical for both songs. Mean fret across canonical active acoustic grips changed from 8.90 to 4.50 in Autumn Leaves and 5.19 to 4.29 in All of Me; movement costs rose from 144 to 190 and 128 to 140 respectively. In the requested six-chord passage, five suggested grips won; Em7b5 instead chose its valid fifth-bass shape on strings 6/4/3/2 at frets 6/5/7/5. Tests also verify that the complete suggested sequence beats the previous higher sequence with fixed neighbors, and that sufficiently costly travel can still retain a higher grip. These are score/selection facts, not an ear-based audition.
|
||||
|
||||
Isolated uncached acoustic role generation took 0.61–0.62 seconds per song, versus 0.56–0.58 seconds before this change; cache hits took about 0.048 seconds and matched clean output. With two composition and engraving workers, the native asset rebuild took approximately 11 seconds (4 composing, 6 engraving, 1 other); ARM reused caches and took approximately 6 seconds. These are individual local measurements, not a statistical benchmark. Supplied recordings remain byte-identical.
|
||||
|
||||
### Recording Playback and Page Timing
|
||||
|
||||
Vamp uses only supplied PCM16 WAVs. `package/assets/sounds/beat1.wav` and `beat2.wav` provide measure accents and ordinary beats. Backing files are `package/assets/backing/<normalized_source_id>_<bpm>.wav`. `generator/performance.py` checks containment, format, decoded length and checksums, then copies the recordings byte for byte into the staged output. A catalog `resources` row stores their paths, checksums, sample rates, channels, frame counts, song IDs and tempos. No note-event audio compiler, pitch synthesizer, release envelope or generated audition audio remains. Pitch mathematics remains for notation, TAB, composition and exact MusicXML comparisons.
|
||||
|
||||
Settings exposes `audio.backing_enabled`, `audio.metronome_enabled` and `audio.tempo_bpm`; both toggles default off and tempo defaults to 120. The fixed tempo set is 60 through 120 in steps of 10. Backing restricts it to the intersection available for all catalog songs. Turning it on snaps to the nearest available tempo, with ties going slower; an empty intersection makes it unavailable. Obsolete playback and configurable tempo-range settings are rejected. Recordings are never stretched or trimmed.
|
||||
|
||||
The existing recordings contain one bar of count-in, 168 main-form bars, three held bars and decay. `arrange/ending.py` now writes that existing tail as measures 169–171, without extending or transforming the recordings. Both accompaniment roles choose a valid closing voicing using their own outgoing position and hold it with ties; melody/solo roles are silent there and the vocal has three full rests. The chord is the final effective harmony after omitting optional turnarounds, including carried harmony. Missing/N.C. final harmony fails accompaniment generation explicitly. The original final bar is untouched.
|
||||
|
||||
Score timing includes `sustain_start`, an exact measure boundary, as well as the total written duration. Ending measures carry `ending_sustain`; Python and C++ validate a contiguous tail and consistent timing. Older scores without the new timing field retain their previous full-duration click behavior. Both toggles play the recorded count-in alone, then backing plus sample clicks until `sustain_start`. No clicks sound over the ending. Metronome-only supplies its own count-in and completes after the three silent held bars. Backing-only plays the complete file and decay. Both off enables manual navigation; hold exits and natural completion returns to the part menu. The final page remains visible through decay.
|
||||
|
||||
Preparation runs on a worker: checksums and samples are loaded before publishing a Sonus recording transport. Sonus streams backing audio through miniaudio’s background resource manager and mixes preloaded stereo clicks on the same rendered-frame clock. Callback work uses preallocated buffers, and resource retirement occurs on control threads. Stream failures stop progress and surface an error. Absolute rational beat positions are rounded to frames at 48 kHz once per position, avoiding accumulated rounding drift. The UI polls that audio clock for system and measure boundaries and Count-in/Playing/Sustain status; wall-clock timers never determine musical progress.
|
||||
|
||||
Page metadata comes from actual system pagination and is preserved and revalidated in engraving caches. `presentation.pages` partitions the music into normal two-system pages. `presentation.playback_pages` holds one view per system: that system and its successor, or a final single top system. Both reuse the same system breaks, horizontal geometry, and part-wide scale, fitted against every adjacent pair. Each descriptor carries system measure ranges, exact beat boundaries, and page-coordinate rectangles for its measure labels. Normal systems partition the score; overlapping playback views must match that canonical partition. Bundles missing playback metadata require regeneration.
|
||||
|
||||
Measure numbers are centered over their starting barlines (the staff’s left edge at system start), in a reserved lane above notation and below harmony/section labels. The display outlines the current label using the page texture’s letterbox transform; count-in, preparation, exit, and playback error clear it. Measure updates publish even when the line stays unchanged. Normal catalog page counts remain unchanged; the loader reads the separate playback count from bundle metadata. During automatic playback, navigation bounds, the header’s Line counter, and Pico’s page/pages fields refer to overlapping views. Manual browsing uses the normal sequence. The UI prepares the current and next page before playback starts and retains a two-texture cache. Session and catalog identities reject stale preparation, page updates and completion after cancellation. Missing or corrupt pages/audio leave a visible error and permit hold/back. `--once` validates packaged recording checksums and both normal and playback score pages without opening audio/display hardware.
|
||||
|
||||
### Authored Repertoire and Learned Solos
|
||||
|
||||
The production decision is explicit:
|
||||
|
||||
1. Look up the canonical source music and solo slot in the training manifest. A registered pair uses its authored solo **exactly**, with deterministic guitar placement and normal notation/export. This is library reuse, not a claim that a model reproduced it. An incompatible arrangement window, invalid tie, unsupported harmonic relationship or unplayable note fails rather than clipping, transposing or replacing it. Authored chromatic/color notes pass the same contextual harmonic validation as predictions; there is no authored exemption.
|
||||
2. For an unregistered pair, load the frozen pooled model and call `solo.composer.compose → decoder.Decoder → placement → validate → notation/export`. This path does not read authored notes or train during an ordinary build. `generate_role(..., settings={'predict': True})` explicitly exercises prediction even for a registered song.
|
||||
|
||||
The small conditional model backs off from up to four recent joint pitch/rhythm events through source-melody features, current/future chord quality, metrical phase and global evidence. Pitch relationships are relative; there are no song-name conditions or per-song prediction tables. All examples contribute to the same distribution. Source intervals, sounding state and chord-relative source pitches influence prediction. Register comes from pooled training evidence, not an acoustic/electric octave formula.
|
||||
|
||||
Prediction uses constrained autoregressive sampling with a stable seed derived from canonical musical source content, slot/role and relevant configuration. The two slots draw from the same learned distribution; the seed permits different interpretations without teaching separate instrument styles. It scores valid joint continuations by their learned likelihood, then draws deterministically from the normalized probabilities. This avoids the mostly-silent maximum-likelihood mode observed during testing. At most four deterministic attempts are allowed if a sample cannot finish or contains no sounding notes; this is not a beam search or a claim of global phrase optimization.
|
||||
|
||||
Binary durations and complete triplet groups remain exact. Contiguous silence is one event, matching training tokenization; the decoder cannot repeatedly concatenate rest tokens to invent a long silent passage. Selected holds survive barline notation splits. Generic chromatic approaches/enclosures include their exact target as complete validated actions. Their event score is identical to emitting the constituent events separately, and equivalent actions are deduplicated before sampling. The report's negative log likelihood is diagnostic, not a ranking of complete solos or a model of listener preference.
|
||||
|
||||
Fixed scale maps no longer constrain prediction. Brief ordinary movement uses the source key and written chord tones; chord quality, alterations, omissions and slash-bass semantics remain authoritative. Long nonchord events require a supported color or resolution relationship. Approaches resolve to their specified pitch and octave; anticipation validates the upcoming harmony. Missing harmony does not authorize arbitrary pitches. Search failure is explicit and never invokes the old composer.
|
||||
|
||||
`solo.recognition` identifies these relationships automatically in a complete sounded line, using the versioned policies and `solo.expressions` validator. It checks actual preparation, pitch/register, duration, future harmony and resolution; annotations, filenames, authored status and source IDs grant no permission. A bounded deterministic search finds mutually consistent coverage of exposed events, without changing notes. Malformed explicit contracts remain errors. Tied notation fragments are merged before harmonic classification. Unsupported notes, missing harmony, expired resolutions and exhausted recognition budgets fail explicitly. Users do not need to supply explanations or tags.
|
||||
|
||||
Prediction proposes stable and resolving colors, anticipated colors, delayed approaches with real space or intervening valid motion, and chromatic passing notes between valid endpoints, alongside the existing complete enclosures and connections. These are joint actions containing their required destinations. Disabling expressions removes these options. Prepared suspensions are recognized and validated but do not yet have a dedicated prediction action. The model still selects from its small learned distribution; validation establishes supported musical relationships, not aesthetic quality.
|
||||
|
||||
Training checks the complete source-form harmonic context. In the repeated performance form, an unlabeled pickup inherits the final source-form chord; an explicit pickup chord or `N.C.` takes precedence. This is the same arrangement context used for playback, not an invented first chord or a rule tied to either song name.
|
||||
|
||||
The model has only four examples from two songs. Its four-event context does not establish long-range thematic memory, nor does training prove transfer to another standard. Phrase report boundaries describe audible breaths after selection; they are not another composer or an assertion of phrase-wide theme planning. This initial implementation can still repeat local patterns or choose weak continuations on unfamiliar harmony. Exact authored playback and novel model output are reported separately.
|
||||
|
||||
Train explicitly:
|
||||
|
||||
```sh
|
||||
./modulus.py python -m generator.train --leave-one-song-out
|
||||
```
|
||||
|
||||
This writes the pooled model to `data/models/solo.json` and diagnostics to `build/training/report.json`. Omit `--leave-one-song-out` to train without held-out likelihood diagnostics. Ordinary asset builds never run training.
|
||||
|
||||
Register an additional pair and retrain without changing Python:
|
||||
|
||||
```sh
|
||||
./modulus.py python -m generator.train --add-source /path/to/new-song.xml --add-solo /path/to/new-song-solo1.xml --slot 1
|
||||
./modulus.py python -m generator.train --add-source data/songs/new-song.xml --add-solo /path/to/new-song-solo2.xml --slot 2
|
||||
```
|
||||
|
||||
Files are copied into `data/songs` and `data/training` without overwriting different contents. Validation checks the exact measure/harmony correspondence, contextual harmonic validity, guitar-written convention and fret range before publishing the manifest. An existing source without a registered slot uses model prediction for that slot. Use `--pitch-convention encoded` only for files whose own transposition describes sounding pitch. Updating existing examples means editing their XML/manifest deliberately and rerunning training. The report under `build/training/report.json` records automatically recognized harmonic treatments, teacher-forced likelihood and optional leave-one-song-out likelihood; none is a listening assessment or unassisted-generation accuracy.
|
||||
|
||||
Production input traces distinguish authored reuse from learned prediction. Caches include source, role, relevant data and code; authored cache keys include the selected XML's content and convention. Build and package inputs include the model, manifest and authored repertoire. Changes to another solo do not change an already registered part's notes. Updating the pooled model can legitimately change predictions for any unregistered part. CMake defaults to two composition processes (`VAMP_COMPOSITION_JOBS`, 1–16) and caches each role under `build/build_common/composition_cache`. Direct generator runs use `--composition-jobs` and opt into persistent caching with `--composition-cache`; single-role builds use `--cache-dir`.
|
||||
|
||||
Solos are published inside the arranged score JSON and engraved pages, without separate solo MusicXML exports or comparison manifests. Exact-repertoire tests compare generated sounding pitches, onsets, releases, repeated attacks, measure timing and silence directly with the authored XMLs. Tied notation fragments are merged into sounding events for this check, and generated TAB is checked against the guitar constraints. Training and authored reuse remain the explicitly permitted dependencies on the supplied music.
|
||||
|
||||
Migration inventory:
|
||||
|
||||
| Kept or added | Consumer and reason |
|
||||
| --- | --- |
|
||||
| `data/songs/` (two songs) | Normal source importer and immutable arrangement analysis. |
|
||||
| `data/training/` (four XMLs + manifest) | Explicit trainer and registered authored playback. All slots are pooled for learning. Annotation-only cleanup preserves the music and learned counts. |
|
||||
| `data/models/solo.json` | Frozen prediction model; reproducible by `generator.train`. |
|
||||
| `data/composition/{roles,harmony,lead_ins}.json` | Physical/difficulty settings and generic harmonic validity. Fixed-map permissions removed. |
|
||||
| `data/composition/accompaniment.json` | Version 3: independently authored per-instrument duration families, layer ranges, bounded retrieval and generic chord-degree/geometry families. Consumers: `comping_rhythm.py`, `comping.py`, `chord_families.py` and `guitar.py`. Migrates the v2 shared-duration schema; no parallel legacy data or reference-derived material. |
|
||||
| `generator/harmonic_time.py` | Exact chord/key spans retained from the removed scale subsystem. |
|
||||
| Solo event, expression, placement, notation and export helpers | Retained physical/timing safeguards shared by authored and predicted music. |
|
||||
|
||||
Removed: `data/{scales,sequences,rhythms}`, old `composition/solo.json` and mixed `rhythms.json`, catalog import/cache code, old solo construction/phrase/selection/scoring/sequence modules, unused accompaniment catalog planner, three evaluation-song excerpts, and tests specific to those retired algorithms. Shared importer, timing, guitar, playback, engraving, arrangement and independence tests remain, with new pooled-learning, registration and exact-repertoire tests. No `docs/` or `audition/` directory is required. Temporary comparisons and diagnostics belong under `/tmp/`; old comparison pages, diagnostic reports, formatter-debug scripts and the copied verification bundle have been removed from `build/`. Product builds, caches and toolchains remain. Desktop and ARM builds resolve Sonus through Conan; separate local Sonus installations and temporary CMake dependency overrides are unnecessary. Refresh both with `python3 modulus.py configure --update --target x86_64_gcc12_debug --target arm_64_gcc12_release` when dependency packages change. The obsolete playback-test assets are superseded by the current performance-test fixtures.
|
||||
|
||||
Verification on October 5, 2026: `unittest discover -s tests -p 'test_*.py'` passed 361 tests in 78.62 seconds. These include all four approved solos without annotations or authored-role privileges, source-form pickup context, invalid resolutions, passing endpoints, anticipated colors, tied-event partition invariance and active prediction construction. The normal six-part asset build passed `--check`, including playback, engraving, TAB and catalog validation. With two composition workers, newly generated solo results, cached accompaniment/melody and a warm engraving cache, it took 5.10 seconds; performance-part generation occupied 2.37 seconds. Each registered solo took 0.36–0.40 seconds. The subsequent `cmake --build build/build_x86_debug --target vamp_generated_assets` also passed. These measurements describe registered playback, not novel prediction; the disposable diagnostic reports have since been removed.
|
||||
|
||||
Voicing-only verification on October 6, 2026, before the rhythm update: the suite passed 363 tests in 120.66 seconds, including 11 new voicing tests. Exhaustive small cases verify that the movement selector beats greedy selection and includes repeat/neighbor boundaries. That change retained the prior accompaniment onset/duration/rest sequences; source melody, vocal and both solo role documents were unchanged. Its six-score production rebuild passed `--check` in 11.54 seconds with two composition and two engraving workers: 2.95 seconds generating parts and 8.19 seconds engraving, with two unchanged score cache hits. This checks timing, harmonic/physical constraints and rendering, not a claim of ergonomic comfort from listening.
|
||||
|
||||
Rhythm verification on October 6, 2026: `unittest discover -s tests -p 'test_*.py'` passed all 375 tests in 83.57 seconds. Coverage includes attack ranges, bass downbeats, mixed durations, harmonic-change budgets, overlapping voices, tied joins, 3/4 and 5/4, melody-conditioned rhythm costs, tempo invariance, canonical reuse, and serial/parallel role identity. A synthetic learned-model test also confirms that changing original melody rhythm or upcoming harmony changes solo duration probabilities with a fixed seed. Both songs' solo, electric melody and vocal role documents remain exactly equal to the saved pre-rhythm baseline; no model retraining was performed.
|
||||
|
||||
The ordinary six-score rebuild with `--check --composition-jobs 2 --jobs 2` passed in 13.39 seconds: 4.44 seconds generating parts and 8.48 seconds engraving. All role composition results were newly generated; the warm engraving namespace reused two unchanged vocal scores. The subsequent `cmake --build build/build_x86_debug --target vamp_generated_assets` passed with all role/score caches reused. Actual selected acoustic upper rhythms use one or two attacks in these songs; three-attack alternatives are available and tested but are not forced. All of Me electric has three zero-attack source/harmony contexts; Autumn Leaves electric uses one or two attacks. Neither song required a density exception. Reuse audits checked 103/62 acoustic/electric repeated bars for Autumn Leaves and 102/62 for All of Me, with only source-defined pickups and final-harmony exceptions. Sample acoustic notation/TAB pages were visually inspected. Supplied audio recordings remain unchanged; no ear-based audition of the new accompaniment was performed. Disposable logs, profiles and comparisons are under `/tmp/`, outside product assets.
|
||||
|
||||
Chord-family and unified-acoustic verification on October 6, 2026: `unittest discover -s tests -p 'test_*.py'` passed 386 tests in 81.67 seconds. New cases cover 35 chord qualities in three keys for both instruments, discarded bass variants and explicit unsupported combinations, the six suggested acoustic grips, highest feasible electric melody strings, scoped policy dependencies, and one-voice tie preservation including repeated attacks and cross-bar ties. Quarter/eighth acoustic attack durations and available consecutive-eighth patterns are tested. The acoustic sounding events in both complete arrangements contain only quarter/eighth durations, even where notation splits them into ties.
|
||||
|
||||
The full checked rebuild with two composition and two engraving workers took 13.76 seconds: 4.68 seconds for all parts and 8.63 seconds engraving. All role caches missed after the code change; two unchanged vocal engravings were reused. Serial composition-only generation into a disposable directory also passed in 5.58 seconds. The subsequent CMake asset build passed and reproduced every role document from warm caches. Both registered solos and vocal documents are exactly unchanged from the saved prechange baseline; the electric melody's original pitches/onsets/durations also match. Reuse audits retain the same 103/62 and 102/62 repeated-bar counts. Acoustic upper rhythms now select one to three attacks in Autumn Leaves and one or two in All of Me. Acoustic and electric melody pages were visually inspected; this is notation/constraint verification, not an ear-based audition. Only product artifacts and normal caches were written under `build/`; diagnostic logs and baseline comparisons remain under `/tmp/`.
|
||||
|
||||
Four-fret fallback verification on October 6, 2026: `unittest discover -s tests -p 'test_*.py'` passed 392 tests in 85.65 seconds. This includes primary-tier precedence over family, arbitrary movement savings and melody-string height; a complete held-note path that needs an earlier four-fret option; tied-fragment cost invariance; and anchor release checks. The first full run exposed one obsolete C5 rejection expectation, now replaced by a test verifying its legal four-fret voicings contain only C/G. Coverage tests check 35 qualities in 12 keys for each instrument: 418/420 acoustic contexts and 420/420 electric contexts have a legal grip. Acoustic Bbm9/Bm9 remain explicitly unsupported; this is measured coverage, not a guarantee for every written extension or slash chord.
|
||||
|
||||
The checked six-score rebuild with `--composition-jobs 2 --jobs 2` passed in 9.21 seconds (4.58 seconds composing all 12 roles, 3.90 seconds processing six cached engravings). All composition caches missed after the code change. Every resulting role document and accompaniment rhythm report exactly matches the saved baseline: current production chords already have primary grips, so none needed fallback substitutions. New sidecar span diagnostics identify the tiers and available candidates. The subsequent `cmake --build build/build_x86_debug --target vamp_generated_assets` passed with all role caches reused and identical per-role musical hashes. Acoustic and electric score/TAB pages were visually checked; supplied recordings are unchanged. Formatter and diff checks passed. Temporary verification files remain under `/tmp/`.
|
||||
|
||||
Earlier exact-repertoire verification confirmed all four authored solos: 137/141 attacks for All of Me and 121/115 for Autumn Leaves, with no pitch, onset, release or rest differences. All four also passed contextual harmony validation. Removing 69 explanatory annotations left the complete event streams and learned musical count tables identical to the pre-edit baseline; only model provenance hashes changed. This verifies authored reuse rather than learned reproduction. These checks now compare generated score data directly with the training inputs instead of producing standalone XML exports. No ear-based audition or claim of transfer quality was made.
|
||||
|
||||
Forced prediction, without reading the training XMLs, completed all four source/role combinations with valid harmony. These were composition-only runs on the training-source songs, not held-out transfer tests. Their notes intentionally differ from registered playback and were not published as replacements. The expanded treatment candidates initially took 99.03–120.33 seconds per role with one worker and no concrete-result cache. Removing repeated validation of identical resolution endpoints reduced the isolated All of Me acoustic check from 104.30 to 60.13 seconds, with an identical complete output hash. Six additional contexts retained all 32,566 ordered action candidates exactly. These expanded prediction choices remain slower than the earlier 21.81–27.16-second decoder; registered playback is unaffected. Training the pooled 2,860-context model took 0.57 seconds. Prediction remains the slower path, chiefly candidate construction and event-likelihood evaluation; further profiling is needed before expanding its choices again.
|
||||
|
||||
### Engraving Boundary
|
||||
|
||||
`generator/engraving/` is a custom Python engraver, not a wrapper around MuseScore or another notation engine. `generator.engraving.layout.layout_score(document, style, fonts)` produces immutable layout pages with exact source intervals, notation anchors and drawing primitives. `generator.engraving.raster.rasterize_page(page, fonts)` draws one page at four-times resolution and downsamples it. `generator.engraving.pipeline.engrave_tree(root, fonts)` is the asset-pipeline entry point. `fonts.Fonts`, `types.Style`, and `types.EngravingError` live in their respective engraving modules; page constants and `check_page` live in `validation`. Package initializers do not re-export these APIs. `generator/musicxml_writer.py` remains a round-trip/export utility and is not involved in engraving.
|
||||
|
||||
Engraving supports a bounded process pool (`VAMP_ENGRAVING_JOBS`, default 2) and a build-only content-addressed page cache (`VAMP_ENGRAVING_CACHE_DIR`, default `build/build_common/engraving-cache`). Keys include the complete musical document, engraving implementation, fonts/metadata, style, Python and rendering dependency versions. Playback is deliberately excluded from page keys and is always rebuilt independently. Cache hits are copied into the current staged output and checked for checksums, PNG decoding, dimensions, blank pages and clipped ink. Missing or corrupt entries are regenerated. All semantic and asset validation, database construction and transactional publication remain in place. The cache is not installed and can be deleted at any time when builds are idle. CI saves it after the native build and reuses it for ARM packaging; generation prints stage timing and per-worker progress instead of remaining silent during engraving.
|
||||
Engraving supports a bounded process pool (`VAMP_ENGRAVING_JOBS`, default 2) and a build-only content-addressed page cache (`VAMP_ENGRAVING_CACHE_DIR`, default `build/build_common/engraving_cache`). Keys include the complete musical document, engraving implementation, fonts/metadata, style, Python and rendering dependency versions. Page timing is included in cached manifests and checked against exact measure boundaries; corrupt coverage is rebuilt. Recording files are copied independently of the page cache. Cache hits are copied into the current staged output and checked for checksums, PNG decoding, dimensions, blank pages and clipped ink. Missing or corrupt entries are regenerated. All semantic and asset validation, database construction and transactional publication remain in place. The cache is not installed and can be deleted at any time when builds are idle. CI saves it after the native build and reuses it for ARM packaging; generation prints stage timing and per-worker progress instead of remaining silent during engraving.
|
||||
|
||||
Reuse has two levels. A full-score hit restores complete page images for the same musical document and metadata. A notation-body group shares system layout and body pixels among documents with identical staff content, while retaining each document's title, subtitle, pagination, footer, and complete semantic bundle. Body keys include the rendering context and actual page-band geometry; incompatible placement cannot reuse those pixels. Each header/footer is composed separately, and pages whose drawing primitives cannot be separated safely use full-page rasterization. This reuse never merges score IDs, catalog records, or authored music.
|
||||
|
||||
`notation.py` interprets staff state, exact pitch positions and shared accidental state; `notes.py` and `attributes.py` construct symbols; `spans.py` handles beams, ties, tuplets, octave shifts and lyric continuations; `layout.py` handles spacing and pagination. `fonts.py` reads bundled OTF outlines and SMuFL metadata, caching metrics and outlines for one generation run. `raster.py` uses FontTools, aggdraw and Pillow only as low-level font and drawing libraries. All dependencies are pinned in `generator/requirements.txt` and remain build-only. Standard glyph names and their upstream notice are vendored alongside the fonts; no system music fonts are consulted.
|
||||
`notation.py` interprets staff state, exact pitch positions and shared accidental state; `notes.py` and `attributes.py` construct symbols; `spans.py` handles beams, ties, tuplets, octave shifts and lyric continuations; `layout.py` handles spacing and pagination. `fonts.py` reads bundled OTF outlines and SMuFL metadata, caching metrics and outlines for one generation run. `raster.py` uses FontTools, aggdraw and Pillow only as low-level font and drawing libraries. Modulus owns the pinned optional `assets` dependency group. Configure prepares its build-only environment; CMake and `./modulus.py python` use the exported runner to import shared build utilities without shadowing the Modulus package. Standard glyph names and their upstream notice are vendored alongside the fonts; no system music fonts are consulted.
|
||||
|
||||
Voices retain separate stems and collision offsets; chord tones retain their own written durations and per-tone ties. Pitched and percussion material use their own staff positions. Unknown exact microtonal alterations use a rational semitone annotation rather than a rounded accidental; an unavailable explicit SMuFL glyph is an error. The broader model/engraver supports this notation, while automatic guitar generation enforces the source contracts above.
|
||||
|
||||
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. 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.
|
||||
Normal pages use two music systems; only an odd final system occupies a row alone. Playback pages use overlapping adjacent pairs and always finish with the last system alone on top. 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 adjacent pair, including transition pages. 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 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.
|
||||
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, performance metadata, 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.
|
||||
|
||||
Pages are 976x484 pixels with 10-pixel guitar or 12-pixel vocal staff spacing, 28-pixel horizontal margins and 18-pixel vertical margins. The two acoustic rest lanes sit closer to the staff, with collision offsets preserving their separation. Dense measures continue across systems/pages; sustained notes become exact, tied presentation fragments and rests become exact rest fragments. These fragments never change the semantic JSON. Irreducible simultaneous content that cannot fit a fixed page fails contextually rather than being clipped or shrunk. Blank pages, incorrect dimensions, and ink reaching the page edge are rejected. Runtime letterboxing preserves aspect ratio. Luma's `load_texture_uncached()` lets Product Vamp retain at most two textures without a hidden strong asset-cache reference. The UI reports missing/corrupt assets instead of falling back to the removed renderer. Runtime validates bundle metadata, paths, dimensions, and page checksums; the build validates musical semantics.
|
||||
Pages are 976x484 pixels with nominal 10-pixel guitar or 12-pixel vocal staff spacing, 28-pixel horizontal margins and 18-pixel vertical margins. The two acoustic rest lanes sit closer to the staff, with collision offsets preserving their separation. Systems and pages contain complete measures; tied notes and notation spans may continue across their boundaries. Presentation fragments preserve exact timing and never change the semantic JSON. A measure that cannot fit at readable spacing fails with source and measure context; the uniform part-wide scaling described above fits pairs of complete systems vertically. Blank pages, incorrect dimensions, and ink reaching the page edge are rejected. Runtime letterboxing preserves aspect ratio. Luma's `load_texture_uncached()` lets Product Vamp retain at most two textures without a hidden strong asset-cache reference. The UI reports missing/corrupt assets instead of falling back to the removed renderer. Runtime validates bundle metadata, paths, dimensions, and page checksums; the build validates musical semantics.
|
||||
|
||||
### Printable Parts
|
||||
|
||||
`generator.printing.generate_tree` runs after screen engraving inside the normal asset staging transaction. It reads each completed song/part's musical document, not its screen PNGs or overlapping playback views, and writes `print/<score-stem>.pdf`. Every arranged measure and the instrumental ending appear once in order. Acoustic/electric parts retain standard notation and TAB; vocal parts retain lyrics and rests. No music, runtime bundle fields or catalog rows are changed. Both CMake installation and runtime image copying exclude the `print` directory.
|
||||
|
||||
Print layout uses portrait US Letter (612 × 792 PDF points), a minimum half-inch clear margin, and fixed five-point guitar/six-point vocal staff spacing. It reserves the actual overhang of centered measure numbers inside the margin. Complete systems fill the available page height with consistent notation size; the final page keeps natural vertical spacing. Headers identify the tune, composer and instrument; printed page numbers are independent of device pagination. The existing musical/fragment/TAB audits remain active, with variable systems per page allowed only by the print caller. Screen audits still require two systems except the odd final system.
|
||||
|
||||
The shared primitive renderer accepts explicit colors and output scale while retaining unchanged screen defaults. Print draws black on white directly at 2550 × 3300 pixels (300 DPI), then writes grayscale image pages through Pillow's PDF writer at quality 95. This is a raster PDF, not searchable/vector notation. One page is rendered and appended at a time to bound image memory. The pinned Pillow parser checks page count, Letter media boxes and image resolution/color; tests decode the embedded JPEGs and verify clear margins. No new Python package is required: Modulus's existing `assets` group owns Pillow, fonttools and aggdraw. Timestamps and output-path metadata are omitted for byte-reproducible PDFs.
|
||||
|
||||
With `--engraving-cache`, print results use a separate `print/<print-renderer>/<score-key>/` namespace. Keys cover score content, print settings, fonts, renderer source and dependency versions. Cached PDFs have checked hashes and page metadata; missing or corrupt entries regenerate. Native and ARM builds share the cache locally. This print namespace is separate from the screen-only CI cache snapshot. Output PDFs are validated before the build publishes; failure preserves the previous complete asset directory. Stale PDFs disappear when source parts disappear. Temporary print files live only in build/cache staging.
|
||||
|
||||
Print rollout verification: `python3 modulus.py python -m unittest discover -s tests -p 'test_*.py'` passed 458 tests; the seven `tests.test_printing` tests were rerun after the final footer-margin adjustment. `python3 modulus.py build --target x86_64_gcc12_debug --target arm_64_gcc12_release` passed with byte-identical PDFs on both targets. All of Me has 10/8/5 acoustic/electric/vocal pages and Autumn Leaves has 9/7/4, totaling 43. All pages were checked for Letter size, 300 DPI grayscale images and pure-white half-inch margins; representative opening, solo, lyric and ending pages were visually inspected. All 394 preexisting score JSON/screen PNG files stayed byte-identical. PDF generation took 9.7 seconds uncached and 0.1 seconds cached on this development machine; this is the print stage only, not a clean whole-product build benchmark. Physical printing was not tested.
|
||||
|
||||
### Validation And Publication
|
||||
|
||||
Generation validates sources and complete staged output before replacing the previous asset directory. Replacement is always complete; deleted sources cannot leave stale JSON, pages, audio, or Pico title assets. CMake tracks the input list as well as file contents, so additions and removals regenerate the catalog. Runtime packages contain `catalog.db` with embedded semantic JSON and title-image identifiers, PNG pages, generated PCM WAVs, Pico title images, and the OTF UI text font, not MusicXML, MuseScore, or Python dependencies. Python test discovery runs model/import/export tests; the normal asset build additionally qualifies and audits every catalog score.
|
||||
Generation validates sources and complete staged output before replacing the previous asset directory. Replacement is always complete; deleted sources cannot leave stale JSON, pages, audio, or Pico title assets. CMake tracks the input list as well as file contents, so additions and removals regenerate the catalog. Runtime packages contain `catalog.db` with embedded semantic JSON and title-image identifiers, PNG pages, supplied WAV recordings, Pico title images, and the OTF UI text font, not MusicXML, MuseScore, or Python dependencies. Python test discovery runs model/import/export tests; the normal asset build additionally qualifies and audits every catalog score.
|
||||
|
||||
The page cache uses `<renderer fingerprint>/fullscore/<score fingerprint>/` and `<renderer fingerprint>/notation/<band fingerprint>/` directories, without a manual cache revision. `python3 -m generator --renderer-fingerprint` reports the same identity used by rendering and CI: source bytes, fonts, visual style, Python implementation/version, and rendering-library versions. Python compiler/build timestamps are excluded. CI keys append all generator and active XML inputs, including rhythms, and restore earlier snapshots only within the same renderer directory; only that directory is saved after a successful build.
|
||||
The page cache uses `<renderer fingerprint>/fullscore/<score fingerprint>/` and `<renderer fingerprint>/notation/<band fingerprint>/` directories, without a manual cache revision. `./modulus.py python -m generator --renderer-fingerprint` reports the same identity used by rendering and CI: source bytes, fonts, visual style, Python implementation/version, and rendering-library versions. Python compiler/build timestamps are excluded. CI keys append generator code, the palette, source songs, composition policies, the frozen model, the training manifest, and authored solo XMLs. Earlier snapshots are restored only within the same renderer directory; only that directory is saved after a successful build.
|
||||
|
||||
`cold namespace` means that renderer's persistent directory does not yet exist. A renderer or environment change starts a new namespace; deleting a namespace has the same effect. It does not disable reuse within the current run: shared notation is still laid out once per group and its body pixels can be reused as other titles are composed, even without a persistent cache. Conversely, a warm directory does not guarantee that a particular score is cached. Progress reports full-score hits, body hits, newly rasterized body bands, composed pages, missing/rejected entries, and phase timings. Worker phase timings are summed and may exceed wall time. Obsolete namespaces are not migrated and can be removed when builds are idle.
|
||||
|
||||
@@ -223,25 +354,25 @@ The six compact source files were replaced, not retained as a second authoring f
|
||||
|
||||
References: [MusicXML durations](https://www.w3.org/2021/06/musicxml40/musicxml-reference/elements/duration/), [tuplets](https://www.w3.org/2021/06/musicxml40/musicxml-reference/elements/tuplet/), [degree alterations](https://www.w3.org/2021/06/musicxml40/musicxml-reference/elements/degree-alter/), and [SMuFL accidentals](https://smufl.formats.music/latest/tables/standard-accidentals-12-edo.html).
|
||||
|
||||
Generator checks compare the generated performance summary against `data/expected/performance_summary.json`. The summary stores compatibility invariants such as section layout, chord-label placement, slash-section placement, and vocal timing without committing the generated score files themselves. Refresh that file only when an intentional arrangement-logic change should become the new baseline.
|
||||
Generator checks compare the generated performance summary against `tests/fixtures/performance_summary.json`. The summary stores compatibility invariants such as section layout, chord-label placement, absence of uncomposed solo slashes, and vocal timing without committing the generated score files themselves. Refresh that file only when an intentional arrangement-logic change should become the new baseline.
|
||||
|
||||
## Pico Runtime
|
||||
|
||||
The Pico firmware uses the Pico SDK C++ stack and the `pico2_w` board definition. It initializes the ST7789T3 display over SPI, reads the CST816D touch controller over I2C, joins the Zero AP, polls `/api/remote/display`, and sends HTTP POST commands for gestures.
|
||||
|
||||
The display is rotated 90 degrees clockwise into a 320x240 landscape UI. The top status bar uses the shared palette:
|
||||
The display is rotated 90 degrees clockwise into a 320x240 landscape UI. A small connection indicator in the header uses the shared palette:
|
||||
|
||||
- Blue: connecting.
|
||||
- Yellow: retrying or remote request failed.
|
||||
- Green: connected to the Zero API.
|
||||
- Amber (`retrying`): connecting, offline, or a remote request failed.
|
||||
- Green (`connected`): connected to the Zero API.
|
||||
- Red (`danger`): Wi-Fi initialization failed.
|
||||
|
||||
The body shows a fixed Product Vamp/status label when no score is active, then the active title, selected part, and page count. Touch controls are tap for next, double tap for previous, and tap-and-hold for select. All visible text uses Petaluma Script, matching score-page text and the Zero UI.
|
||||
The body shows the focused menu item, song title, or setting and its current value. In score view it shows the active title, part, and page count. A separate status label displays connecting, offline, error, or busy when applicable. Both devices and score pages use the dark palette in `generator/palette.json`. Touch controls are tap for next, double tap for previous, and tap-and-hold for select. Holding Tempo enters or leaves editing; taps then increase BPM and double taps decrease it. All visible text uses Petaluma Script, matching score-page text and the Zero UI.
|
||||
|
||||
`generator.pico_artwork` shapes text on the build host with the bundled `PetalumaScript.otf` and Pillow's Raqm support. Fixed labels (`VAMP`, connection/status messages, and `PAGE`), digits, and `/` become four-bit coverage sprites. The Pico CMake rule writes `generated/pico/static.p4` and embeds it through `generated/pico/artwork.S`. The Zero does not link this sprite atlas; Luma renders its dynamic UI text from the packaged OTF.
|
||||
`generator.pico_artwork` shapes text on the build host with the bundled `PetalumaScript.otf` and Pillow's Raqm support. Fixed menu, part, connection/status, and settings labels, digits, and `/` become four-bit coverage sprites. The Pico CMake rule writes `generated/pico/static.p4` and embeds it through `generated/pico/artwork.S`. The Zero does not link this sprite atlas; Luma renders its dynamic UI text from the packaged OTF.
|
||||
|
||||
Score generation renders titles as 296x64 four-bit coverage images under `pico/titles/<sha256>.mask`. Each file is 9,480 bytes: an eight-byte `VPTI` header with little-endian width/height, followed by packed coverage. Identical image bytes share an asset without merging score identities. The generated `presentation.title_image` identifier is also stored in catalog metadata; no separate lookup manifest is required. These assets are generated and validated before staged output is published. Remote status includes `title_image=<sha256>`; `POST /api/remote/title` with `{"id":"<sha256>"}` serves validated bytes only for catalog-registered titles. Pico fetches a changed title, validates its fixed format and bounds, rejects stale responses, and retains the selected image. Part labels and page counts use fixed sprites without reshaping or refetching title text. Commands take priority over image requests, and failed title requests display `UNAVAILABLE` until a retry succeeds.
|
||||
|
||||
Pico performs coverage blending and sprite placement only: no OTF parsing, font shaping, glyph rasterization, or general text renderer runs in firmware. Missing glyphs and invalid source text are build errors. Font or generator changes rebuild both static firmware sprites and title artwork. Direct generation uses `python3 -m generator.pico_artwork --static-output <path>` for firmware sprites and `python3 -m generator.pico_artwork --assets <generated-assets>` for title assets. Python, Pillow/Raqm, and FontTools remain build-only dependencies.
|
||||
Pico performs coverage blending and sprite placement only: no OTF parsing, font shaping, glyph rasterization, or general text renderer runs in firmware. Missing glyphs and invalid source text are build errors. Font or generator changes rebuild both static firmware sprites and title artwork. Direct generation uses `./modulus.py python -m generator.pico_artwork --static-output <path>` for firmware sprites and `./modulus.py python -m generator.pico_artwork --assets <generated_assets>` for title assets. Python, Pillow/Raqm, and FontTools remain build-only dependencies.
|
||||
|
||||
The root `CMakeLists.txt` is also the Pico firmware entrypoint when configured with `-DVAMP_PICO_FIRMWARE_PROJECT=ON`. That mode returns before the Zero/Linux targets are declared, so the Pico build can use the embedded ARM toolchain cleanly.
|
||||
|
||||
@@ -258,23 +389,23 @@ Modulus packages the CMake install stage. Product Vamp uses `install_prefix` `.`
|
||||
|
||||
The ARM64 package target builds:
|
||||
|
||||
- `zero/product-vamp-zero-linux-arm64.docker.tar`
|
||||
- `pico/product-vamp-pico2w.uf2`
|
||||
- `zero/product_vamp_zero_linux_arm64.docker.tar`
|
||||
- `pico/product_vamp_pico2w.uf2`
|
||||
- `manifest.json`
|
||||
|
||||
Building the full package requires Docker/buildx, the ARM embedded GCC toolchain, and the Pico SDK. CI passes `PICO_SDK_PATH` directly. The generated Modulus Docker image also carries the pinned Pico SDK at `/opt/pico-sdk` for local package builds. The Zero Docker runtime targets Debian trixie to match current Raspberry Pi OS and the ARM64 dependency binaries, and includes `util-linux` for the `setsid --wait --ctty` launch path.
|
||||
|
||||
Generated score assets are created during CMake build/package and copied into the Zero image context. Static font assets remain tracked under `package/assets/fonts`.
|
||||
|
||||
`generator/catalog.py` uses Python's standard-library SQLite module to construct `catalog.db` after musical, playback, and engraving validation. The database carries application ID `0x56414D50`, complete score bundles, and menu metadata. Runtime validates both required strict tables, their column names/types, non-null requirements, and primary keys directly. Sorted insertion and the absence of wall-clock timestamps make repeated builds reproducible with the same toolchain. It is closed and integrity-checked before publication, without journal/WAL sidecars. Individual JSON files remain available in the build tree for inspection, but both CMake installation and Docker image assembly exclude them.
|
||||
`generator/catalog.py` uses Python's standard-library SQLite module to construct `catalog.db` after musical, recording, and engraving validation. The database carries application ID `0x56414D50`, complete score bundles, and menu metadata in a strict `songs` table with a `songs_menu` index; a strict `resources` table contains the supplied-audio manifest. Runtime validates the table's column names/types, non-null requirements, and primary key directly. Sorted insertion and the absence of wall-clock timestamps make repeated builds reproducible with the same toolchain. It is closed and integrity-checked before publication, without journal/WAL sidecars. Individual JSON files remain available in the build tree for inspection, but both CMake installation and Docker image assembly exclude them.
|
||||
|
||||
The default `database.path` is `/usr/share/product-vamp/catalog.db`; development configuration points at the native generated-assets database. Stored source paths are logical, asset-relative locations, not build-host filenames. Runtime resolves them against `runtime.assets_path` and rejects traversal and escaping symlinks. The JSON file itself need not exist: its parent identifies the score's page directory. Normal startup checks catalog compatibility; `--once` additionally runs SQLite's integrity probe and checks all page/audio files. Missing, corrupt, or incompatible catalogs fail rather than creating an empty library. `--ensure-database` is no longer a supported command.
|
||||
The default `database.path` is `/usr/share/product_vamp/catalog.db`; development configuration points at the native generated_assets database. Stored source paths are logical, asset-relative locations, not build-host filenames. Runtime resolves them against `runtime.assets_path` and rejects traversal and escaping symlinks. The JSON file itself need not exist: its parent identifies the score's page directory. Normal startup checks catalog compatibility; `--once` additionally runs SQLite's integrity probe and checks all page/audio files. Missing, corrupt, or incompatible catalogs fail rather than creating an empty library. `--ensure-database` is no longer a supported command.
|
||||
|
||||
Every run of `zero/install-zero.sh` is a clean installation. It stages configuration/scripts, verifies the manifest's Docker tag against the incoming archive's image digest, and probes that image before stopping Product Vamp. It then clears the owned `/etc/product-vamp`, `/var/lib/product-vamp`, `/run/product-vamp`, and obsolete host `/usr/share/product-vamp` trees, including old SQLite sidecars. The installed container uses assets from its image and no longer mounts a writable state database. Startup reads the verified image ID from `/etc/product-vamp/image-id`, rather than depending on a mutable Docker tag. The installer replaces its scripts and systemd units, removes their old overrides, recreates only the `product-vamp-control` NetworkManager profile, and requires a successful service health check before announcing success.
|
||||
Every run of `zero/install_zero.sh` is a clean installation. It stages configuration/scripts, verifies the manifest's Docker tag against the incoming archive's image digest, and probes that image before stopping Product Vamp. It then clears the owned `/etc/product_vamp`, `/var/lib/product_vamp`, `/run/product_vamp`, and obsolete host `/usr/share/product_vamp` trees, including old SQLite sidecars. The installed container uses assets from its image and no longer mounts a writable state database. Startup reads the verified image ID from `/etc/product_vamp/image_id`, rather than depending on a mutable Docker tag. The installer also removes the fixed legacy hyphenated Product Vamp paths, units, containers, and network profile after preflight, while rejecting symlinked destinations. It replaces its scripts and systemd units, removes their old overrides, recreates only the `product_vamp_control` NetworkManager profile, and requires a successful service health check before announcing success.
|
||||
|
||||
Configuration, AP credentials, and all prior catalog data are intentionally reset to bundle defaults. There is no automatic backup or migration. Installation through the control AP can disconnect the session; use the local console or independent networking. Preflight failure leaves existing application files untouched and restores the previous image tag; replacement failure stops Product Vamp and reports the error. Rerunning the installer is the recovery path. Ordinary boots/restarts do not run cleanup. Unrelated networks, OS data, containers, and system logs remain untouched. Cleanup rejects symlink/mount targets, never follows paths from old configuration, and removes only identified obsolete Product Vamp images not used by another container.
|
||||
|
||||
CI builds stable target-specific archives with `python3 modulus.py package`, then `package/scripts/publish_latest_generic_package.py` uploads exactly the configured targets and their checksums. Gitea requires a registry slot, so publishing replaces `latest` and removes obsolete remote entries. There is no application release number, artifact version argument, or versioned install directory. The manifest, heartbeat, status endpoint, and `--build-info` retain the Git commit for diagnostics. Conan references, compiler/dependency pins, and MusicXML protocol identifiers remain external tool requirements.
|
||||
CI builds stable target-specific archives with `python3 modulus.py package`, then `python3 modulus.py publish` uses Modulus's artifact publisher to upload exactly the configured targets and their checksums. Gitea requires a registry slot, so publishing replaces `latest` and removes obsolete remote entries. There is no application release number, artifact version argument, or versioned install directory. The manifest, runtime heartbeat file, and `--build-info` retain the Git commit for diagnostics. The health endpoint reports readiness; remote display responses contain device navigation state. Conan references, compiler/dependency pins, and MusicXML protocol identifiers remain external tool requirements.
|
||||
|
||||
## Shared Protocol
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
if(NOT MODULUS_PYTHON_RUNNER OR NOT MODULUS_PYTHON_ROOT)
|
||||
message(FATAL_ERROR "Modulus build Python is not configured. Run ./modulus.py configure first.")
|
||||
endif()
|
||||
find_package(Python3 COMPONENTS Interpreter REQUIRED)
|
||||
set(VAMP_PYTHON_COMMAND ${Python3_EXECUTABLE} -u ${MODULUS_PYTHON_RUNNER} ${MODULUS_PYTHON_ROOT})
|
||||
file(GLOB VAMP_SHARED_PYTHON_INPUTS CONFIGURE_DEPENDS
|
||||
${MODULUS_PYTHON_ROOT}/modulus/*.py
|
||||
${MODULUS_PYTHON_ROOT}/modulus/*_requirements.txt
|
||||
)
|
||||
list(APPEND VAMP_SHARED_PYTHON_INPUTS ${MODULUS_PYTHON_REQUIREMENTS})
|
||||
+12
-9
@@ -29,7 +29,7 @@ endif()
|
||||
|
||||
include(${PICO_SDK_PATH}/pico_sdk_init.cmake)
|
||||
|
||||
project(product-vamp-pico LANGUAGES C CXX ASM)
|
||||
project(product_vamp_pico LANGUAGES C CXX ASM)
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
@@ -37,6 +37,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
pico_sdk_init()
|
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/pico_artwork.cmake)
|
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/theme.cmake)
|
||||
|
||||
set(VAMP_MODULUS_INCLUDE_DIR "" CACHE PATH "Path to the Modulus public include directory")
|
||||
set(VAMP_RESOLVED_MODULUS_INCLUDE_DIR "${VAMP_MODULUS_INCLUDE_DIR}")
|
||||
@@ -74,36 +75,38 @@ if(NOT EXISTS "${VAMP_RESOLVED_MODULUS_INCLUDE_DIR}/modulus/types.hpp")
|
||||
message(FATAL_ERROR "VAMP_MODULUS_INCLUDE_DIR must contain modulus/types.hpp: ${VAMP_RESOLVED_MODULUS_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
add_executable(product-vamp-pico2w
|
||||
add_executable(product_vamp_pico2w
|
||||
src/vamp_style.cpp
|
||||
src/vamp_pico/display.cpp
|
||||
src/vamp_pico/http_client.cpp
|
||||
src/vamp_pico/input.cpp
|
||||
src/vamp_pico/main.cpp
|
||||
src/vamp_pico/remote_display.cpp
|
||||
src/vamp_pico/screen.cpp
|
||||
src/vamp_pico/touch.cpp
|
||||
src/vamp_protocol/page_control.cpp
|
||||
src/vamp_protocol/gesture.cpp
|
||||
)
|
||||
vamp_add_pico_artwork(product-vamp-pico2w)
|
||||
target_include_directories(product-vamp-pico2w PRIVATE
|
||||
vamp_add_pico_artwork(product_vamp_pico2w)
|
||||
vamp_add_theme(product_vamp_pico2w)
|
||||
target_include_directories(product_vamp_pico2w PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
${VAMP_RESOLVED_MODULUS_INCLUDE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/vamp_pico/capi
|
||||
)
|
||||
target_compile_definitions(product-vamp-pico2w PRIVATE
|
||||
target_compile_definitions(product_vamp_pico2w PRIVATE
|
||||
VAMP_PICO_WIFI_SSID="${VAMP_PICO_WIFI_SSID}"
|
||||
VAMP_PICO_WIFI_PASSPHRASE="${VAMP_PICO_WIFI_PASSPHRASE}"
|
||||
VAMP_ZERO_HOST="${VAMP_ZERO_HOST}"
|
||||
VAMP_ZERO_PORT=${VAMP_ZERO_PORT}
|
||||
)
|
||||
target_link_libraries(product-vamp-pico2w PRIVATE
|
||||
target_link_libraries(product_vamp_pico2w PRIVATE
|
||||
pico_stdlib
|
||||
hardware_i2c
|
||||
hardware_spi
|
||||
pico_cyw43_arch_lwip_threadsafe_background
|
||||
)
|
||||
|
||||
pico_enable_stdio_usb(product-vamp-pico2w 1)
|
||||
pico_enable_stdio_uart(product-vamp-pico2w 0)
|
||||
pico_add_extra_outputs(product-vamp-pico2w)
|
||||
pico_enable_stdio_usb(product_vamp_pico2w 1)
|
||||
pico_enable_stdio_uart(product_vamp_pico2w 0)
|
||||
pico_add_extra_outputs(product_vamp_pico2w)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
find_package(Python3 COMPONENTS Interpreter REQUIRED)
|
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/build_python.cmake)
|
||||
execute_process(
|
||||
COMMAND ${Python3_EXECUTABLE} -c "import PIL.features; import fontTools.ttLib; assert PIL.features.check_feature('raqm')"
|
||||
RESULT_VARIABLE VAMP_PILLOW_STATUS
|
||||
ERROR_QUIET
|
||||
)
|
||||
if(NOT VAMP_PILLOW_STATUS EQUAL 0)
|
||||
message(FATAL_ERROR "Pico artwork generation requires Pillow with Raqm and fontTools. Install libfribidi0 on Debian/Ubuntu, then run: ${Python3_EXECUTABLE} -m pip install -r ${CMAKE_CURRENT_SOURCE_DIR}/generator/requirements.txt")
|
||||
message(FATAL_ERROR "Pico artwork requires Pillow with Raqm and fontTools. Install libfribidi0 and configure the Modulus assets Python group.")
|
||||
endif()
|
||||
|
||||
# Zero uses packaged font files; only the Pico embeds this fixed sprite atlas.
|
||||
@@ -14,11 +14,15 @@ function(vamp_add_pico_artwork target)
|
||||
set(VAMP_PICO_ARTWORK_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/generated/pico/artwork.S)
|
||||
add_custom_command(
|
||||
OUTPUT ${VAMP_PICO_ARTWORK_BINARY}
|
||||
COMMAND ${Python3_EXECUTABLE} -m generator.pico_artwork --static-output ${VAMP_PICO_ARTWORK_BINARY}
|
||||
COMMAND ${VAMP_PYTHON_COMMAND} -m generator.pico_artwork --static-output ${VAMP_PICO_ARTWORK_BINARY}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/generator/pico_artwork.py
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/generator/requirements.txt
|
||||
${VAMP_SHARED_PYTHON_INPUTS}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/generator/palette.json
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/generator/theme.py
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/build_python.cmake
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/theme.cmake
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/package/assets/fonts/petaluma/PetalumaScript.otf
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
if(NOT EXISTS "${SOURCE}/catalog.db")
|
||||
message(FATAL_ERROR "Missing generated catalog: ${SOURCE}/catalog.db")
|
||||
endif()
|
||||
file(COPY "${SOURCE}/" DESTINATION "${DESTINATION}" PATTERN "*.json" EXCLUDE PATTERN "analysis" EXCLUDE)
|
||||
file(COPY "${SOURCE}/" DESTINATION "${DESTINATION}" PATTERN "*.json" EXCLUDE PATTERN "analysis" EXCLUDE PATTERN "print" EXCLUDE)
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/build_python.cmake)
|
||||
|
||||
function(vamp_add_theme target)
|
||||
set(header ${CMAKE_CURRENT_BINARY_DIR}/generated/vamp_style/palette.hpp)
|
||||
add_custom_command(
|
||||
OUTPUT ${header}
|
||||
COMMAND ${VAMP_PYTHON_COMMAND} -m generator.theme --header ${header}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
DEPENDS generator/theme.py generator/palette.json ${VAMP_SHARED_PYTHON_INPUTS}
|
||||
VERBATIM
|
||||
)
|
||||
target_sources(${target} PRIVATE ${header})
|
||||
target_include_directories(${target} PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/generated)
|
||||
endfunction()
|
||||
@@ -7,4 +7,4 @@ set(VAMP_PICO_WIFI_SSID "Vamp Control" CACHE STRING "Default Pico Wi-Fi SSID")
|
||||
set(VAMP_PICO_WIFI_PASSPHRASE "vamp-control" CACHE STRING "Default Pico Wi-Fi passphrase")
|
||||
set(VAMP_ZERO_HOST "192.168.42.1" CACHE STRING "Default Zero control host for Pico firmware")
|
||||
set(VAMP_ZERO_PORT "8080" CACHE STRING "Default Zero control port for Pico firmware")
|
||||
set(VAMP_ZERO_IMAGE_TAG "product-vamp-zero:dev" CACHE STRING "Docker image tag embedded in package metadata")
|
||||
set(VAMP_ZERO_IMAGE_TAG "product_vamp_zero:dev" CACHE STRING "Docker image tag embedded in package metadata")
|
||||
|
||||
+81
-58
@@ -8,7 +8,8 @@ set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
find_package(modulus CONFIG REQUIRED COMPONENTS boost_json openssl raylib)
|
||||
find_package(Threads REQUIRED)
|
||||
find_package(Python3 COMPONENTS Interpreter REQUIRED)
|
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/build_python.cmake)
|
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/theme.cmake)
|
||||
find_package(ligo CONFIG REQUIRED)
|
||||
find_package(noto CONFIG REQUIRED)
|
||||
find_package(luma CONFIG REQUIRED)
|
||||
@@ -23,8 +24,8 @@ check_cxx_source_compiles("
|
||||
#include <sonus.hpp>
|
||||
#include <luma.hpp>
|
||||
#include <utility>
|
||||
static_assert(requires(sonus::engine& engine, sonus::prepared_sequence sequence) {
|
||||
engine.play_sequence(std::move(sequence));
|
||||
static_assert(requires(sonus::engine& engine, sonus::prepared_transport transport) {
|
||||
engine.play_transport(std::move(transport));
|
||||
});
|
||||
static_assert(requires(luma::application& application, std::string path) {
|
||||
application.load_texture_uncached(path);
|
||||
@@ -33,7 +34,7 @@ check_cxx_source_compiles("
|
||||
" VAMP_DEPENDENCY_APIS_AVAILABLE)
|
||||
cmake_pop_check_state()
|
||||
if(NOT VAMP_DEPENDENCY_APIS_AVAILABLE)
|
||||
message(FATAL_ERROR "Product Vamp requires current Sonus sequence and Luma uncached-texture APIs. Run ./modulus.py configure --update after publishing the updated dependencies, or create their Conan packages locally before configuring --no-remote. See CMake's configure log for the compiler diagnostic.")
|
||||
message(FATAL_ERROR "Product Vamp requires current Sonus recording transport and Luma uncached-texture APIs. Run ./modulus.py configure --update after publishing the updated dependencies, or create their Conan packages locally before configuring --no-remote. See CMake's configure log for the compiler diagnostic.")
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
@@ -51,12 +52,13 @@ set(VAMP_STYLE_SOURCES
|
||||
src/vamp_style.cpp
|
||||
)
|
||||
|
||||
add_library(vamp-style STATIC ${VAMP_STYLE_SOURCES})
|
||||
target_include_directories(vamp-style PUBLIC
|
||||
add_library(vamp_style STATIC ${VAMP_STYLE_SOURCES})
|
||||
vamp_add_theme(vamp_style)
|
||||
target_include_directories(vamp_style PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
)
|
||||
target_compile_features(vamp-style PUBLIC cxx_std_17)
|
||||
target_link_libraries(vamp-style PUBLIC
|
||||
target_compile_features(vamp_style PUBLIC cxx_std_17)
|
||||
target_link_libraries(vamp_style PUBLIC
|
||||
modulus::modulus
|
||||
)
|
||||
|
||||
@@ -65,12 +67,12 @@ set(VAMP_PROTOCOL_SOURCES
|
||||
src/vamp_protocol/page_control.cpp
|
||||
)
|
||||
|
||||
add_library(vamp-protocol STATIC ${VAMP_PROTOCOL_SOURCES})
|
||||
target_include_directories(vamp-protocol PUBLIC
|
||||
add_library(vamp_protocol STATIC ${VAMP_PROTOCOL_SOURCES})
|
||||
target_include_directories(vamp_protocol PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
)
|
||||
target_compile_features(vamp-protocol PUBLIC cxx_std_17)
|
||||
target_link_libraries(vamp-protocol PUBLIC
|
||||
target_compile_features(vamp_protocol PUBLIC cxx_std_17)
|
||||
target_link_libraries(vamp_protocol PUBLIC
|
||||
modulus::modulus
|
||||
)
|
||||
|
||||
@@ -83,11 +85,13 @@ set(VAMP_CORE_SOURCES
|
||||
src/vamp_zero/errors.cpp
|
||||
src/vamp_zero/health.cpp
|
||||
src/vamp_zero/library.cpp
|
||||
src/vamp_zero/menu.cpp
|
||||
src/vamp_zero/menu_view.cpp
|
||||
src/vamp_zero/navigation.cpp
|
||||
src/vamp_zero/notation.cpp
|
||||
src/vamp_zero/page_control.cpp
|
||||
src/vamp_zero/playback.cpp
|
||||
src/vamp_zero/portal.cpp
|
||||
src/vamp_zero/performance.cpp
|
||||
src/vamp_zero/control.cpp
|
||||
src/vamp_zero/score.cpp
|
||||
src/vamp_zero/score_loader.cpp
|
||||
src/vamp_zero/types.cpp
|
||||
@@ -95,18 +99,18 @@ set(VAMP_CORE_SOURCES
|
||||
src/vamp_zero/ui.cpp
|
||||
)
|
||||
|
||||
add_library(vamp-zero-core STATIC ${VAMP_CORE_SOURCES})
|
||||
target_include_directories(vamp-zero-core PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/generated)
|
||||
target_include_directories(vamp-zero-core PUBLIC
|
||||
add_library(vamp_zero_core STATIC ${VAMP_CORE_SOURCES})
|
||||
target_include_directories(vamp_zero_core PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/generated)
|
||||
target_include_directories(vamp_zero_core PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
)
|
||||
target_compile_features(vamp-zero-core PUBLIC cxx_std_23)
|
||||
target_compile_definitions(vamp-zero-core PUBLIC
|
||||
target_compile_features(vamp_zero_core PUBLIC cxx_std_23)
|
||||
target_compile_definitions(vamp_zero_core PUBLIC
|
||||
VAMP_GIT_SHA="${VAMP_GIT_SHA}"
|
||||
)
|
||||
target_link_libraries(vamp-zero-core PUBLIC
|
||||
vamp-style
|
||||
vamp-protocol
|
||||
target_link_libraries(vamp_zero_core PUBLIC
|
||||
vamp_style
|
||||
vamp_protocol
|
||||
modulus::modulus
|
||||
modulus::boost_json
|
||||
modulus::openssl
|
||||
@@ -118,9 +122,9 @@ target_link_libraries(vamp-zero-core PUBLIC
|
||||
PRIVATE modulus::raylib
|
||||
)
|
||||
|
||||
add_executable(vamp-zero src/vamp_zero/main.cpp)
|
||||
target_compile_features(vamp-zero PRIVATE cxx_std_23)
|
||||
target_link_libraries(vamp-zero PRIVATE vamp-zero-core)
|
||||
add_executable(vamp_zero src/vamp_zero/main.cpp)
|
||||
target_compile_features(vamp_zero PRIVATE cxx_std_23)
|
||||
target_link_libraries(vamp_zero PRIVATE vamp_zero_core)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_subdirectory(tests)
|
||||
@@ -131,64 +135,76 @@ set(VAMP_MANIFEST ${VAMP_BUNDLE_DIR}/manifest.json)
|
||||
configure_file(package/manifest.json.in ${VAMP_MANIFEST} @ONLY)
|
||||
|
||||
file(GLOB_RECURSE VAMP_GENERATOR_INPUTS CONFIGURE_DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/data/*.xml
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/data/expected/*.json
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/data/songs/*.xml
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/data/training/*.xml
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/data/training/*.json
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/data/models/*.json
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tests/fixtures/performance_summary.json
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/data/composition/*.json
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/generator/*.py
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/generator/**/*.py
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/generator/requirements.txt
|
||||
${VAMP_SHARED_PYTHON_INPUTS}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/generator/palette.json
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/generator/theme.py
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/build_python.cmake
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/theme.cmake
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/package/assets/sounds/*.wav
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/package/assets/backing/*.wav
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/package/assets/fonts/*
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/package/assets/fonts/**/*
|
||||
)
|
||||
set(VAMP_GENERATED_ASSETS_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated-assets)
|
||||
set(VAMP_GENERATED_ASSETS_STAMP ${CMAKE_CURRENT_BINARY_DIR}/generated-assets.stamp)
|
||||
set(VAMP_GENERATED_ASSETS_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated_assets)
|
||||
set(VAMP_GENERATED_ASSETS_STAMP ${CMAKE_CURRENT_BINARY_DIR}/generated_assets.stamp)
|
||||
set(VAMP_ENGRAVING_JOBS 2 CACHE STRING "Maximum parallel Python engraving workers (1-16)")
|
||||
set(VAMP_ENGRAVING_CACHE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build/build_common/engraving-cache" CACHE PATH "Shared build-only page cache; empty disables caching")
|
||||
set(VAMP_COMPOSITION_JOBS 2 CACHE STRING "Maximum independent musical role workers (1-16)")
|
||||
set(VAMP_ENGRAVING_CACHE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build/build_common/engraving_cache" CACHE PATH "Shared build-only page cache; empty disables caching")
|
||||
set(VAMP_ENGRAVING_CACHE_ARGS)
|
||||
if(VAMP_ENGRAVING_CACHE_DIR)
|
||||
list(APPEND VAMP_ENGRAVING_CACHE_ARGS --engraving-cache "${VAMP_ENGRAVING_CACHE_DIR}")
|
||||
endif()
|
||||
string(JOIN "\n" VAMP_GENERATOR_INPUT_MANIFEST ${VAMP_GENERATOR_INPUTS})
|
||||
file(CONFIGURE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated-assets.inputs
|
||||
file(CONFIGURE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated_assets.inputs
|
||||
CONTENT "@VAMP_GENERATOR_INPUT_MANIFEST@\n" @ONLY)
|
||||
add_custom_command(
|
||||
OUTPUT ${VAMP_GENERATED_ASSETS_STAMP}
|
||||
BYPRODUCTS ${VAMP_GENERATED_ASSETS_DIR}/catalog.db
|
||||
COMMAND ${Python3_EXECUTABLE}
|
||||
-u
|
||||
COMMAND ${VAMP_PYTHON_COMMAND}
|
||||
-m generator
|
||||
--data-dir ${CMAKE_CURRENT_SOURCE_DIR}/data
|
||||
--output-dir ${VAMP_GENERATED_ASSETS_DIR}
|
||||
--static-assets-dir ${CMAKE_CURRENT_SOURCE_DIR}/package/assets
|
||||
--check
|
||||
--jobs ${VAMP_ENGRAVING_JOBS}
|
||||
--composition-jobs ${VAMP_COMPOSITION_JOBS}
|
||||
--composition-cache ${CMAKE_CURRENT_SOURCE_DIR}/build/build_common/composition_cache
|
||||
--progress
|
||||
${VAMP_ENGRAVING_CACHE_ARGS}
|
||||
COMMAND ${CMAKE_COMMAND} -E touch ${VAMP_GENERATED_ASSETS_STAMP}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
DEPENDS ${VAMP_GENERATOR_INPUTS} ${CMAKE_CURRENT_BINARY_DIR}/generated-assets.inputs
|
||||
DEPENDS ${VAMP_GENERATOR_INPUTS} ${CMAKE_CURRENT_BINARY_DIR}/generated_assets.inputs
|
||||
USES_TERMINAL
|
||||
VERBATIM
|
||||
)
|
||||
add_custom_target(vamp-generated-assets ALL DEPENDS ${VAMP_GENERATED_ASSETS_STAMP})
|
||||
add_custom_target(vamp_generated_assets ALL DEPENDS ${VAMP_GENERATED_ASSETS_STAMP})
|
||||
if(BUILD_TESTING)
|
||||
add_dependencies(product-vamp-test vamp-generated-assets)
|
||||
add_dependencies(product_vamp_test vamp_generated_assets)
|
||||
endif()
|
||||
|
||||
install(TARGETS vamp-zero
|
||||
install(TARGETS vamp_zero
|
||||
RUNTIME DESTINATION zero/bin
|
||||
)
|
||||
install(FILES package/config/vamp.example.json DESTINATION zero/config)
|
||||
install(DIRECTORY ${VAMP_GENERATED_ASSETS_DIR}/ DESTINATION zero/share/product-vamp
|
||||
PATTERN "*.json" EXCLUDE PATTERN "analysis" EXCLUDE)
|
||||
install(DIRECTORY ${VAMP_GENERATED_ASSETS_DIR}/ DESTINATION zero/share/product_vamp
|
||||
PATTERN "*.json" EXCLUDE PATTERN "analysis" EXCLUDE PATTERN "print" EXCLUDE)
|
||||
install(PROGRAMS
|
||||
package/zero/install-zero.sh
|
||||
package/zero/start-ap.sh
|
||||
package/zero/start-zero.sh
|
||||
package/zero/install_zero.sh
|
||||
package/zero/start_ap.sh
|
||||
package/zero/start_zero.sh
|
||||
DESTINATION zero
|
||||
)
|
||||
install(FILES
|
||||
package/zero/product-vamp-ap.service
|
||||
package/zero/product-vamp-zero.service
|
||||
package/zero/product_vamp_ap.service
|
||||
package/zero/product_vamp_zero.service
|
||||
DESTINATION zero/systemd
|
||||
)
|
||||
install(FILES package/pico/wiring.md DESTINATION pico)
|
||||
@@ -201,23 +217,23 @@ endif()
|
||||
if(VAMP_BUILD_ZERO_IMAGE)
|
||||
find_program(DOCKER_EXECUTABLE docker REQUIRED)
|
||||
|
||||
set(VAMP_ZERO_IMAGE_CONTEXT ${CMAKE_CURRENT_BINARY_DIR}/zero-image-context)
|
||||
set(VAMP_ZERO_IMAGE_TAR ${CMAKE_CURRENT_BINARY_DIR}/product-vamp-zero-linux-arm64.docker.tar)
|
||||
set(VAMP_ZERO_IMAGE_CONTEXT ${CMAKE_CURRENT_BINARY_DIR}/zero_image_context)
|
||||
set(VAMP_ZERO_IMAGE_TAR ${CMAKE_CURRENT_BINARY_DIR}/product_vamp_zero_linux_arm64.docker.tar)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${VAMP_ZERO_IMAGE_TAR}
|
||||
COMMAND ${CMAKE_COMMAND} -E rm -rf ${VAMP_ZERO_IMAGE_CONTEXT}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${VAMP_ZERO_IMAGE_CONTEXT}/usr/bin
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${VAMP_ZERO_IMAGE_CONTEXT}/usr/share/product-vamp
|
||||
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:vamp-zero> ${VAMP_ZERO_IMAGE_CONTEXT}/usr/bin/vamp-zero
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${VAMP_ZERO_IMAGE_CONTEXT}/usr/share/product_vamp
|
||||
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:vamp_zero> ${VAMP_ZERO_IMAGE_CONTEXT}/usr/bin/vamp_zero
|
||||
COMMAND ${CMAKE_COMMAND} -E copy package/zero/Dockerfile ${VAMP_ZERO_IMAGE_CONTEXT}/Dockerfile
|
||||
COMMAND ${CMAKE_COMMAND} -DSOURCE=${VAMP_GENERATED_ASSETS_DIR} -DDESTINATION=${VAMP_ZERO_IMAGE_CONTEXT}/usr/share/product-vamp -P cmake/runtime_assets.cmake
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${VAMP_ZERO_IMAGE_CONTEXT}/usr/share/product-vamp/config
|
||||
COMMAND ${CMAKE_COMMAND} -E copy package/config/vamp.example.json ${VAMP_ZERO_IMAGE_CONTEXT}/usr/share/product-vamp/config/vamp.example.json
|
||||
COMMAND ${CMAKE_COMMAND} -DSOURCE=${VAMP_GENERATED_ASSETS_DIR} -DDESTINATION=${VAMP_ZERO_IMAGE_CONTEXT}/usr/share/product_vamp -P cmake/runtime_assets.cmake
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${VAMP_ZERO_IMAGE_CONTEXT}/usr/share/product_vamp/config
|
||||
COMMAND ${CMAKE_COMMAND} -E copy package/config/vamp.example.json ${VAMP_ZERO_IMAGE_CONTEXT}/usr/share/product_vamp/config/vamp.example.json
|
||||
COMMAND ${BASH_EXECUTABLE} package/scripts/build_zero_image.sh ${VAMP_ZERO_IMAGE_CONTEXT} ${VAMP_ZERO_IMAGE_TAR} ${VAMP_ZERO_IMAGE_TAG}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
DEPENDS
|
||||
vamp-zero
|
||||
vamp_zero
|
||||
package/scripts/build_zero_image.sh
|
||||
package/zero/Dockerfile
|
||||
package/config/vamp.example.json
|
||||
@@ -225,19 +241,23 @@ if(VAMP_BUILD_ZERO_IMAGE)
|
||||
${VAMP_GENERATED_ASSETS_STAMP}
|
||||
VERBATIM
|
||||
)
|
||||
add_custom_target(vamp-zero-image ALL DEPENDS ${VAMP_ZERO_IMAGE_TAR})
|
||||
add_custom_target(vamp_zero_image ALL DEPENDS ${VAMP_ZERO_IMAGE_TAR})
|
||||
install(FILES ${VAMP_ZERO_IMAGE_TAR} DESTINATION zero)
|
||||
endif()
|
||||
|
||||
if(VAMP_BUILD_PICO_FIRMWARE)
|
||||
set(VAMP_PICO_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/pico-build)
|
||||
set(VAMP_PICO_UF2 ${CMAKE_CURRENT_BINARY_DIR}/product-vamp-pico2w.uf2)
|
||||
set(VAMP_PICO_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/pico_build)
|
||||
set(VAMP_PICO_UF2 ${CMAKE_CURRENT_BINARY_DIR}/product_vamp_pico2w.uf2)
|
||||
file(GLOB VAMP_PICO_SOURCES CONFIGURE_DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/pico.cmake
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/pico_artwork.cmake
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/generator/pico_artwork.py
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/generator/requirements.txt
|
||||
${VAMP_SHARED_PYTHON_INPUTS}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/generator/palette.json
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/generator/theme.py
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/build_python.cmake
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/theme.cmake
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/package/assets/fonts/petaluma/PetalumaScript.otf
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/vamp_options.cmake
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp
|
||||
@@ -263,12 +283,15 @@ if(VAMP_BUILD_PICO_FIRMWARE)
|
||||
"${VAMP_ZERO_HOST}"
|
||||
"${VAMP_ZERO_PORT}"
|
||||
"${modulus_INCLUDE_DIR}"
|
||||
"${Python3_EXECUTABLE}"
|
||||
"${MODULUS_PYTHON_RUNNER}"
|
||||
"${MODULUS_PYTHON_ROOT}"
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
DEPENDS
|
||||
package/scripts/build_pico_firmware.sh
|
||||
${VAMP_PICO_SOURCES}
|
||||
VERBATIM
|
||||
)
|
||||
add_custom_target(vamp-pico-firmware ALL DEPENDS ${VAMP_PICO_UF2})
|
||||
add_custom_target(vamp_pico_firmware ALL DEPENDS ${VAMP_PICO_UF2})
|
||||
install(FILES ${VAMP_PICO_UF2} DESTINATION pico)
|
||||
endif()
|
||||
|
||||
+7
-5
@@ -3,7 +3,7 @@ import conan.tools.build
|
||||
import conan.tools.cmake
|
||||
|
||||
class product_vamp_conan(conan.ConanFile):
|
||||
name = "product-vamp"
|
||||
name = "product_vamp"
|
||||
version = "latest"
|
||||
description = "Two-device sheet-music display and guitar remote"
|
||||
license = "MIT"
|
||||
@@ -29,15 +29,16 @@ class product_vamp_conan(conan.ConanFile):
|
||||
"modulus.py",
|
||||
"modulus.json",
|
||||
"cmake/*.cmake",
|
||||
"data/expected/*.json",
|
||||
"data/songs/*.xml",
|
||||
"data/rhythms/**/*.xml",
|
||||
"data/scales/**/*.xml",
|
||||
"data/composition/*.json",
|
||||
"data/models/*.json",
|
||||
"data/training/*.json",
|
||||
"data/training/*.xml",
|
||||
"tests/fixtures/*",
|
||||
"tests/fixtures/**/*",
|
||||
"generator/*.py",
|
||||
"generator/palette.json",
|
||||
"generator/**/*.py",
|
||||
"generator/requirements.txt",
|
||||
"include/*.hpp",
|
||||
"include/vamp_style/*.hpp",
|
||||
"src/vamp_pico/*.S.in",
|
||||
@@ -89,6 +90,7 @@ class product_vamp_conan(conan.ConanFile):
|
||||
if hasattr(toolchain, "user_presets_path"):
|
||||
toolchain.user_presets_path = False
|
||||
toolchain.variables["BUILD_TESTING"] = bool(self.options.with_tests)
|
||||
toolchain.variables.update(self.python_requires["modulus"].module.python_cmake_variables(self))
|
||||
toolchain.generate()
|
||||
def build(self):
|
||||
cmake = conan.tools.cmake.CMake(self)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"version": 1,
|
||||
"provenance": "General written-chord/function and bounded tension policies. Source key supplies brief diatonic motion; no fixed scale maps. Numerical limits are engineering settings.",
|
||||
"license": "MIT",
|
||||
"colors": [
|
||||
{
|
||||
"id": "major_ninth",
|
||||
"qualities": [
|
||||
"major"
|
||||
],
|
||||
"degree": 9,
|
||||
"alter": 0,
|
||||
"max_beats": "4"
|
||||
},
|
||||
{
|
||||
"id": "major_thirteenth",
|
||||
"qualities": [
|
||||
"major"
|
||||
],
|
||||
"degree": 13,
|
||||
"alter": 0,
|
||||
"max_beats": "4"
|
||||
},
|
||||
{
|
||||
"id": "lydian_color",
|
||||
"qualities": [
|
||||
"major",
|
||||
"dominant"
|
||||
],
|
||||
"degree": 11,
|
||||
"alter": 1,
|
||||
"max_beats": "2",
|
||||
"resolve": true
|
||||
},
|
||||
{
|
||||
"id": "minor_ninth",
|
||||
"qualities": [
|
||||
"minor"
|
||||
],
|
||||
"degree": 9,
|
||||
"alter": 0,
|
||||
"max_beats": "4"
|
||||
},
|
||||
{
|
||||
"id": "minor_eleventh",
|
||||
"qualities": [
|
||||
"minor",
|
||||
"half_diminished"
|
||||
],
|
||||
"degree": 11,
|
||||
"alter": 0,
|
||||
"max_beats": "4"
|
||||
},
|
||||
{
|
||||
"id": "minor_sixth",
|
||||
"qualities": [
|
||||
"minor"
|
||||
],
|
||||
"degree": 6,
|
||||
"alter": 0,
|
||||
"max_beats": "4",
|
||||
"function": "tonic_or_predominant",
|
||||
"continuation": "Stable color on tonic/predominant minor harmony; duration and explicit chord exclusions remain binding."
|
||||
},
|
||||
{
|
||||
"id": "dominant_ninth",
|
||||
"qualities": [
|
||||
"dominant"
|
||||
],
|
||||
"degree": 9,
|
||||
"alter": 0,
|
||||
"max_beats": "4"
|
||||
},
|
||||
{
|
||||
"id": "dominant_thirteenth",
|
||||
"qualities": [
|
||||
"dominant"
|
||||
],
|
||||
"degree": 13,
|
||||
"alter": 0,
|
||||
"max_beats": "4"
|
||||
},
|
||||
{
|
||||
"id": "dominant_flat_ninth",
|
||||
"qualities": [
|
||||
"dominant"
|
||||
],
|
||||
"degree": 9,
|
||||
"alter": -1,
|
||||
"max_beats": "4",
|
||||
"resolve": false,
|
||||
"function": "resolving_dominant",
|
||||
"continuation": "Bounded dominant color. May continue through other chord tones/tensions rather than resolve immediately by step. Written exclusions and harmonic function remain binding."
|
||||
},
|
||||
{
|
||||
"id": "dominant_sharp_ninth",
|
||||
"qualities": [
|
||||
"dominant"
|
||||
],
|
||||
"degree": 9,
|
||||
"alter": 1,
|
||||
"max_beats": "4",
|
||||
"resolve": false,
|
||||
"function": "resolving_dominant",
|
||||
"continuation": "Bounded dominant color. May continue through other chord tones/tensions rather than resolve immediately by step. Written exclusions and harmonic function remain binding."
|
||||
},
|
||||
{
|
||||
"id": "dominant_flat_thirteenth",
|
||||
"qualities": [
|
||||
"dominant"
|
||||
],
|
||||
"degree": 13,
|
||||
"alter": -1,
|
||||
"max_beats": "4",
|
||||
"resolve": false,
|
||||
"function": "resolving_dominant",
|
||||
"continuation": "Bounded dominant color. May continue through other chord tones/tensions rather than resolve immediately by step. Written exclusions and harmonic function remain binding."
|
||||
},
|
||||
{
|
||||
"id": "half_diminished_natural_sixth",
|
||||
"qualities": [
|
||||
"half_diminished"
|
||||
],
|
||||
"degree": 13,
|
||||
"alter": 0,
|
||||
"max_beats": "4",
|
||||
"function": "predominant_to_dominant",
|
||||
"continuation": "Natural sixth preparing the following dominant; requires the stated harmonic function."
|
||||
}
|
||||
],
|
||||
"resolution_gap": "1",
|
||||
"anticipation_max": "1",
|
||||
"suspensions": [
|
||||
{
|
||||
"id": "prepared_step_down",
|
||||
"preparation": "1/2",
|
||||
"max_delay": "1",
|
||||
"steps": [
|
||||
-1,
|
||||
-2
|
||||
]
|
||||
}
|
||||
],
|
||||
"sources": [
|
||||
"https://www.berklee.edu/berklee-today/summer-2014/tension-and-resolution",
|
||||
"https://college.berklee.edu/berklee-today-55"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,299 @@
|
||||
{
|
||||
"version": 1,
|
||||
"provenance": "Generic target-relative approach/enclosure operators. Target-guided review motivated an explicitly separated enclosure and spelling-independent function. No pitches, chord progressions, bar schedules or extracted phrase templates are stored.",
|
||||
"license": "MIT",
|
||||
"patterns": [
|
||||
{
|
||||
"id": "below",
|
||||
"kind": "approach",
|
||||
"semitones": [
|
||||
-1
|
||||
],
|
||||
"durations": [
|
||||
"1/2"
|
||||
],
|
||||
"gap": "0"
|
||||
},
|
||||
{
|
||||
"id": "above",
|
||||
"kind": "approach",
|
||||
"semitones": [
|
||||
1
|
||||
],
|
||||
"durations": [
|
||||
"1/2"
|
||||
],
|
||||
"gap": "0"
|
||||
},
|
||||
{
|
||||
"id": "upper_lower",
|
||||
"kind": "enclosure",
|
||||
"semitones": [
|
||||
1,
|
||||
-1
|
||||
],
|
||||
"durations": [
|
||||
"1/2",
|
||||
"1/2"
|
||||
],
|
||||
"gap": "0"
|
||||
},
|
||||
{
|
||||
"id": "lower_upper",
|
||||
"kind": "enclosure",
|
||||
"semitones": [
|
||||
-1,
|
||||
1
|
||||
],
|
||||
"durations": [
|
||||
"1/2",
|
||||
"1/2"
|
||||
],
|
||||
"gap": "0"
|
||||
},
|
||||
{
|
||||
"id": "ascending",
|
||||
"kind": "connection",
|
||||
"semitones": [
|
||||
-2,
|
||||
-1
|
||||
],
|
||||
"durations": [
|
||||
"1/2",
|
||||
"1/2"
|
||||
],
|
||||
"gap": "0"
|
||||
},
|
||||
{
|
||||
"id": "descending",
|
||||
"kind": "connection",
|
||||
"semitones": [
|
||||
2,
|
||||
1
|
||||
],
|
||||
"durations": [
|
||||
"1/2",
|
||||
"1/2"
|
||||
],
|
||||
"gap": "0"
|
||||
},
|
||||
{
|
||||
"id": "delayed_below",
|
||||
"kind": "approach",
|
||||
"semitones": [
|
||||
-1
|
||||
],
|
||||
"durations": [
|
||||
"1/2"
|
||||
],
|
||||
"gap": "1/2"
|
||||
},
|
||||
{
|
||||
"id": "mapped_upper_lower",
|
||||
"kind": "enclosure",
|
||||
"semitones": [
|
||||
2,
|
||||
-1
|
||||
],
|
||||
"durations": [
|
||||
"1/2",
|
||||
"1/2"
|
||||
],
|
||||
"gap": "0",
|
||||
"diatonic_indices": [
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "lower_mapped_upper",
|
||||
"kind": "enclosure",
|
||||
"semitones": [
|
||||
-1,
|
||||
2
|
||||
],
|
||||
"durations": [
|
||||
"1/2",
|
||||
"1/2"
|
||||
],
|
||||
"gap": "0",
|
||||
"diatonic_indices": [
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "separated_lower_upper",
|
||||
"kind": "enclosure",
|
||||
"semitones": [
|
||||
-1,
|
||||
2
|
||||
],
|
||||
"durations": [
|
||||
"1/2",
|
||||
"1/2"
|
||||
],
|
||||
"internal_gaps": [
|
||||
"1/2"
|
||||
],
|
||||
"gap": "0",
|
||||
"diatonic_indices": [
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "chromatic_scalar_up",
|
||||
"kind": "approach",
|
||||
"semitones": [
|
||||
-3,
|
||||
-2
|
||||
],
|
||||
"durations": [
|
||||
"1/2",
|
||||
"1/2"
|
||||
],
|
||||
"gap": "0",
|
||||
"diatonic_indices": [
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "chromatic_scalar_down",
|
||||
"kind": "approach",
|
||||
"semitones": [
|
||||
3,
|
||||
2
|
||||
],
|
||||
"durations": [
|
||||
"1/2",
|
||||
"1/2"
|
||||
],
|
||||
"gap": "0",
|
||||
"diatonic_indices": [
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "short_chromatic_up",
|
||||
"kind": "connection",
|
||||
"semitones": [
|
||||
-2,
|
||||
-1
|
||||
],
|
||||
"durations": [
|
||||
"1/4",
|
||||
"1/4"
|
||||
],
|
||||
"gap": "0",
|
||||
"difficulty": "sixteenth"
|
||||
},
|
||||
{
|
||||
"id": "short_chromatic_down",
|
||||
"kind": "connection",
|
||||
"semitones": [
|
||||
2,
|
||||
1
|
||||
],
|
||||
"durations": [
|
||||
"1/4",
|
||||
"1/4"
|
||||
],
|
||||
"gap": "0",
|
||||
"difficulty": "sixteenth"
|
||||
},
|
||||
{
|
||||
"id": "triplet_chromatic_up",
|
||||
"kind": "connection",
|
||||
"semitones": [
|
||||
-2,
|
||||
-1
|
||||
],
|
||||
"durations": [
|
||||
"1/3",
|
||||
"1/3"
|
||||
],
|
||||
"gap": "0",
|
||||
"difficulty": "triplet"
|
||||
},
|
||||
{
|
||||
"id": "triplet_chromatic_down",
|
||||
"kind": "connection",
|
||||
"semitones": [
|
||||
2,
|
||||
1
|
||||
],
|
||||
"durations": [
|
||||
"1/3",
|
||||
"1/3"
|
||||
],
|
||||
"gap": "0",
|
||||
"difficulty": "triplet"
|
||||
},
|
||||
{
|
||||
"id": "quarter_below",
|
||||
"kind": "approach",
|
||||
"semitones": [
|
||||
-1
|
||||
],
|
||||
"durations": [
|
||||
"1"
|
||||
],
|
||||
"gap": "0"
|
||||
},
|
||||
{
|
||||
"id": "quarter_above",
|
||||
"kind": "approach",
|
||||
"semitones": [
|
||||
1
|
||||
],
|
||||
"durations": [
|
||||
"1"
|
||||
],
|
||||
"gap": "0"
|
||||
}
|
||||
],
|
||||
"blues": [
|
||||
{
|
||||
"id": "minor_to_major_third",
|
||||
"degree": 3,
|
||||
"alter": -1,
|
||||
"target_degree": 3
|
||||
},
|
||||
{
|
||||
"id": "flat_fifth_to_fifth",
|
||||
"degree": 5,
|
||||
"alter": -1,
|
||||
"target_degree": 5
|
||||
}
|
||||
],
|
||||
"max_approach": "3/2",
|
||||
"delayed_approach": {
|
||||
"id": "bounded_semitone_resolution",
|
||||
"max_note": "1/2",
|
||||
"deadline": "4",
|
||||
"steps": [
|
||||
-1,
|
||||
1
|
||||
],
|
||||
"arrivals": [
|
||||
"1",
|
||||
"3/2",
|
||||
"2",
|
||||
"5/2",
|
||||
"3",
|
||||
"7/2",
|
||||
"4"
|
||||
],
|
||||
"holds": [
|
||||
"1/2",
|
||||
"1"
|
||||
]
|
||||
},
|
||||
"passing": {
|
||||
"id": "chromatic_passing",
|
||||
"max_note": "1/2",
|
||||
"steps": [
|
||||
-1,
|
||||
1
|
||||
],
|
||||
"endpoints": "Source-key/chord motion or separately validated colors; contiguous same-direction semitones."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"version": 1,
|
||||
"provenance": "Independently authored general composition policy; no validation-score measurements or material.",
|
||||
"license": "MIT",
|
||||
"roles": {
|
||||
"acoustic_solo": {},
|
||||
"electric_solo": {},
|
||||
"acoustic_accompaniment": {
|
||||
"seed": "acoustic_comp",
|
||||
"bass": "primary",
|
||||
"center": 53,
|
||||
"voicing": {
|
||||
"register_weight": 1
|
||||
}
|
||||
},
|
||||
"electric_accompaniment": {
|
||||
"seed": "electric_comp",
|
||||
"bass": "essential",
|
||||
"center": 60,
|
||||
"voicing": {
|
||||
"register_weight": 1
|
||||
}
|
||||
},
|
||||
"electric_melody": {
|
||||
"seed": "head",
|
||||
"center": 60,
|
||||
"voicing": {
|
||||
"register_weight": 1
|
||||
}
|
||||
},
|
||||
"vocal_melody": {
|
||||
"seed": "voice"
|
||||
}
|
||||
},
|
||||
"difficulty": {
|
||||
"name": "moderate",
|
||||
"triplet_max_bpm": 160,
|
||||
"sixteenth_max_bpm": 144
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -1,59 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,62 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,62 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,65 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,62 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,65 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,65 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,68 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,62 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,65 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,65 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,68 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,65 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,68 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,68 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,71 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,53 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,50 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,63 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>8</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>8</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">begin</beam>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">end</beam>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,58 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>8</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>8</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,50 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,47 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,60 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>8</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>8</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">begin</beam>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">end</beam>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,55 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>8</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>8</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,63 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>8</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">begin</beam>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">end</beam>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>8</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,60 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>8</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">begin</beam>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">end</beam>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>8</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,73 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>8</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">begin</beam>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">continue</beam>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">continue</beam>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">end</beam>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,68 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>8</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">begin</beam>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">end</beam>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,58 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>8</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>8</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,55 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>8</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>8</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,69 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>8</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">begin</beam>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">continue</beam>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
<beam number="1">end</beam>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,63 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>8</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>eighth</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,44 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes" />
|
||||
<supports element="transpose" type="yes" />
|
||||
<software>Product Vamp</software>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120" />
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>8</duration>
|
||||
<type>half</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,41 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes" />
|
||||
<supports element="transpose" type="yes" />
|
||||
<software>Product Vamp</software>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>2</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120" />
|
||||
<note>
|
||||
<rest />
|
||||
<duration>8</duration>
|
||||
<type>half</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,69 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Soundslice MusicXML exporter</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,72 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Soundslice MusicXML exporter</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,72 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Soundslice MusicXML exporter</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Soundslice MusicXML exporter</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,72 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Soundslice MusicXML exporter</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Soundslice MusicXML exporter</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Soundslice MusicXML exporter</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Soundslice MusicXML exporter</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,72 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,81 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,72 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,81 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,81 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,81 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,81 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,84 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,72 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,81 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,81 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,81 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
@@ -1,81 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
|
||||
<score-partwise version="4.0">
|
||||
<identification>
|
||||
<encoding>
|
||||
<supports element="accidental" type="yes"/>
|
||||
<supports element="transpose" type="yes"/>
|
||||
<software>Product Vamp</software>
|
||||
<encoding-date>2026-09-25</encoding-date>
|
||||
</encoding>
|
||||
</identification>
|
||||
<part-list>
|
||||
<score-part id="P1">
|
||||
<part-name>Vocal</part-name>
|
||||
</score-part>
|
||||
</part-list>
|
||||
<part id="P1">
|
||||
<measure number="1">
|
||||
<attributes>
|
||||
<divisions>4</divisions>
|
||||
<key>
|
||||
<fifths>0</fifths>
|
||||
<mode>major</mode>
|
||||
</key>
|
||||
<time>
|
||||
<beats>3</beats>
|
||||
<beat-type>4</beat-type>
|
||||
</time>
|
||||
<clef>
|
||||
<sign>G</sign>
|
||||
<line>2</line>
|
||||
</clef>
|
||||
</attributes>
|
||||
<sound tempo="120"/>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
<measure number="2">
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<pitch>
|
||||
<step>C</step>
|
||||
<octave>5</octave>
|
||||
</pitch>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
<note>
|
||||
<rest/>
|
||||
<duration>4</duration>
|
||||
<type>quarter</type>
|
||||
</note>
|
||||
</measure>
|
||||
</part>
|
||||
</score-partwise>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user