Skip to content

A simple traductor of digital music notation from the MusicXML format to MXN.

Notifications You must be signed in to change notification settings

mateo19182/MusicXML2MXN

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Autor: Mateo Amado Ares

Traductor de documentos en formato musicXML a MNX mediante flex y bison

MusicXML es un formato basado en XML disñado para almacenar notación musical en digital. Cumple una función similar al protocolo MIDI pero es mucho mas legible y sencillo de parsear. MNX es un sucesor diseñado con el objetivo de mejorar en las partes donde MusicXML es mas deficiente y está basado en Json.

No se reconocerán DTDs ya que quedaron deprecados a partir de la version 4.0 de MusicXML. Puede ser tipo o tipo . En principio solo se reconocerá el tipo part-wise ya que el intercambio entre estos dos tipos es trivial (https://www.w3.org/2021/06/musicxml40/listings/timepart.xsl/).

Structura MusicXML: header metadata: , contiene , y (referencia sobre una obra mayor), , , , contiene , , (+info dentro de este) y La mayoría de estos elementos no tiene un equivalente en MNX por lo que los ignoraré. (unico obligatorio del header), contiene los Cada score-part tiene como único elemento obligatorio , el resto son opcionales y no se suelen utilizar por lo que tampoco los reconoceré. La mayoría de ejemplos contienen 1 solo score-part ya que es el caso mas común.

debe tener un atributo con su id, contiene una secuencia de . cada puede contener un elemento , que puede contener: , (que contiene ), (debe contener y <beat-type), ( y )... hay muchos otros elementos que puede haber dentro de un measure pero el mas importante es debe tener como mínimo , y tambien puede contener el elmento , que añade mucha complejidad.

Structura MNX: (json), 3 objetos principales: "MNX", contiene "version" "global", contiene: "measures", que puede contener entre otros: "barline"(contiene "type"), "key" (contiene "fifths") y "time" (contiene "count" y "unit"). "parts" contiene "measures" (diferentes del measures-global, este se denomina measures-part), los cuales decben contener "sequences" "sequences" que contiene "content", el cual contiene los objetos finales, casi siempre de tipo "event" estos objetos contienen "type" (="event" casi siempre), "duration" (que contiene "base"), "notes" (que contiene "pitch" [que contiene "octave", "step" y "alter"])

El lenguaje común ambos sería la notación muscial tradicional, la cúal contiene muchos elementos redundantes pero que deben poder reflejarse en estos formatos por lo que se tienen muchas opcionalidades que no influyen al resultado final de la partitura.

Puede provocar confusión que lo que se denomina measures en MusicXML no corresponde con los measures de MNX sino con los sequences. Otro caso curioso es que la posición de la clave (clef) se codifica al revés, correspondiendo G2 (clave de sol común) en MusicXML con G(-2) en MNX. Se implementaron los acordes (varias notas en un mismo instante de timepo), silencios, alteraciones accidentales (alteraciones no indicadas en la armadura),puntillos. Faltan bastantes otros objetos pero para partituras sencillas es suficiente.

ejemplos: - PRUEBA1 : una nota larga - PRUEBA2 : escala do mayor en dos medidas - PRUEBA3 : acorde y silencio - PRUEBA4 : accidentales - PRUEBA5 : puntillos - PRUEBA6 : error timeswise - PRUEBA7 : error nota incorrecta - PRUEBA8 : error measure sin contenido - PRUEBA9 : error accidental no reconocido - PRUEBA10 : error faltan atributos ...

Para probar ejecutar comando make, que coge xml de la carpeta ejemplos. En la carpeta ejemplos tambien están los resultados correctos de esta traducción, en su mayoría extraídos de https://w3c.github.io/mnx/docs/comparisons/musicxml/

About

A simple traductor of digital music notation from the MusicXML format to MXN.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published