On Displaying Musical Scores » History » Version 10

Chris Cannam, 2016-01-07 04:43 PM

1 1 Chris Cannam
h1. On Displaying Musical Scores
2 1 Chris Cannam
3 3 Chris Cannam
h3. Use cases
4 1 Chris Cannam
5 3 Chris Cannam
 # Illustrating recordings by attaching a full publication-style score
6 4 Chris Cannam
 ** ...where the score is not intended to be read closely, but rather used as a sort of key-frame reference for navigating the audio
7 4 Chris Cannam
 ** ...or where user expects to be able to zoom the score far enough to actually read it properly
8 3 Chris Cannam
 # Linear rather than page-based score that a user is expected to read, e.g. to play along with, or to check specific notes in a transcription or spectrogram
9 3 Chris Cannam
 # On-the-fly score display of transcriptions and related annotation layers (score from MIDI)
10 3 Chris Cannam
 # Score editing for correction (making usually small edits to substantial scores)
11 3 Chris Cannam
 # Score editing for annotation (generating small scores from scratch)
12 1 Chris Cannam
13 3 Chris Cannam
h3. Sources of score data
14 1 Chris Cannam
15 3 Chris Cannam
 * Score-encoding formats, e.g. MusicXML, MEI
16 3 Chris Cannam
 * PDFs of published scores
17 3 Chris Cannam
 * "Tidy" MIDI files and other cleaned-up annotation data (e.g. chord charts)
18 3 Chris Cannam
 * Untidy output from transcription methods and the like, in MIDI or MIDI-like formats
19 1 Chris Cannam
20 3 Chris Cannam
h3. Possible implementations
21 3 Chris Cannam
22 7 Chris Cannam
 # Integrate code from an existing application (most likely one that is also in C++ using Qt)
23 1 Chris Cannam
 ** Suitable for all use cases, with limitation of requiring score to be available in a digital format
24 7 Chris Cannam
 ** Only possibility if editing is required (but note that adding editing is likely to be very involved even with this approach, maybe prohibitively so)
25 3 Chris Cannam
 ** MuseScore -- most obvious option
26 1 Chris Cannam
 ** Rosegarden -- has a notation editor component but is primarily a sequencer (but does have the advantage that I wrote much of it and so know a lot of the code!)
27 3 Chris Cannam
28 7 Chris Cannam
 # Invoke external application to render to PDF or sequence of images, then display PDF/image pages
29 5 Chris Cannam
 ** Suitable for use case 1; unsuitable for use cases 2, 4, 5; uncertain for use case 3
30 3 Chris Cannam
 ** Replaces problem of "integrating score display" with problem of "integrating PDF/image page display"
31 6 Chris Cannam
 ** Could use MuseScore as the external application (it has a batch mode) or Lilypond, or something else like VexFlow, or more than one option depending on platform & input format
32 6 Chris Cannam
 ** Has advantage of also introducing ability to display other PDF material than scores
33 5 Chris Cannam
 ** Adds access to non-digital (scanned) score content
34 3 Chris Cannam
35 8 Chris Cannam
Both have their technical challenges, but there is also a conceptual question about how to align score pages or bars in the time axis (more on this below).
36 2 Chris Cannam
37 8 Chris Cannam
h3. Which code to use for option 1?
38 1 Chris Cannam
39 8 Chris Cannam
I think the only reasonable options are MuseScore and Rosegarden. MuseScore produces much better output and has fairly well-organised code. Rosegarden has a more limited renderer and currently lacks MusicXML import. The only reason to consider anything other than MuseScore is that I'm quite familiar with the Rosegarden code myself already. At any rate, Rosegarden makes a useful baseline comparison.
40 1 Chris Cannam
41 8 Chris Cannam
Here are some examples, deliberately choosing small sizes in order to see how a zoomed-out scale looks, and considering both linear and paginated layouts.
42 8 Chris Cannam
43 8 Chris Cannam
h4. Linear layouts with "good" source material
44 8 Chris Cannam
45 8 Chris Cannam
Both applications are displaying their own example files here, so we have two different pieces but both are pieces that are expected to work well.
46 8 Chris Cannam
47 8 Chris Cannam
h5. MuseScore
48 8 Chris Cannam
49 2 Chris Cannam
!/attachments/download/1776/musescore-tidy-linear.png!
50 1 Chris Cannam
51 8 Chris Cannam
h5. Rosegarden
52 2 Chris Cannam
53 1 Chris Cannam
!/attachments/download/1779/rosegarden-tidy-linear.png!
54 1 Chris Cannam
55 8 Chris Cannam
h4. Paginated layouts with "good" source material
56 1 Chris Cannam
57 8 Chris Cannam
Same pieces as above.
58 2 Chris Cannam
59 8 Chris Cannam
h5. MuseScore
60 8 Chris Cannam
61 2 Chris Cannam
!/attachments/download/1778/musescore-tidy-paginated.png!
62 1 Chris Cannam
63 8 Chris Cannam
h5. Rosegarden
64 2 Chris Cannam
65 1 Chris Cannam
!/attachments/download/1780/rosegarden-tidy-paginated.png!
66 2 Chris Cannam
67 8 Chris Cannam
h4. Imported from an approximate transcription
68 2 Chris Cannam
69 10 Chris Cannam
This is an input that is not expected to work well -- a transcription obtained from the Silvet Vamp plugin on one of the MAPS database recordings, exported to MIDI. Shown below is the result of taking that MIDI file as exported by Sonic Visualiser and importing it into each application with the default quantization/tidying settings. Despite the substantially different appearances of the two, these are both displaying the same MIDI data. See if you can identify the piece!
70 2 Chris Cannam
71 8 Chris Cannam
h5. MuseScore
72 8 Chris Cannam
73 2 Chris Cannam
!/attachments/download/1775/musescore-messy.png!
74 2 Chris Cannam
75 8 Chris Cannam
h5. Rosegarden
76 1 Chris Cannam
77 1 Chris Cannam
!/attachments/download/1777/rosegarden-messy.png!