Skip to content

feat: tablature staff tuning in mx::api - #469

Open
webern wants to merge 1 commit into
m/mxdev-keyprintfrom
m/mxdev-stafftune
Open

webern wants to merge 1 commit into
m/mxdev-keyprintfrom
m/mxdev-stafftune

Conversation

@webern

@webern webern commented Oct 28, 2026 •

Copy link
Copy Markdown
Owner

Summary

<staff-details> kept <staff-lines> but dropped every <staff-tuning>, so a guitar tab came
back with its lines and no record of what the strings are tuned to.

StaffData gains staffTunings, a list of the new StaffTuningData (line, step, alter, cents,
octave). Like staffLines, it is set on the measure whose attributes carry the staff-details and
is not carried forward to later measures. The reader honours the number attribute on
<staff-details>, and reads a <staff-details> that holds only tunings. The writer emits the
tunings between <staff-lines> and <staff-size>, as the schema orders them.

The tuning-step / tuning-alter / tuning-octave translation is shared with the existing scordatura
reader and writer through a small header-only helper (TuningFunctions.h), with no change to
scordatura behavior or diagnostics. A separate StaffTuningData type rather than reusing
AccordData: a staff tuning has a required line, an accord an optional string number.

musuite/testTablature1.xml, testTablature2.xml and testTablature3.xml now round-trip and are
pinned in the baseline. lysuite/ly71e_TabStaves.xml and recsuite/BrookeWestSample.xml lose
their tuning differences but still fail on other staff-details content (staff-type, capo,
show-frets, line-detail), which is not modeled here.

Testing

  • New MeasureDataTest cases: tuning round trip, alter and cents, tunings without staff-lines,
    two staves; new MeasureWriterTest case for the written <staff-tuning>
  • Existing scordatura tests pass unchanged
  • make api-test passes (6195 assertions in 716 test cases)
  • make api-roundtrip passes, 445 of 445 pinned files
  • make api-roundtrip-discover: 445 pass, no file that passed before now fails
  • Unity build (CMAKE_UNITY_BUILD_BATCH_SIZE=0) of the mx target compiles
  • make fmt-check passes

References

@webern webern added feature new feature request non-breaking fixes or implementation that do not require breaking changes api Affects the mx::api layer impl Affects the mx::impl layer ai Issues opened by, or through, a coding agent. labels Oct 28, 2026
@webern
webern added this pull request to stack #475 October 28, 2026 20:08
@webern
webern marked this pull request as ready for review October 29, 2026 07:10
@webern webern changed the title feat: round-trip tablature staff tuning in mx::api feat: tablature staff tuning in mx::api Oct 30, 2026
<staff-details> kept <staff-lines> but dropped every <staff-tuning>, so a
guitar tab came back with its lines and no record of what the strings are
tuned to.

StaffData gains staffTunings, a list of the new StaffTuningData (line, step,
alter, cents, octave). Like staffLines, it is set on the measure whose
attributes carry the staff-details. The reader fills it and the writer emits
the tunings between staff-lines and staff-size.

The tuning-step, tuning-alter and tuning-octave translation is shared with
the existing scordatura reader and writer through TuningFunctions.h, with no
change to scordatura behavior or diagnostics.

musuite/testTablature1.xml, testTablature2.xml and testTablature3.xml now
round-trip and are pinned in the baseline.
@webern
webern force-pushed the m/mxdev-stafftune branch from 6dd2e37 to 67358c1 Compare October 30, 2026 08:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai Issues opened by, or through, a coding agent. api Affects the mx::api layer feature new feature request impl Affects the mx::impl layer non-breaking fixes or implementation that do not require breaking changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant