Speelplan en speelblokken (draft)¶
Status: draft v0 — fase 1 (syntax, validatie, MXL-expansie) + fase 2a
(volta voor patroon (a,b)×n+(a,c)) + fase 2b (D.S./D.C. al Fine) +
fase 2c (D.S./D.C. al Coda) op partituur. Geneste combinatie-jumps zonder
één herkenbaar bladpatroon blijven expand (Open punten /
«Bewust later»).
Voor wie: wie een vast SATB-antwoord (alleluia, litanie-antwoord) één keer wil opschrijven en de uitvoeringsvolgorde apart wil vastleggen.
Idee in het kort¶
In de .mvsa schrijf je elk speelblok één keer (@blok).
@speelplan zegt in welke volgorde die blokken klinken.
| Export | Vorm |
|---|---|
| MXL (playback) | Klinkende vorm: speelplan volledig uitgeschreven |
| MSCZ (partituur) | Bladvorm: elk blok één keer + zichtbare speeltekst (fase 1) |
Besluit bladvorm (“als vanzelf”): optie A — compact blad met conventionele herhaal-/volta-/D.S.-notatie. Niet standaard: speelplan ook op papier uitschrijven (dat is alleen het vangnet als geen navigatiepatroon past).
Bestandsgrens: één .mvsa ↔ hoogstens één @speelplan. Geen nesten
van speelplan in @sectie. Meerdere stukken met eigen plan → aparte bestanden.
@sectie blijft voor bestanden zonder speelplan (schetsen, --section).
Zonder @speelplan blijft het huidige gedrag: documentvolgorde = klinkende
volgorde. Open herhalingen (litanie: |: … :| zonder vaste N) horen
buiten een speelplan; MusicXML-<repeat> blijft daar geldig voor blad én
Coria.
Dit is niet hetzelfde als VSA-templates cycle/final (tekstregels →
formule-frasen). Speelplan is voor vaste SATB-blokken in één .mvsa.
Termen¶
| Term | Betekenis |
|---|---|
| Speelblok | Genoemd LSATB-segment (@blok id); staat één keer in de bron |
| Speelplan | Niet-lege lijst speelblok-ids = canonieke klinkende volgorde |
| Bladvorm | Wat op papier staat: elk speelblok één keer, bronvolgorde |
| Klinkende vorm | Tijdlijn na expansie van het speelplan |
| Speeltekst | Alleen vangnet als geen navigatiepatroon past (zelden) |
Syntax¶
@speelplan¶
@speelplan 1, 2, 1, 2, 1, 3
- Hoogstens één
@speelplanper bestand. - Argument: komma-gescheiden speelblok-ids (spaties mogen rond komma’s).
- Staat bij de document-metadata (bij
@do/@title), vóór het eerste speelblok. - Elk id moet voorkomen als
@blokid in hetzelfde bestand.
@blok¶
@blok 1
L: … |
S: … |
…
@blok 2
L: … |
…
@blok 3
L: … ||
…
- Opent een speelblok (genoemd LSATB-segment voor
@speelplan). In de parser is dat een eigen segment (origin=blok), geen@sectie. - Id: cijferreeks
[1-9][0-9]*of[a-z][a-z0-9_-]*. - Elk speelblok-id komt hoogstens één keer voor.
- Tussen blokken is
||niet verplicht (en vaak ongewenst:||triggert in Coria een pauze). Geen||-eis tussen blokken (in tegenstelling tot expliciete sectie-eindestreep midden in een@sectie-bestand). Optioneel||alleen op het laatste blok van het bestand.
@sectie vs @blok: gebruik @sectie in bestanden zonder @speelplan
(export-id, schetsen). In een bestand met @speelplan moeten alle
muzikale segmenten via @blok (geen anonieme sectie, geen @sectie).
Nest geen speelplan in een sectie — één plan per bestand.
Herhaalstrepen en speelplan¶
In een speelblok dat in @speelplan voorkomt zijn |: en :|
(en :||) verboden. Canonieke volgorde komt uit het speelplan, niet uit
bladherhaling.
Buiten een speelplan-bestand (geen @speelplan) blijven |: / :| / :||
gewoon toegestaan.
Toegestaan in speelblokken: | (frase); || mag maar is geen eis tussen
blokken (zie hierboven).
Semantiek¶
- Expansie: concateneer de maten van de speelblokken in planvolgorde → klinkende vorm.
- Bladvorm wijzigt de bronvolgorde niet: blokken blijven in documentvolgorde, elk één keer.
- Zonder
@speelplan: geen expansie; labels@blokmogen redactioneel zijn (ongebruikte ids: geen error). - Lopende toon / soft-wrap-
-: volgt de exportvolgorde van die layout (playback = klinkende keten na expansie; partituur = bladvorm). Zelfde regels als Semantiek — lopende toon over systeembraken.
Validatie (fase 1)¶
| Code | Ernst | Wanneer |
|---|---|---|
MVSA-SPEELPLAN-SYNTAX |
error | Lege lijst, leeg id, ongeldig id-teken |
MVSA-SPEELPLAN-MULTI |
error | Meer dan één @speelplan |
MVSA-SPEELPLAN-UNKNOWN-ID |
error | Id in plan zonder @blok |
MVSA-BLOK-ID |
error | Ongeldige @blok-id |
MVSA-BLOK-DUP |
error | Twee @blok met hetzelfde id |
MVSA-SPEELPLAN-ANON |
error | Anonieme sectie of @sectie terwijl speelplan bestaat |
MVSA-SPEELPLAN-REPEAT-BAR |
error | \|: / :\| / :\|\| in een speelplan-blok |
MVSA-SPEELPLAN-UNUSED |
warning | @blok niet genoemd in het speelplan |
Export¶
MXL (layout=playback)¶
Bij aanwezig speelplan: exporteer de klinkende vorm (maten herhaald volgens
het plan). Geen afhankelijkheid van MusicXML-<repeat> voor de speelduur.
MSCZ (layout=partituur)¶
Bladvorm: elk @blok één keer in bronvolgorde (tenzij vangnet expand).
Geen blok-id-labels boven de maten — navigatietekens zijn genoeg.
De exporter kiest automatisch (eerste match wint):
| Prioriteit | Patroon | Bladtekens |
|---|---|---|
| 1 | plan = blokvolgorde | niets |
| 2 | (a,b)×n + (a,c) (3 blokken) |
\|: a \|1..n. b :\| n+1. c (volta) |
| 3 | prefix + X×n + suffix (n≥2) |
\|: … :\| (+ times als n>2) |
| 4 | blad[0..ds] + blad[segno..fine] |
Segno + Fine + D.S. al Fine (of D.C. al Fine) |
| 5 | blad[0..ds] + blad[segno..tocoda] + blad[coda..] |
Segno + To Coda + Coda + D.S. al Coda (of D.C. al Coda) |
| 6 | rest | expand: speelplan uitgeschreven op het blad |
Coria (playback) schrijft het speelplan altijd volledig uit (geen jumps).
D.S./D.C. al Coda (prioriteit 5) — planvorm en bladtekens:
| Plan (blok-ids) | Bladvolgorde | Bladtekens |
|---|---|---|
1, 2, 3, 2, 4 |
1 2 3 4 | Segno bij start 2; To Coda einde 2; D.S. al Coda einde 3; Coda-teken bij 4 |
intro, mid, bridge, intro, mid, coda |
intro mid bridge coda | To Coda einde mid; D.C. al Coda einde bridge; Coda-teken bij coda (geen segno) |
Drie bladblokken met plan (a,b)+(a,c) valt onder volta (prioriteit 2),
niet onder D.C. al Coda — dezelfde klinkende volgorde, andere bladvorm.
Eisen: To Coda staat strikt vóór het D.S./D.C.-blok; coda = rest van het blad
na dat blok (minstens één speelblok). Disjunct van prioriteit 4 (Fine herhaalt
alleen binnen [0..ds]). Geneste combinaties (volta+D.S., dubbele sprongen)
zonder één zo’n bladpatroon → prioriteit 6 (expand).
Voorbeeld¶
@title "Alleluia - Toon 1"
@do F4
@mode major
@speelplan 1, 2, 1, 2, 1, 3
@oct S=0 A=0 T=-1 B=-1
@blok 1
L: Al le.&. lu_ i_ a_ … |
S-: - -&/ / \ … |
…
@mscz-newline
@blok 2
L: Al-&-&-&.&.&- … |
…
@blok 3
L: Al-&-&-&.&.&- … ||
…
- Blad (MSCZ):
|:1|1,2.2:|3.3. - Coria (MXL): 1+2+1+2+1+3 achter elkaar.
Trisagion-vorm (nls-1, nls-2, ksl, doxologie, nls-2, ksl): Segno bij
nls-2, Fine aan het eind van ksl, D.S. al Fine na doxologie.
Coda-vorm (1, 2, 3, 2, 4): Segno bij 2, To Coda eind 2, D.S. al Coda
na 3, Coda-teken bij 4.
Bewust later¶
- Geneste combinatie-jumps (bijv. volta + D.S.) zonder één herkenbaar bladpatroon — blijven expand; aparte matcher alleen bij eenduidig corpus-nut.
- CLI-vlag voor compacte MXL (alleen als de consumer herhalingen begrijpt).
- Speelplan over meerdere bestanden; geneste plannen;
until: finalzoals templates.