jplayfine (http://wiki.joanillo.org/index.php/Jplayfine) es un proyecto musical que estoy desarrollando, que consiste en poder hacer un play-along sobre un fichero midi (fichero SMF), y que puedas obtener una nota relacionada con la similitud entre lo que has tocado y lo que se supone que has de tocar. Para hacerlo, el programa ha de saber en qué canal está la melodía en el fichero midi, y por qué canal
toca el controlador midi. jplayfine es un cliente JACK que convive bien dentro del ecosistema de las aplicaciones de audio y midi para Linux. Bien, hablaré de jplayfine en otra ocasión.
Aunque jplayfine utiliza un secuenciador externo per hacer sonar el fichero midi (las pruebas las estoy haciendo con jack-smf-player), el tema es que desarrollando el proyecto jplayfine me he encontrado con la necesidad de parsear el fichero midi que contiene la melodía y el acompañamiento. Podia utilizar la librería smf.h que utiliza jack-smf-player. La verdad es que, con los objetivos de buscar la simplicidad, tener el máximo control del código, y entender con
profundidad el formato MIDI, me he embarcado en hacer un parseador de SMF con C++. Aquí va la versión 1.01, por si alguien se lo quiere mirar. Por una parte hay una aplicación standalone; y por otra hay la librería y una aplicación de test que muestra como utilizar la librería. También hay una carpeta midi/ con los midifiles que se han utilizado para testear. Para utilizar la librería necesitas un ompilador C++ para Linux (g++).
Enlace del proyecto: http://wiki.joanillo.org/index.php/Fitxers_MIDI_(SMF)._Format#smf_parser
Información sobre el protocolo MIDI: http://www.sonicspot.com/guide/midifiles.html
Descargar smf_parser1.01