w3c / mnx

Music Notation CG next-generation music markup proposal.
176 stars 19 forks source link

Staffline positioning and numbering #315

Closed mscuthbert closed 11 months ago

mscuthbert commented 1 year ago

In W3C chairs discussion meeting we all expressed a collective wish to change in MNX how staff lines are considered compared to MusicXML.

In traditional 5-line staves, it's easy to decide that line 1 (or 0) is the lowest line or the middle line or the top line -- whatever is chosen it's easier to have programmers adjust to.

When other number of staff-lines are used, then problems arise. Especially in positioning of whole/half rests, etc.

We propose that the middle line of a 5-line staff be called in MNX staff-position 0. And that the difference between staff lines be 2 -- so that fractional numbers are not used for normal staff positions.

This means that a quarter rest is default on staff-position 0 in a one-line staff, a 5-line staff, a 2-line staff. etc. And that it will be able to specify a transition from a one-line staff to a 2-line staff where the former staff is equally positioned in the center of the 2-line staff.

One change that will go against MusicXML spec and common usage is that Clefs should use the same staff-position element. So that a treble clef will be a G clef on staff-position -2, and a bass clef is staff-position 2. (Alto clef, Percussion = staff-position 0).

Comments!

adrianholovaty commented 1 year ago

All sounds good to me. We'd need to change the existing spec so that the clef object has a "position" instead of "line" (see here), but that's an easy change and worth doing for consistency throughout the format.

For rest position specifically, this could go into the rest object. Here's an example event:

{
  "type": "event",
  "duration": {"base": "eighth"},
  "rest": {"position": -4}
}
mscuthbert commented 1 year ago

If not specified by position (encouraged NOT to), then consuming applications will be free (perhaps with "best practices" guidelines) to specify positions based on conflicts with other voices or staff lines. For instance, the default for a whole-rest on a 5-line staff should be staff-position 2 (D-line in Treble clef), while all shorter rests are 0. On a 1-line staff, however, a whole-rest is traditionally placed on 0 just like a half-rest. One a 2-line staff, quarter-rests and shorter are traditionally placed at position 0, but half-rests would be placed at -1 and whole-rests at 1 (to align with the staff lines).

The anchor position of the breve rest has traditionally been undefined (is it the center? the top? the bottom?) I suggest that it be positioned at the top so that it be aligned like a whole rest (since most of us never think of them) and placed at position 2 on a 5-line staff, though optimally on a one-line or two-line staff, this means its default position should shift to 1 (straddling the center line in a one-line staff, and filling the gap between the two lines in a two-line staff). Longa rests in old-style multi-measure rests can be positioned like breves (or whole-rests). I've never seen them used (outside of diplomatic medieval transcriptions) in one or two-line staves so it's not a concern.

williamclocksin commented 1 year ago

It is useful if staff positions are not fractional. My software counts lines (origin 0) starting at the uppermost line, because I normally set 6-lines (lute and theorbo tablature) and 4-lines (cittern tablature and neume notation) as well as 5 and 1.  However, staves with an even number of lines don’t have a middle line, so I don’t see the merit in distinguishing the middle line as an origin.  As long as positions of staff elements are known, it doesn’t matter if the position is 0 or 4 or -3.On 24 Oct 2023, at 11:22, Michael Scott Asato Cuthbert @.***> wrote: In W3C chairs discussion meeting we all expressed a collective wish to change in MNX how staff lines are considered compared to MusicXML. In traditional 5-line staves, it's easy to decide that line 1 (or 0) is the lowest line or the middle line or the top line -- whatever is chosen it's easier to have programmers adjust to. When other number of staff-lines are used, then problems arise. Especially in positioning of whole/half rests, etc. We propose that the middle line of a 5-line staff be called in MNX staff-position 0. And that the difference between staff lines be 2 -- so that fractional numbers are not used for normal staff positions. This means that a quarter rest is default on staff-position 0 in a one-line staff, a 5-line staff, a 2-line staff. etc. And that it will be able to specify a transition from a one-line staff to a 2-line staff where the former staff is equally positioned in the center of the 2-line staff. One change that will go against MusicXML spec and common usage is that Clefs should use the same staff-position element. So that a treble clef will be a G clef on staff-position -2, and a bass clef is staff-position 2. (Alto clef, Percussion = staff-position 0). Comments!

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you are subscribed to this thread.Message ID: @.***>

shoogle commented 1 year ago

We propose that the middle line of a 5-line staff be called in MNX staff-position 0. And that the difference between staff lines be 2 -- so that fractional numbers are not used for normal staff positions.

I like this proposal! I've wanted to do it that way for a while now, but I wasn't sure how it would work for percussion staves when the staff lines are not 1sp apart.

Let's say the staff lines are 2sp apart, does that mean the difference is now 4, like in this example, or is it still 2?

What if the staff lines are 1.7sp apart? (I.e. not an integer multiple of the usual distance). Is the position difference 3.4, or is it still 2?

Now, I'm not a percussionist, so I don't know whether you would ever get notes in the spaces on a 2 or 3 line staff. I know it's possible on the 1 and 5 line staves, but I don't know about any of the others. Perhaps it never happens so we don't need to worry? Anyway, I thought I bring it up just in case.

adrianholovaty commented 11 months ago

I've added a new staff position data type in commit c5e1db9013. That also changes the clef object to use the new data type instead of the former "clef line."

With that, I'll mark this as closed! We will of course use this new staff position type for other stuff, but I think we'll approach those as independent issues.