Skip to content

Add Staccato, Accent, and Tenuto ornaments - #35

Merged
denmase merged 1 commit into
mainfrom
claude/noteeditor-translate-english-fworkt
Sep 20, 2026
Merged

denmase merged 1 commit into
mainfrom
claude/noteeditor-translate-english-fworkt

Conversation

@denmase

@denmase denmase commented Sep 20, 2026

Copy link
Copy Markdown
Owner

Summary

Continuing the Indonesian notasi angka gap list (ROADMAP.md), the rest of phase 4 (the dead
OrnamentType articulation values), minus Glissando.

  • Added Staccato, Accent, and Tenuto, each wired through the full ribbon + Edit-menu +
    context-menu pattern (matching Grace/Trill/Turn/Mordent/Fermata/BreathMark), with a new
    placeholder glyph each (stac/acc/ten, following this codebase's existing text-abbreviation
    convention rather than real notation symbols -- see the class doc comment on
    OrnamentService.GetPlaceholderGlyph).
  • Playback effects live in a new OrnamentPlaybackService.ApplyArticulation, a single
    post-process pass applied uniformly over whatever events a note already expanded into (a plain
    note, or every segment of a trill/turn/mordent/grace note) rather than a new branch in the
    ornament-expansion if/else-if chain: staccato halves the sounding duration (the next note's
    start time comes from the nominal duration elsewhere in the schedule, so this only leaves a
    gap, never shifts timing), accent and tenuto boost velocity (accent more than tenuto), both
    clamped to the MIDI max (127).
  • Layout: all three are registered into NoteTopAnnotationPlanner's existing
    HasCenterOrnament stacking switch (same mechanism Trill/Turn/Mordent already use) so they
    correctly clear any accidental/octave-dot glyph on the same note, instead of any new
    anchor-position math -- carries none of the layout-band risk flagged elsewhere in ROADMAP.md
    for the accidental slash-convention work.
  • Glissando (pitch-bend between notes) is the one genuinely harder case in this phase and is left
    for its own separate step, per the roadmap's existing note.

Test plan

Verified via the same sandbox pipeline as every prior change this session:

  • dotnet build succeeds against the real project/package graph (0 errors/warnings).
  • dotnet format --verify-no-changes passes on both projects.
  • New xUnit tests cover the glyph mapping, each playback effect individually (staccato's duration
    halving without moving the start time, accent's and tenuto's velocity boosts, tenuto's boost
    being smaller than accent's), staccato composed with a trill (shortens every segment), and
    velocity clamping at the MIDI maximum when accent and tenuto combine.

Not verified in this sandbox: the new glyphs' actual on-screen appearance hasn't been visually
confirmed on a real Windows machine, same caveat as every prior UI change this session. dotnet test itself cannot execute here (no WindowsDesktop runtime pack); real confirmation of the new
tests comes from GitHub Actions CI.


🤖 Generated with Claude Code

https://claude.ai/code/session_01Pguj4XSScE141p1ScWoqEr


Generated by Claude Code

Wires up three more of the dead OrnamentType articulation values
(Glissando remains, left for its own step since pitch-bend is
genuinely harder). Each gets the full ribbon/Edit-menu/context-menu
pattern plus a placeholder glyph (stac/acc/ten, matching this
codebase's existing text-abbreviation convention rather than real
notation symbols).

Playback effects live in OrnamentPlaybackService.ApplyArticulation,
a single post-process pass over whatever events a note already
expanded into (a plain note, or every segment of a trill/turn/
mordent/grace note) rather than a new branch in the ornament
expansion chain: staccato halves the sounding duration (the next
note's start time comes from the nominal duration, so this just
leaves a gap, not a timing shift), accent and tenuto boost velocity
(accent more than tenuto), both clamped to the MIDI max.

For layout, all three are registered into NoteTopAnnotationPlanner's
existing HasCenterOrnament stacking switch (same as Trill/Turn/
Mordent) so they correctly clear any accidental/octave-dot glyph on
the same note, instead of any new anchor-position math -- carries
none of the layout-band risk flagged elsewhere in ROADMAP.md for the
accidental slash-convention work.

Verified via the same sandbox pipeline as every prior change this
session: dotnet build succeeds against the real project/package
graph, dotnet format --verify-no-changes passes on both projects, and
new xUnit tests cover the glyph mapping and each playback effect
(including composed with a trill and clamped at the MIDI velocity
max). dotnet test itself cannot execute in this sandbox; real
confirmation comes from GitHub Actions CI.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pguj4XSScE141p1ScWoqEr
@denmase
denmase merged commit 4f2b759 into main Sep 20, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants