• # "computer music" Avec Haskore

    Posté par . En réponse au journal Petit soft utile pour les musiciens. Évalué à 3.

    ce journal me rappel le projet Haskore ayant pour but de créer(?) de la musique en se basant sur un langage de programmation.

    Dans le cas de Haskore(1), il s'agit d'un langage de programmation purement fonctionnel (Haskell) qui permet de décrire la musique qui sera créer/jouer.

    Je laisse au créateur Haskore le soin de le décrire :

    "Haskore is a collection of Haskell modules designed for expressing musical structures in the high-level, declarative style of functional programming. In Haskore, musical objects consist of primitive notions such as notes and rests, operations to transform musical objects such as transpose and tempo-scaling, and operations to combine musical objects to form more complex ones, such as concurrent and sequential composition. From these simple roots, much richer musical ideas can easily be developed."

    Un aspect intéressant de Haskore est aussi qu'il repose sur l'approche DSEL (2) qui permet d'exploiter directement la puissance du langage sur lequel on repose (declaratif, typage fort, dynamiquemant typé, d'ordre supperieur, intérpreté ou compilé, ...) pour exprimer des chose dans un style proche du domaine qu'on a ciblé.

    Il n'y a donc
    - ni parsing d'un fichier à partir d'un programme écrit dans un langage plus généraliste
    (le contenu du fichier parsé est alors souvent simpliste et limité en terme d'expressivité)
    - ni de création d'un nouveau langage (très difficile et pas toujours très concluant par rapport à ).
    - ni même de codage direct dans un langage généraliste (même si l'approche DSEL pourrait le faire croire, ce n,'est pas le cas)

    Un autre exemple de cet approche est Fran(3). C'est un peu vieux mais c'est très intéressant de voir comment décrire des animations peut devenir simple et relativement naturel avec un langage à la base généraliste, mais qu'on a 'spécialisé' à la définition de ces animations. Regardez le tutorial (4), je le trouve super.

    PS : cette approche (DSEL) n'est pas restreinte à Haskell, et peut être implémenter dans de nombreux autres langages généraliste.
    Le langage Haskell présente cependant certaines qualités qui le rende particulièrement adapté à cet usage (par exemple pouvoir definir de nouveaux opérateur est bien venu dans cet optique).

    1 : http://www.haskell.org/haskore/onlinetutorial/index.html
    2 : http://www.iue.tuwien.ac.at/phd/heinzl/node33.html
    3 : http://conal.net/fran/
    4 : http://conal.net/fran/tutorial.htm