[HN Gopher] MusicXML and Percussion Notation
       ___________________________________________________________________
        
       MusicXML and Percussion Notation
        
       Author : pcr910303
       Score  : 75 points
       Date   : 2021-08-08 13:17 UTC (9 hours ago)
        
 (HTM) web link (v5.chriskrycho.com)
 (TXT) w3m dump (v5.chriskrycho.com)
        
       | specialist wrote:
       | Gah. Data translation, between almost matching schemas
       | (ontologies), has been 1/2 of my professional career. Probably.
       | 
       | I don't know if this applies: S-notation for turntablism (DJing)
       | represents pitch. But I couldn't quickly find any XML schemas for
       | S-notation.
        
         | capableweb wrote:
         | > S-notation for turntablism (DJing) represents pitch. But I
         | couldn't quickly find any XML schemas for S-notation.
         | 
         | As a lisp hacker and musician, I quickly got confused what you
         | meant and first read
         | "S-expressions"(https://en.wikipedia.org/wiki/S-expression).
         | 
         | For others (as HN has quite a few people with the same profile
         | as me), S-notation here refers to "transcription method which
         | uses an own repertoire of notational symbols to describe the
         | techniques of a turntablist", see
         | http://www.alexandersonnenfeld.com/fileadmin/user_upload/S-N...
        
           | specialist wrote:
           | Gah. You're right. I should have provided cites. Thanks.
        
         | chriskrycho wrote:
         | The worst part about it is: same schema/ontology, but
         | _different (legitimate!) choices within it_! Cue sobbing emoji.
        
       | jacquesm wrote:
       | I've looked at MusicXML as an intermediary format to convert to
       | from MIDI but found it to be overly complex and ended up just
       | using the MIDI data in JSON form directly. This worked well
       | except of course for the fact that MIDI is quite lossy (rests
       | aren't in there, slurs are implicit, there are no 'beat' markers
       | and so on).
       | 
       | Music formats are tricky, some are more suitable for performance,
       | some more for archival storage or composition. It's enough to
       | drive you bonkers at times, especially if you want exact
       | representation and slowly you realize you are just not going to
       | get it perfect no matter how hard you try.
        
         | gnulinux wrote:
         | The reality is MIDI is a terrible abstraction for anything
         | other than keyboard (piano, organ, harpsichord, celeste
         | etc...). If you have some really good soundfont files you can
         | produce very realistic sounding piano performances if you tweak
         | each note hard enough. At the end of the day the input into
         | acoustic piano device and MIDI are the same (in fact in
         | MIDINyou determine the velocity while turning a note off, which
         | wouldn't have an acoustic effect on a piano)
         | 
         | But for all other instuments especially those without "frets"
         | e.g. violin, cello etc MIDI will sound nothing even close to a
         | real insturment. Even if you buy thousands of $ worth
         | soundfonts, it'll sound like MIDI. When I say this to my
         | musician friends they keep saying "well duh computer just can't
         | play a piece like human". Well, that may be the case but that's
         | an entirely different topic. As a violinist and a software
         | engineer the abstraction I would use for my own insturment
         | would be:
         | 
         | 4 on/off signals each for a string A global state about how far
         | on the board each finger is (if it's pressing down, otherwise
         | null). For each on signal: (1) Contact position of the bow, (2)
         | velocity of the bow.
         | 
         | And this doesn't even account for artificial harmonics, pizz
         | etc many different timbres you can produce from an acoustic
         | violin.
         | 
         | The reason I'm writing all this is because I'm trying to make
         | the case that MIDI is useful for the opposite of what you're
         | doing. Going from MIDI to MusicXML is not useful since MusicXML
         | is a format meant for composers to express music for all
         | insturments (well, in MuseScore, Dorico etc, and they
         | eventually generate Music XML)
         | 
         | So in order to use MusicXML to its full potential, try
         | generating MIDI from MusicXML. This way you can generate very
         | realistic sounding music even for insturments like violin (but
         | it won't look like a generic Midi as you need multiple channels
         | for each insturment).
         | 
         | This is how I compose music myself. I write it in MuseScore3
         | with heavily notated notation (including human readable notes
         | like "slower" etc) and then generate wav from musicXML file.
         | Try it!
        
           | chriskrycho wrote:
           | Honestly it's astounding just how good the representations
           | from top notch virtual instrument libraries can be given the
           | very real limitations of MIDI. The combination of key-
           | switched articulations with velocity-driven patch variation
           | plus clever legato programming means that a well-practiced
           | DAW programmer can get performances out of libraries that
           | blow my mind. Do they sound like a live performance? Not
           | quite (and less so for solos or small chamber ensembles than
           | for larger ensembles). They sound far better than it would
           | seem they have any right to, though. And the upside to the
           | MIDI encoding is that while you're absolutely right that it
           | isn't a natural fit for e.g. violins (where your suggested
           | approach could be a much closer representation), they are
           | _universal_ and therefore much more transferable.
           | 
           | All of that mixed praise of MIDI notwithstanding, I basically
           | agree with the take here. I (self)-published [1] a fanfare I
           | wrote last year taking the path from a score authored in
           | Dorico to MIDI to Logic Pro and the result came out
           | surprisingly well out of the gate, and with much tweaking
           | ended up in something that if I didn't love, I also didn't
           | _absolutely loathe_ , which had been my previous experience
           | of these sorts of things.
           | 
           | In any case, the thought of trying to transfer between tools
           | like MuseScore, Dorico, StaffPad, etc. with MIDI just gives
           | me the shudders: it's absolutely the wrong tool for the job,
           | where (something like) MusicXML is the _right_ tool for the
           | job, because it's designed from the start to represent
           | notation rather than to represent _sound_.
           | 
           | [1]: https://songwhip.com/chriskrycho/fanfare-for-a-new-era-
           | of-am...
        
             | gnulinux wrote:
             | Oh I think my post is possibly misunderstood? I don't
             | generate wav within MuseScore. I use MuseScore to generate
             | Music XML. Then from that data I have a script that creates
             | relatively more realistic sound using many soundfonts (I
             | created a soundfonts for each of my violin strings, and for
             | each articulation etc). So although the last operation is
             | MIDI->wav I don't use the standard midi rendering. This way
             | I can implement special logic for stuff like triple stops,
             | quadruple stops, expressiveness etc.
             | 
             | EDIT: I use midi only to get samples from my sf2 files by
             | using fluidSynth etc.
        
               | chriskrycho wrote:
               | Ah, no, sorry: I took your meaning; I was just talking on
               | a related bunch of things your comment brought to mind!
               | 
               | That's a very interesting approach, though: doing it via
               | script rather than hand-editing in a DAW.
        
         | jraph wrote:
         | > I've looked at MusicXML as an intermediary format to convert
         | to from MIDI
         | 
         | To do what? I'm curious.
        
           | jacquesm wrote:
           | To power pianojacq.com
           | 
           | In essence it allows you to upload a two-handed midi file (or
           | a single track if you trust the splitter ;) ), and then to
           | use the UI to practice the piece. It's slowly building up a
           | following of people that use it for daily practice, and I've
           | built up a small repertoire of suitable files (basically at
           | the speed that I practice the pieces myself).
        
             | jraph wrote:
             | This looks really good. I happen to be learning piano since
             | October and I have a MIDI keyboard. At a first glance, it
             | matches an idea I had. Thanks for building this and for
             | sharing. I might adopt this.
             | 
             | And I fully understand why you wanted to use MusicXML now.
             | It makes me think about the feature in MuseScore that plays
             | the score.
             | 
             | (Frere Jacques as a default, nice touch)
        
               | jacquesm wrote:
               | > Frere Jacques as a default, nice touch
               | 
               | Out of I don't know how many users you're the first one
               | that spotted that :)
               | 
               | Enjoy, if something doesn't work as it should or if I can
               | help out with fixing midi files jam@modularcompany.com
        
         | em3rgent0rdr wrote:
         | to be clear: MusicXML is a format representing musical
         | _notation_. MIDI is a format representing musical
         | _performance_.
         | 
         | MIDI doesn't do a good job in communicating to a human reader,
         | for which musical notation is much more useful.
        
       | encryptluks2 wrote:
       | I usually find XML to be too verbose. I would love to see more
       | music notation markup formats.
        
         | [deleted]
        
         | tannhaeuser wrote:
         | I guess the difficult part is development of the actual
         | music/audio software and layout into sheet music/conventional
         | notation, with the representation format only a secondary
         | concern. No idea if MusicXML is widely used, but I'd imagine as
         | long as it does its job of exchanging scores across apps,
         | nobody will be too enthusiastic to reinvent new ones all the
         | time just because.
         | 
         | However, you might find of interest that Charles Goldfarb, the
         | father of SGML (and thus HTML and XML), also being a Jazz
         | musician and lawyer, authored SMDL [1], a format that would
         | later generalize to HyTime. Though knowing just a bit of
         | HyTime, I think you'll be thoroughly disappointed when looking
         | for non-verboseness ;), HyTime describing everything in markup
         | (SGML/XML) and being regarded so impossibly complex a
         | multimedia description format that only a single, and
         | necessarily incomplete implementation was ever started (by
         | Fujitsu).
         | 
         | Parts of HyTime are fascinating, though. Among other things, it
         | generalizes the concept of a hyperlink into having a time
         | dimension.
         | 
         | [1]: http://www.sgmlsource.com/history/hthist.htm
        
           | chriskrycho wrote:
           | MusicXML is indeed widely used, and it is basically _the_
           | standard interchange format for music notation apps. Every
           | major app I can think of supports it--certainly the "big
           | four" of Dorico, Sibelius, Finale, and MuseScore, as well as
           | other apps like Notion, StaffPad, etc.
           | 
           | I was thinking of what would make the interchange format
           | _better_ would be after writing up this post, and my honest
           | conclusion was that MusicXML itself is pretty good. There are
           | standardization choices you could make within the format
           | itself (as alluded to in the post) which would help with
           | interchange, but the definition is reasonable throughout. The
           | thing that is hard is simply that _XML_ is hard: lots of
           | tools out there support subsets of it, but nearly everything
           | XML-oriented ends up being either Java or some kind of libxml
           | wrapper. (To my surprise, there really isn't a ton even in
           | the Rust space which would seem to be well-suited to this
           | kind of thing. DTD support took ages to show up anywhere, for
           | example.) While switching to some kind of JSON schema would
           | mitigate the XML problem, getting all the vendors to adopt it
           | would be quite a battle, I expect.
        
             | tannhaeuser wrote:
             | That makes sense. But isn't Rust able to just link against
             | libxml2, Xerces C++, or expat?
        
               | steveklabnik wrote:
               | Yes, Rust can link against libxml2, at least.
        
               | chriskrycho wrote:
               | Yep, and it totally gets the job done. (Hey, Steve!) I'm
               | just perpetually surprised that 6 years past 1.0 we don't
               | have a Rust native implementation of the equivalent. What
               | I've slowly concluded is: we as an industry more broadly
               | _just don't do that much XML anymore_ , so the incentives
               | aren't there. (And here I mean XML _as XML_. Obviously we
               | have XML-related stuff everywhere in the form of HTML,
               | but it's a bit of a different world.) And the other piece
               | is that for the XML we _do_ have, the Rust
               | implementations and the binding to libxml are _good
               | enough_.
        
               | steveklabnik wrote:
               | Hey hey! :)
               | 
               | I would agree with this post, for sure. The surprise, and
               | the analysis both. There is of course always a bit of
               | chicken and egg with this kind of thing; people don't use
               | tons of XML with Rust because there aren't good
               | libraries, and good libraries don't exist because people
               | don't use a ton of XML with Rust. Normally this stalemate
               | is broken by _something_ being useful enough for someone
               | to go through and implement a library, but I guess that
               | hasn 't come up yet, or that the bindings are indeed good
               | enough.
        
       ___________________________________________________________________
       (page generated 2021-08-08 23:01 UTC)