MusicXML Viewer con AS3/Flex 2

Hace ya más de dos años (ufff…como pasa el tiempo ;)), estuve viendo la forma de crear un visor de partituras para la web que utilizase el standard (hoy más que nunca) MusicXML. En su momento lo dejé por varias razones: la falta de tiempo y las limitaciones del Flash Player por aquel entonces. Gracias a que la pelí­cula ha cambiado mucho en estos dí­as y también a las facilidades que trae Flex 2 y el nuevo Flash Player 9, me puse hace unos dí­as a retomar el tema. Después de algunos quebraderos de cabeza solventados, ya se puede empezar a ver algunos resultados:

(Haz click en la imagen)

La música de la imagen son los primeros 15 compases de la primera voz de la obra “An die ferne Geliebte, Op. 98” de Beethoven, la cuál está disponible desde la página de ejemplos de recordare.com en formatos PDF y MusicXML.

Si comparais el PDF con la imagen anterior podreis comprobar la similitud de la primera voz de la partitura. Como podeis ver todaví­a hay cosas por mejorar (los beams, añadir ligaduras y alguna que otra cosa), pero estoy bastante contento por las posibildades.

Algunas notas sobre cosas que estoy aprendiendo de este proyecto:

  • La nueva clase StringBuilder(flash.util.StringBuilder), es muy útil cuando hay que hacer muchas operaciones con un String ya que aporta muchos métodos y herramientas que facilitan la labor a la vez que hace un manejo más óptimo de la memoria, sobre todo al operar con pequeños grupos de carácteres (como es el caso).
  • Uno de los principales problemas que me encontré fué debido a la fuente de doble-byte usada para representar los simbolos músicales. El rango unicode de carácteres usado por Flex 2 por defecto es el que usan las fuentes inglesas(U+0020-U+007E). Es evidente que en un caso como este hay que definir muchos más rangos debido a la gran cantidad de simbolos a tratar. El problema estaba en que a veces esos rangos no coincidian con su correspondiente código de referencia decimal, lo cuál hizo que me volviera un poco loco. Finalmente, la solución era sencilla: Arrancar la calculadora del SO y convertir el código hexadecimal de los simbolos a decimal, y usar este último código en sentencias del tipo String.fromCharCode(57415); // 0xE047. Por tanto, como norma general no hay que fiarse de los códigos decimales y usar las conversiones de los códigos unicode.
  • Gracias a que el nuevo FP9 incorpora algoritmos de compresion zlib de forma nativa, los problemas que existí­an anteriormente para manejar XMLs de tamaño considerable desaparecen por arte de magia. Para más info, consulta el post de Ted Patrick sobre su aplicación Flex Shakespeare Explorer.
  • La nueva forma de trabajar con XML en AS3 es el standard E4X. Sólo decir que es una pasada. Imposible volver atrás ;). Sencillo a más no poder, y rápido.
  • describeType no me ha gustado mucho, ya oí­ que era algo lento y efectivamente lo es. Finalmente, muchos son los caminos que llevan a Roma, y en Flex todaví­a más. Así­ que pude pasar de esta forma de introspección y resolver el problema de otra forma. El inconveniente creo que se debe a que transforma la definición de la clase en XML, y luego hay que lidiar con ese XML. Aún así­ tiene su usos y razón de ser, pero no en operaciones intensivas.
  • Y la más importante y principal de las conclusiones… Flex 2 y AS3 y FlexBuilder2 son realmente increibles. Eso si, ¡cuidado!, ¡estas herramientas tienen un peligro!. Si desarrollas con ellas algo de tiempo, ¡no podrás volver atrás! ;).

Bueno, espero poder seguir sacando tiempo de aquí­ y allá, y poder poner el visor online cuando tenga más funcionalidad…quién sabe, ¡a lo mejor termino haciendo un Finale online! 😉

8 Comentarios

  1. Completamente de acuerdo con Ud. en cuanto a que una vez que lo usas no lo quieres dejar 😀

    Ayer tuvimos conferencias online en Cristalab y una de ellas trató acerca de Flex, ojalá que muchos se animen a usar ésta fabulosa herramienta.

    Saludos.

    Dejo éste enlace con la info de dichas conferencias online, incluso con links para descargar las grabaciones, espero no ser molesto: http://www.la100rra.com.mx/qwilm/2006/05/08/conferencias-online-3-co3-cristalab-ozon3/

  2. Muy interesante, yo empecé algo así­ hace unos meses,pero lo dejé por la complejidad del xml. se te ocurre alguna forma de poder integrarlo con midi? Podemos montar una escuela on-line de musica!!

  3. Hola Miguel, Efectivamente el XML es bastante complejo pero creo que es cuestión de probar diferentes XML creados con diferentes herramientas e ir refinando la salida poco a poco.

    En cuanto al midi, he visto que existe un proyecto Flash Midi Open Source.
    http://www.osflash.org/flashmidi
    Todaví­a no lo he mirado, pero está claro que serí­a el siguiente paso.

    A mi se me habí­a ocurrido hacer una web dedicada a la guitarra, de hecho otra de las cosas que querí­a hacer es añadirle posibilidades de tablatura.

  4. Unfortunately, I don’t speak spanish but from translating your post through google it sounds like you found a way to display MusicXML files within a flash application. Have you created a final version of that? I’m planning to do the exact same thing (actually with added functionaliy of being able to play back the file as well using mp3 samples) but maybe you have something already. I would be happy if you contacted me. Thanks.

    Jan

  5. Hola Carlos, muy interesante post.

    Yo estoy desarrollando my proyecto de fin de carrera, trat de una base dedatos que almacena partituras, bueno mejor dicho archivos XMLmusic. El motor de busqueda puede ser un teclado virtual o desde un MIDI externo. Una vez encontrada la pratitura correspondiente a la melodia que ha tocado el usuario tengo que mostrar la partitura, pero no en XMLmusic si no en tablatura reconocible por qualquier usuario, y he aqui el que tu trabajo me interese mogollon! Espero que leas esto pronto y contactes conmigo. Mi aplicación es con JAVA. me iria super bien tu aplicacion entrego la mierda esta en septiembre, necesito ayda please!!

  6. Siento el lenguage utilizado mas arriba, pero estoy preocupado por la conversion de musicXML a tablatura grafica!! creo tambien que cualquier tipo de programa que trabaje con xml (finale, MuseScore) tienen q hacer dicha traduccion! he pensado adquirir el codigo fuente del musescore (q es d fuente abierta) y mirar d conseguir el algorismo q haga la traduccion! si alguien quiere y puede echar-me una mano se lo agradecere!! mi mail es yopower86@nullgmail.com

  7. Hola, lo siento, pero yo no hablo español. ¿Cómo está su proyecto Flex MusicXML Viewer? ¿Se puede descargar el código fuente? Le estaría muy agradecido!

    HI, what about your project Flex MusicXML Viewer? Can I get your source code? Thank you very much!

    budanov.vladimir@nullgmail.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *