Skip to content

The Score Edit Protocol — User Manual

SEP is how you edit music as text in the Music Theory Assistant. Instead of dragging noteheads, you state what a bar should contain, and the engine rebuilds it exactly. Every edit is checked before it touches your score, every mistake is named with your line number, and every step can be undone.

A score has three layers, and each answers one question:

layerthe question it answersedited as
COREwhich notes, and whenbeats of Takadimi syllables
ROUTEin what order, how many timesrepeat spans and signs
MARKShow it is playedthe printed glyphs, in ASCII

Open a saved piece and press SEP to see all three as tabs — the left pane shows the current state, the right pane is where you type. Or click any bar in the score to open the Inspector, which shows just that bar's layers beside the music.

CORE — the notes

The address system is the score's own: measure → beat → voice. Voices are numbered top-down (v1 is the highest line); the header of the CORE text tells you which is which.

Rhythm is written in Takadimi syllables — you write where notes attack, and durations follow automatically:

Measure 12 -> Beat 1 -> C4-E4-G3 [Ta-di-mi], R [Ta], D3 [Ta], G2 [Ta]
           -> Beat 2 -> ~-G3 [Ta-ka], R [Ta], R [Ta], C3 [Ta]

The essentials:

  • Ta = the beat, di = its half, ka/mi = quarters, Ta-ki-da = a triplet. A dotted-eighth + sixteenth is simply [Ta-mi] — no dot syntax, the attacks say it all.
  • - joins sequential notes (one per syllable). + joins a chord: E3+G3 [Ta].
  • R is a rest — silence is always stated, never assumed.
  • Two continuations, by what the page prints — the ear cannot tell them apart, the ink can:
    • _ — the previous note simply continues, as ONE printed notehead crossing into this beat (held minims, dotted values, syncopation): _ [Ta] holds it for the whole beat, _-E4 [Ta-di] holds through Ta and attacks E4 on di.
    • ~ — the page prints a tied notehead here: two noteheads joined by a tie curve. C4 [Ta] then ~-C4… [Ta-di] writes a crotchet tied to a quaver; the same sound written _ would be one dotted crotchet. Write the ink. (Before Aug 2026 ~ covered both and every rebuild merged the tie away — the m6 lesson.)
  • A grace note is written in brackets in front of the note it decorates:(B4/)A4 is a small B4 crushed onto the A4. The slash is the one you see printed through the stem — leave it out, (B4)A4, for an appoggiatura, which is printed without one. A grace takes no metrical time of its own, so it never gets a syllable of its own: the bracket rides on its host and the host keeps its place in the rhythm. It works in front of a chord too, (A4/)C5+A5, and one grace note may decorate one note.
  • Fermata after a beat's content marks it.
  • The opening pickup bar is addressed as Anacrusis, not measure 1.

The one rule: a CORE edit replaces the whole measure, not just the beats you state — so state every beat and every voice of each measure you touch. A measure you state is rebuilt to be exactly what you wrote; measures you don't mention cannot change — the engine checks this and refuses any edit that would leak outside your stated bars.

If a rhythm doesn't tile its beat, the edit is rejected before anything is written, with the line number and what went wrong. The error message is the lesson — fix the line and apply again.

Config lines — one-line changes

Typed alone in the SEP box, these change the piece's settings:

Key: 0 (C major)        title: New name         Composer: M. Clementi
Year: 1773              Tempo: 96               Transpose: Eb
Brace: on               Stems: rebeam           Marks: clear
Style: classical        Texture: figuration     Notes: <curator note>

Year: renders the composer as "M. Clementi (1773)". Transpose: creates a new transposed copy and leaves the original untouched. Marks: clear strips the whole MARKS layer (notes, ties, fermatas, repeats and route signs all survive). Several config lines can be stacked in one apply.

ROUTE — repeats and jumps

The ROUTE tab states the printed roadmap, one line per sign:

Repeat 3-10 x2 -> Ending 1: 10 | Ending 2: 11
Segno at 5
Fine after 16
D.C. al Fine after 32

A double barline — the printed division between sections — is stated the same way:

Double bar after 18

and the block answers with a derived # SECTIONS: 1-18 | 19-76 line, so the piece's shape is readable at a glance (and the assistant can see it too).

Addresses are the printed measure numbers. Applying a ROUTE replaces the whole route — an omitted repeat means "there is no repeat", which is exactly how you delete a wrong one. You never write the play order yourself: it comes back derived, on the read-only # PATH: line, computed by the same engine that plays the piece. If the path sounds right, the route is right.

MARKS — how it is played

The MARKS convention is simple: the token is what the page prints, in ASCII.

you see on the pageyou type
staccato dot.
staccatissimo.. (doubling = "-issimo", like fff)
tenuto line_
accent>
slur()
crescendo hairpincresc()cresc
diminuendo hairpindim()dim
pedalped()ped
dynamicspp p mp mf f ff sf sfz — as printed
expressive text (italic)"espress."
tempo text (upright)t"Largo"

Marks attach to addresses. Note-marks name a voice; dynamics, hairpins, pedal and text name a staff:

Anacrusis -> Beat 1  -> v1: ( | staff1: t"Largo"
Measure 9 -> Beat 1  -> v1: ( . | staff1: dim(
Measure 9 -> Beat 2  -> staff1: )dim
Measure 12 -> Beat 2.4 -> v1: )

Beat 2.4 means the fourth attack within beat 2 of that voice — when a beat holds several notes, the attack index picks one. In compound meters (6/8), beats are the dotted units, so a bar has beats 1 and 2.

Applying MARKS replaces per measure: a stated measure's marks become exactly your lines; unstated measures never change; Measure 5 -> clear empties one bar. To delete a slur or hairpin, state both of its measures (a bare clear on the other end is enough — and if you forget, the refusal message will tell you). Slurs pair per voice — two voices' overlapping slurs are simply () in each; the engine sorts out the bookkeeping.

One special statement covers the slur that travels between staves — musically one voice singing across both hands:

Slur: Measure 34 Beat 4.2 v1 -> Measure 35 Beat 1 v2

Ornaments, fingerings and other marks the grammar doesn't cover are never deleted by your edits — they ride through untouched and are listed as # WARN lines so you always know they're there.

The Inspector — edit beside the music

Click a bar (shift-click for a range) and the floating Inspector shows that selection's CORE, ROUTE and MARKS — with an edit box that applies in place. The MARKS slice of a selection is itself a valid edit block: what you read is what you'd write. The panel stays open across applies, so the loop is: click, read the page, type, apply, listen.

Undo, always

Every apply — CORE, ROUTE, MARKS or config — saves a revision first. The Undo button walks back one step at a time. Nothing in SEP can half-apply: an edit either passes all its checks and lands whole, or it is refused with the reason named and your score untouched.

What SEP cannot carry

The protocol is honest about its edges: when the grammar has no word for something, the engine keeps the music safe and says so with a # WARN line — never silently. What still lives beyond the grammar:

  • More than one grace note on the same note, and a grace note with nothing after it to decorate. SEP writes one grace per host — (B4/)A4 — which is what the scores on this shelf use. A cluster of two or more crushed into a single note has no bracket yet: those notes stay safe in the stored score, a WARN names the bar and voice, and a CORE edit that restates that bar will drop them from the text.

  • Ties across voices. ~ sustains a note within its own voice. When a printed tie starts in one voice and lands in another, the text shows the arrival as a re-attacked pitch plus # WARN: TIED FROM ANOTHER VOICE. The stored score still holds the true tie — the WARN marks a place where the text and the score legitimately differ. Don't edit the bar just to make the warning go away: that would write the simplified text back into the score and lose the tie for real.

  • (Mid-score pickup bars used to live on this list — no longer. A bar that starts past beat 1 now keeps its start through every edit and rebuild: the engine writes the position into the file itself. To make a partial bar a true pickup, restate it with its real start — Measure 9 -> Beat 2 -> … — and it stays. An unmarked partial bar reads honestly as starting at beat 1, its silence written out as rests.)

  • (Grace notes used to live on this list too — no longer. A single grace note now has a bracket of its own, (B4/)A4, and survives a restated bar like any other note.)

These are gaps in the text, not in your score: the music itself is stored complete, and the WARN lines exist so nothing is lost without you knowing.

Three habits that make SEP pleasant

  1. Read before you write. The left pane (or the Inspector slice) is always the current truth — copy it, edit the lines, apply.
  2. Trust the refusals. They are not errors so much as the protocol teaching you its grammar; each one names the line, the address, or the dangling end.
  3. Verify by ear. Every apply re-renders and the playback is derived from the same data you just edited. If it sounds right and looks right, it is right — and it's saved.

Protocols are MIT Licensed. Platform code is AGPL.