- From: James Ingram <j.ingram@netcologne.de>
- Date: Wed, 30 Nov 2016 18:02:54 +0100
- To: Wil Macaulay <wil.macaulay@gmail.com>, Joe Berkovitz <joe@noteflight.com>
- Cc: Jeremy Sawruk <jeremy.sawruk@gmail.com>, Laurent Pugin <lxpugin@gmail.com>, Andrew Hankinson <andrew.hankinson@gmail.com>, public-music-notation@w3.org
Hi all, Thanks to you all for your replies. Sorry for the delay. I know you are all very busy, and that this mail is inordinately long. Please take your time before replying (if at all). My answers are all in-line below, in reverse order of your replies: Wil Macaulay Joe Berkovitz Jeremy Sawruk Laurent Pugin and Andrew Hankinson _______________________________ Wil Macaulay said: > Just to note that abc->SVG already exists, as well. See: http://abcnotation.com/software#abc2svg Yes. That application could also export semantically enhanced SVG! :-) _______________________________ Joe Berkovitz: Joe: I think we'll just have to agree to disagree about most of this. I've tried to explain why in the following. Rather than arguing fruitlessly, we could also just wait and see whose intuitions are correct. You said: > This proposal is not new, and the chair's previous invitation to any > interested subgroup stands. It's fine if a subgroup of people want to > develop a clearer notion of how SVG might be annotated with musical > semantic and performance data. The main introduction to this CG at https://www.w3.org/community/music-notation/ begins: > The Music Notation Community Group develops and maintains format and > language specifications for notated music used by web, desktop, and > mobile applications. SVG specializations fall into this category, so I think they should be added to the list of specifications being developed by members of this CG in the paragraph that follows. MusicXML and SMuFL are described there as part of the CG's "initial task". For some further insights about why I think semantically enhanced SVG is so important, see my replies to Jeremy Sawruk, Laurent Pugin and Andrew Hankinson below. Joe again: > [...] I do not believe this approach will address most of the use > cases that we've already catalogued. It only "future-proofs" the > graphical angle of music representation, and will yield documents that > are visually rigid and merely reflect a specific, original graphical > rendering. This defect is a big problem for CMN use cases [...]. I'm afraid I disagree. I think that having a notation-agnostic format for score instantiations would solve a lot of currently insoluble problems. Including many of those in our use-cases and some more. (Linking music notation editors to DAWS, for example.) > [...] the fact that Verovio, or Noteflight, or other notation > rendering systems actually produce such annotated SVG does not, in > itself, argue in favor of adopting SVG as a central construct for > music representation. The fact that all notation editors past and future (and applications like Verovio) could export semantically enhanced SVG does indeed mean that enhanced SVG becomes an ideal candidate for a common export format. Note too, that specific notations are defined by specific applications. It is possible both to include and go beyond CWMN. That's extremely important for the future development of music notation. This CG can't just sit back and assume that music notation suddenly stopped developing in 1970. > Nor does it argue specifically for MEI, MusicXML 3.0, or any of the > existing semantic formats that produce such annotations today. Of course not. Being a specific instantiation of a score, created by some application, semantically enhanced SVG is completely independent of whether the app uses MEI or, MusicXML 3.0 input, or no file input at all. > Given the fact that notational semantics are inherently > non-tree-structured, I doubt that it is easy to make the rendering > include all the original information, though. I don't think notational semantics are inherently non-tree structured. Its no accident that Verovio and I agree so closely about the container structure, even though we are coming from completely different directions. A specific rendering (file instantiation) created by some application may not include all the information in some original input file (there may not even be an original input file), but I do think that semantically enhanced SVG can include all the information that is needed to enable a large number of interesting client applications. All the best, James _______________________________ Jeremy Sawruk: Mr. Sawruk: Again, I think we'll just have to agree to disagree about most of what you said. Some of your concerns are covered in my response to Joe. Here, however, are a couple of interesting points: > [...] I also wonder if it would be possible to preserve enough > semantics to convert a semantically enhanced SVG back to MusicXML or > MEI. I would be very much in favor of a bi-directional approach to > enhance interop. I think that it would indeed be possible to include all of the semantic info from a MusicXML or MEI file in an SVG score instantiation, but that it would then include lots of duplicated information. For example, we don't need to be explicitly told that a pitch is an E-flat if the notation (and possible performance data) are telling us that already. Such a format would have a special @data-svgFileTypeID. Note that applications could only include MusicXML or MEI information that they have actually created or imported, and that they could therefore quite easily export separately. A more likely scenario would be for a semantically enhanced SVG file (containing no redundancies) to be treated like the intermediary result of an optical character recognition application. If the SVG has a known structure (@data-svgFileTypeID), then it would be quite straightforward to write an OCR-like application for converting the file to MusicXML or MEI. Even if the score didn't start out as a MusicXML or MEI file in the first place. :-) > While I think that some form of semantically enhanced SVG or an SVG > with a microformat would be beneficial to some in the CG, I do not > feel that now is the appropriate time work on this. Perhaps this > should be the work of a subcommittee rather than the work of the > entire group? If not now, when? :-) I quite understand that many members of this CG would prefer not to be bothered by continuous updates about work being done on SVG. Probably those who _are_ interested will gather around one or two public GitHub repositories. We could think of this forum (public-music-notation@w3.org) as a central address to which such groups report when they have something to say that may be of general interest. As I said to Joe, I think semantically enhanced SVG should be on the official agenda of this CG, parallel to MusicXML and SMuFL. I agree with you that "SeSVG" is not a perfect name for the specification. You suggested "Musically Enhanced SVG". I think that's too long. How about MusicSVG? Best wishes, James Ingram _______________________________ Laurent Pugin and Andrew Hankinson: Thanks Andrew and Laurent for your replies. This response is a bit long, but I think its the only way to let the sceptics here know what this is all about. We can continue the discussion elsewhere, if you think that would be a good idea. Constructive comments and corrections are welcome from anyone, of course. I've read http://www.terasoft.com.tw/conf/ismir2014/proceedings/T020_221_Paper.pdf and have been investigating the Verovio website. The rism-ch midi-player being used at http://www.verovio.org/midi.xhtml is especially interesting! :-) By way of getting us all on the same page, here's a summary of where I think we are now. .................... Stage 1: pure, semantically enhanced SVG, containing no performance information. Laurent said that Verovio uses the following container hierarchy: <g class="system"> <g class="staff"> <g class="layer"> <g class="chord"> <g class="note"> </g> </g> </g> </g> </g> I'm assuming that there are no redundancies in the files Verovio creates: Only graphical (SVG) elements and containers exist and, where possible, each object has a @class attribute (inherited somehow from the MEI) saying what the object is. Its not clear to me, whether the above container hierarchy is the same, regardless of the MEI specialisation being instantiated. If different MEI specialisations result in different container hierarchies, would it be possible, in addition, to create a special format that could be created from _any_ MEI specialization (and by any other application that exports music scores as SVG)? All SVG files created by Verovio should have a well defined type, defined (and documented) as an attribute of their main <svg> element. (I'd like to call the type attribute @data-scoreType, not @data-svgFileTypeID as in my original posting.). The reason for having such file types is, of course, that it enables interesting client applications to be written. All file types should be documented at the URL given in the @data-scoreType attribute, and that documentation should be as simple as possible. It should not be necessary for someone programming a client application for the universal format to have to know all the ins and outs of MEI specializations. .................... Stage 2: adding synchronized performance information I think it would be quite easy for Verovio to add temporal information to its (purely static graphic) SVG output. Maybe it does already (see below). MIDI and milliseconds are the obvious choice for temporal (performance) information. These are not in the SVG standard, so they need a namespace of their own. The one I use is called "score": <svg xmlns="http://www.w3.org/2000/svg" xmlns:score="http://www.../.../verovio/.../performanceInfo.html" ... data-scoreType="http://www.../verovio/.../standardScoreType.html" ... > (My own xmlns:score documentation can be found quite easily on my web site, but it defines some experimental constructs that would confuse the issues here.) Note that the @data-scoreType could _require_ @xmlns:score to be defined. In that case, the Verovio team's score verification software could also verify that the information in @xmlns:score was being written correctly. Verovio can calculate the (millisecond) durations and MIDI info for a "default performance" from the absolute meanings of the symbols in the score. The synchronization needs to be done at the <g class="chord"> level [1]. Its not necessary to synchronize individual noteheads or other chord components, since they have the same temporal position as their containing chord. The chord's logical x-coordinate and its (ms) duration and/or (ms) position from the beginning of the score, can be written like this: <g class="chord" score:alignmentX="1234.5678" score:duration=567> or <g class="chord" score:alignmentX="1234.5678" score:position=3859> In my own approach, all the timing and MIDI information is stored in special element inside the chord group [2]: <g class="chord" score:alignmentX="1234.5678"> <score:midiChord> ... </score:midiChord> <g class="graphics"> ... </g> </g> In either case, the file's graphics can be edited independently of the performance information. Using appropriate software, annotations can be added, music examples extracted etc. Note that (if this is CWMN) graphics for objects such as tuplet brackets or augmentation dots will be included in the file, but that they are not given any temporal attributes since the durations have already been calculated and are stored in the chord symbols. Notations that don't use tuplet brackets or augmentation dots for calculating durations can still use the same code for performing the score. (The performance software only needs to access information inside the score namespace.) As I understand it, the rism-ch midi-player uses standard MIDI files, and supplies callback functions that link chords in the SVG to specific times in the MIDI file. The chords must somehow have temporal attributes that allow this. The demo application simply changes the colour of the noteheads to indicate performance synchronization, so the midi-player probably doesn't know where those noteheads are. I prefer to see a vertical cursor, so I'd like to know each chord's logical x-position. The rism-ch midi-player can be found at the following locations: Demo: http://www.verovio.org/midi.xhtml GitHub: https://github.com/rism-ch/midi-player. Note also, that it would be feasible to allow for more than one real performance to be synchronized with the same graphics. The "default performance", calculated from the absolute meanings of the symbols in the score, is only one of many possible real interpretations. We no longer have to think of real performances as having to differ in some undefined way from the default performance. It becomes possible to imagine teaching comparative performance practice for particular scores, ornament symbols etc. (using _any_ notation) using such files. Conversely, it also becomes possible to create parallel files in which the same real performance(s) is (are) notated using different graphics. Verovio can probably create transposed CWMN scores, but other software could extract the MIDI info, and synchronize it with completely different notations. My own programs, for example, use a notation that maps durations directly to simple duration class symbols (each duration class representing an octave of duration), so I could re-notate a Ferneyhough score using the MIDI file that Verovio created... I think performance practice can only be learned by listening. Scores should only be an aide-memoire. Ferneyhough's scores are screaming at us that something went wrong with music notation in the 20th century. He's an important Artist. As I said: corrections and constructive comments would be very welcome! All the best, James [1] Here's a digression about event symbols: All forms of writing have a graphic container structure that just sits on the page, outside time: Strictly speaking, we read chunks of information (symbols). We do not read in one direction parallel to absolute time, like an analog tape-recorder. The lowest level symbols in such a structure are those that we can read "at a glance". In ordinary text, these are words (not characters). In CWMN, these are chord symbols (not notes or noteheads). In music notation in general, we can call such symbols "event-symbols". Event-symbols are (graphical) _objects_ that represent (temporal) _events_. A sequence of event symbol objects on the page defines a corresponding sequence of temporal events. In CWMN, the relative left->right position corresponds to before->after. Both the graphics and temporal info for these event-symbols can be complex. For example, CWMN chord symbols are complex combinations of characters and lines (noteheads, stem, accidentals, augmentation dots, articulations, ornament signs etc.) that can represent very complex temporal events (ornaments, pitch inflexions, dynamic envelopes etc.) Event symbols can also be neumes, tablatures or Asian characters. Sometimes (e.g. when writing for transposing instruments), its not even clear whether the symbols represent pitch or fingering. Keeping the graphics independent of the meaning solves all these problems. [2] I'm using the Web MIDI API (see http://caniuse.com/#feat=midi), which allows MIDI input and output devices to be selected and individual MIDI messages to be sent. So it is useful to have the raw MIDI data available in Javascript (the data can be more easily manipulated than if the data is in a binary MIDI file). But synchronizing with multiple performances would probably be a lot easier if they were stored in Standard MIDI files (Verovio's approach). Could the rism-ch midi-player be adapted to use MIDI input and output devices? Maybe this is a case for different file types. Maybe the target audience for apps that teach performance practice is not the same as the audience that needs to use MIDI input and output devices. This needs thinking about... j -- http://james-ingram-act-two.de https://github.com/notator
Received on Wednesday, 30 November 2016 17:03:51 UTC