humdrum-tools / verovio-humdrum-viewer

Verovio Humdrum Viewer
http://verovio.humdrum.org
37 stars 9 forks source link

Implement autodetect of spine-order to score-order mapping #831

Closed craigsapp closed 11 months ago

craigsapp commented 11 months ago

Currently the first spine on the line is the bottom staff of a score. Allow for auto detecting of the oder of the score based on *staff# values in the header of the Humdrum score. If there is a line of *staff# where the lowest number is less than the last *staff# on the line, then assume that the first spine on the line is the first staff in the score instead.

craigsapp commented 11 months ago

Implemented in commit https://github.com/rism-digital/verovio/commit/abb39935b11b1c87891ea98b1b6a454d246d4b07

Examples:

By default the left-most spine is the bottom staff in a graphical score:

**kern  **text  **kern  **text  **kern  **text
*clefF4 *   *clefC3 *   *clefG2 *
=   =   =   =   =   =
1C  3   1c  2   1cc 1
=   =   =   =   =   =
*-  *-  *-  *-  *-  *-

Renders as:

Screenshot 2023-08-17 at 14 27 01

Optionally. *staff# tandem interpretations can be added to spines, with *spine1 being the highest staff in a system:

**kern  **text  **kern  **text  **kern  **text
*staff3 *   *staff2 *   *staff1 *
*clefF4 *   *clefC3 *   *clefG2 *
=   =   =   =   =   =
1C  3   1c  2   1cc 1
=   =   =   =   =   =
*-  *-  *-  *-  *-  *-

Renders as:

Screenshot 2023-08-17 at 14 29 20

If *staff# increase from left to right, then the order of the spines to stave mappings are from left-to-right rather than right-to-left:

**kern  **text  **kern  **text  **kern  **text
*staff1 *   *staff2 *   *staff3 *
*clefG2 *   *clefC3 *   *clefF4 *
=   =   =   =   =   =
1cc 1   1c  2   1C  3
=   =   =   =   =   =
*-  *-  *-  *-  *-  *-

Renders as:

Screenshot 2023-08-17 at 14 47 41

If the staff numbers do not increase from left to right, the default order of left-to-right staff mapping will be used:

**kern  **text  **kern  **text  **kern  **text
*staff1 *   *staff3 *   *staff2 *
*clefG2 *   *clefC3 *   *clefF4 *
=   =   =   =   =   =
1cc 1   1c  2   1C  3
=   =   =   =   =   =
*-  *-  *-  *-  *-  *-

Renders as:

Screenshot 2023-08-17 at 14 49 08

In the following case the first spine will be the bottom spine even though it is the highest-pitched spine (*staff# need to be added to automatically reverse the default ordering):

**kern  **text  **kern  **text  **kern  **text
*clefG2 *   *clefC3 *   *clefF4 *
=   =   =   =   =   =
1cc 1   1c  2   1C  3
=   =   =   =   =   =
*-  *-  *-  *-  *-  *-

Renders as:

Screenshot 2023-08-17 at 14 51 42

Non-staff spines are ignored in the analysis of *staff# interpretations.