Discussion of to-dos for Jianpu linked staff based on existing PRs

• Aug 20, 2018 - 08:24

Hi!

This is perhaps the latest work about #141581: Add support for Jianpu numbered musical notation.

I haven't posted anything before... But for long, I've been following the PR about Jianpu on Github by byan61 and later the rebased version by ericfont. These two PRs still need improvements and no work has been done ever since.

Now after digging into the codes of current Jianpu implementation, I feel motivated to try to get back on track with this project.

Till now, I have made some improvements according to some suggestions from other users posted in PR's conversations, also with my own ideas(they are listed in the to-dos below). Some of them haven't been finished yet.

Jianpu branch of my fork of MuseScore: https://github.com/songchaow/MuseScore/tree/jianpu

I'll continue to work on this in the future, and I'm looking forward to your suggestions for new to-dos and existing ones.

Thank you for your attention.

Regards,
songchaow.

To-dos

  1. (completed, and always will be done) Rebase to current master branch.

  2. (completed) Remove duplicate standard notes displayed in Jianpu staff.

    duplicate_notes.png

  3. (completed) Replace the font for Jianpu number. (I choose CHWJP4C provided by Rui Fan on this page. I think it's more widely adopted.)

  4. (Fixed) Grace notes don't get smaller in Jianpu staffs.

    gracenotes.png

  5. (Fixed) Locations of underlines are sometimes not correct. Some phenomenon related to this:

    • (solved) The Jianpu beam incorrectly goes down when the notes go above B.

      underline1.PNG

    • (solved) The underline's horizontal position is not correct when occurring in grace notes.

  6. (working) The octave dots below numerical notes should be placed below the underline. However they are above the underline in current implementation.

  7. (not started) Current implementation only supports translating an existing standard staff to a jianpu staff. But the feature of real-time editing a standard staff with the jianpu staff changing in sync is also needed.

Things that need discussion

  1. How should Jianpu staff deal with multi voices?

    As descripted in the Jianpu manual provided by Rui Fan, Jianpu staff sometimes can be split into different voices temporarily, like this:

    temp_multivoice.PNG

    Jianpu uses multi staffs to cope with multi voices. Actually, Voices and staffs are somewhat the same concept in Jianpu. I mean Jianpu doesn't seriously distinguish the two.

    If we use the voice facility in MuseScore, they will be rendered like this(ignore the rectangles, they are used for debugging). It's different from the convention and I don't know if it's OK.

    multi-voices.PNG

  2. Jianpu staff doesn't have Clef types.

    In Wikipedia example shown below(Amazing Grace), the two notes 5 in the first measure are not actually in the same octave.

    In terms of standard staff, a Bass Clef would be added at the front of the third staff. But we cannot tell it from Jianpu staffs as they have no clefs.

    amazinggrace.PNG

    Maybe we can add an invisible clef in front of Jianpu staff.


Comments

I'm very glad to see someone picking this up... hopefully this feature will make it after all.

I don't read C++ very well but the last pull request looked unacceptable to me from a software architecture standpoint (friend classes, needlessly modifying core files etc...) It'll probably be easier to get your branch merged if it is implemented in a nicer way.

"(working) The octave dots below numerical notes should be placed below the underline. However they are above the underline in current implementation." If I recall correctly, this was the previous developer's own non-standard notation in order to better deal with multiple voices or something. Please do change it to standard notation.

"How should Jianpu staff deal with multi voices?"
The way a jianpu staff "splits" into two as in that jianpu manual would not be possible to achieve by using multiple staffs in MuseScore, so I'd suggest treating this as a function that pertains to invidual staffs. Aside from that, we need to distinguish between polyphonic notation (multiple voices; as in that Jianpu Manual example) and chord notation (as in your MuseScore example). With polyphonic notation, I think the staff should temporarily be shown as two staffs (but still be programmed as one staff) with rhythmic beams and bar lines for both voices; with chord notation, there is still only one barline and one rhythmic beaming at the bottom.
One more comment on your picture: as soon as the octave dot of the lower voice disappears, the upper voice drops down, which is confusing to read. The spacing should stay constant, so "reserve" some space for that octave dot even if it is not being used. Then again, you could have multiple octave dots and it would be silly to reserve space for that all of the time. Maybe you should reserve space for dots that are used elsewhere in the same measure or in the same system.

In reply to by Thingy Person

Hi Thingy Person!

Thank you for your suggestion and knowledge of polyphonic notation and chord notation you told. I'm not professional at music theory, and didn't differentiate the two seriously, though I've seen the two are both used widely in reality.

  • friend classes
    lasconic has also deprecated the use of friend classes in PR conversations. I'm not quite experienced at designing class hierarchy. I guess a base class for StandardNote and JianpuNote could be created?

  • Octave dots
    Indeed, the previous developer's non-standard notation(placing dots right after note numbers) may be useful for chord notation, where all notes in one chord share the same rhythmic beaming and octave dots for each note must be notated separately.
    So I'll follow the standard when there's no chords.
    And there's another problem with current implementation: the octave dots are split into two columns(perhaps in order to save space). Here is a case for 2 dots. Very weird I think.
    octavedotshorizontal.PNG
    I'm also working to discard this feature.

  • Multi voices
    Displaying multi staffs for multi voices(polyphonic notation) is ideal for standard. But I'm not sure if I can implement displaying 2 staffs for a few measures while there's only one Staff object in global. I'll look into ways of doing this when it's neccessary.

  • "with chord notation, there is still only one barline and one rhythmic beaming at the bottom."
    It sounds reasonable, and easier to implement, but I still feel confused to have such a new layout for Jianpu. I've never seen multi notes stacked vertically in one staff for Jianpu... It seems Jianpu standard has split staffs for both polyphonic notation and chord notation.
    Anyway, it's a good thought. I'll consider this again when my progress reaches there.

As for the picture with rectangles, it's only for demo and not fully supported yet ;). And yes, the spacing should be constant.

In reply to by songchao

"I'm not quite experienced at designing class hierarchy. I guess a base class for StandardNote and JianpuNote could be created?"
I only have a tiny bit of training in software architecture and absolutely no experience, so you're better at this than me. If it were me, I'd base myself on other staff types like tablature.

"Displaying multi staffs for multi voices(polyphonic notation) is ideal for standard. But I'm not sure if I can implement displaying 2 staffs for a few measures while there's only one Staff object in global. I'll look into ways of doing this when it's neccessary."
Maybe if you think of it not as two staffs, but as two series of notes, with their own beams and barlines, on one staff? Like chord notation, but where there are additional beams between the numbers.

"It sounds reasonable, and easier to implement, but I still feel confused to have such a new layout for Jianpu. I've never seen multi notes stacked vertically in one staff for Jianpu... It seems Jianpu standard has split staffs for both polyphonic notation and chord notation."
Are you sure? Take a look at the accompaniment here:
https://i.pinimg.com/originals/85/17/5c/85175cb0b7bf9ec6e5f35b801dd783c…
Without chord notation, I imagine it would be very annoying to read music for instruments like the zheng, pipa or ruan.

In reply to by Thingy Person

Sorry for the late reply.
"Maybe if you think of it not as two staffs, but as two series of notes, with their own beams and barlines, on one staff? Like chord notation, but where there are additional beams between the numbers."
Yes, this makes sense.

And I was wrong indeed... the score piece you provided is a great reference. Then I can feel free to implement chord notation and other stuffs.

Hi, I had a look through the repository again and love the work that you're doing, but it seems like you're adding quite a bit of jianpu-specific code to some core files. It's probably fine, but maybe now would be a good time to get some attention from the project leaders so that we can be sure that it's being implemented in an acceptable way. I'll spread the word if you want.

Here is a link with the changes so far for my own convenience:

https://github.com/musescore/MuseScore/compare/master...songchaow:jianpu

In reply to by Thingy Person

Hi!

Actually, most changes to core files were committed by byan61.

"maybe now would be a good time to get some attention from the project leaders so that we can be sure that it's being implemented in an acceptable way. "
I'll consider making a PR when I'm done with the seventh point, then other developers will get noticed and discuss ways of implementation.
Meanwhile, you can feel free to encourage others to give advice on current codes. But the current implementation hasn't got significant achievement yet (till now, I've merely made some position adjustments), and might not draw much attention...

Do you still have an unanswered question? Please log in first to post your question.