{"id":160,"date":"2012-01-23T12:00:41","date_gmt":"2012-01-23T10:00:41","guid":{"rendered":"http:\/\/www.joanillo.org\/?p=160"},"modified":"2020-09-16T12:59:14","modified_gmt":"2020-09-16T10:59:14","slug":"smf_parser-v1-01-smf-standard-midi-file-parser-2","status":"publish","type":"post","link":"https:\/\/www.joanillo.org\/?p=160&lang=es","title":{"rendered":"smf_parser v1.01: SMF (Standard Midi File) Parser"},"content":{"rendered":"<p><a href=\"http:\/\/www.joanillo.org\/wp-content\/uploads\/2012\/01\/din01b.jpg\"><img loading=\"lazy\" src=\"http:\/\/www.joanillo.org\/wp-content\/uploads\/2012\/01\/din01b-150x150.jpg\" alt=\"\" title=\"din01b\" width=\"150\" height=\"150\" class=\"alignright size-thumbnail wp-image-564\"><\/a><br \/>\n<strong>jplayfine<\/strong> (<a href=\"http:\/\/wiki.joanillo.org\/index.php\/Jplayfine\">http:\/\/wiki.joanillo.org\/index.php\/Jplayfine<\/a>) 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\u00e9 canal est\u00e1 la melod\u00eda en el fichero midi, y por qu\u00e9 canal<br \/>\ntoca el controlador midi. <strong>jplayfine<\/strong> es un cliente <strong>JACK<\/strong> que convive bien dentro del ecosistema de las aplicaciones de audio y midi para Linux. Bien, hablar\u00e9 de jplayfine en otra ocasi\u00f3n.<\/p>\n<p>Aunque jplayfine utiliza un secuenciador externo per hacer sonar el fichero midi (las pruebas las estoy haciendo con <em>jack-smf-player<\/em>), el tema es que desarrollando el proyecto jplayfine me he encontrado con la necesidad de parsear el fichero midi que contiene la melod\u00eda y el acompa\u00f1amiento. Podia utilizar la librer\u00eda smf.h que utiliza jack-smf-player. La verdad es que, con los objetivos de buscar la simplicidad, tener el m\u00e1ximo control del c\u00f3digo, y entender con<br \/>\nprofundidad el formato MIDI, me he embarcado en hacer un parseador de SMF con C++. Aqu\u00ed va la versi\u00f3n 1.01, por si alguien se lo quiere mirar. Por una parte hay una aplicaci\u00f3n standalone; y por otra hay la librer\u00eda y una aplicaci\u00f3n de test que muestra como utilizar la librer\u00eda. Tambi\u00e9n hay una carpeta midi\/ con los midifiles que se han utilizado para testear. Para utilizar la librer\u00eda necesitas un ompilador C++ para Linux (g++).<\/p>\n<p>Enlace del proyecto: <a href=\"http:\/\/wiki.joanillo.org\/index.php\/Fitxers_MIDI_(SMF)._Format#smf_parser\">http:\/\/wiki.joanillo.org\/index.php\/Fitxers_MIDI_(SMF)._Format#smf_parser<\/a><br \/>\nInformaci\u00f3n sobre el protocolo MIDI: <a href=\"http:\/\/www.sonicspot.com\/guide\/midifiles.html\">http:\/\/www.sonicspot.com\/guide\/midifiles.html<\/a><br \/>\nDescargar <a href=\"http:\/\/wiki.joanillo.org\/index.php\/Fitxer:Smf_parser_v101.zip\">smf_parser1.01<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>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\u00e9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[298,324,320,182],"tags":[],"_links":{"self":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/160"}],"collection":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=160"}],"version-history":[{"count":1,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/160\/revisions"}],"predecessor-version":[{"id":161,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/160\/revisions\/161"}],"wp:attachment":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}