Contrôles des connaissances de stim
1. Le Plagiat Assisté par Ordinateur


On a étudié en cours une méthode d’analyse musicologique de flux MIDI permettant d’extraire des motifs musicaux qu’on peut ensuite recombiner pour donner un nouveau flux MIDI sonnant à la manière de l’auteur de la séquence originale. Un des premiers articles ayant étudié la question est celui de O. Lartillot, S. Dubnov, G. Assayag & G. Bejerano intitulé Automatic Modeling of Musical Style qui étudie et compare deux méthodes différentes, nommées IP et PST. L’objectif du projet est de les comparer de manière un peu différente, en comparant le résultat de la première méthode appliquée sur le résultat de la seconde et réciproquement. Le projet prendra la forme d’un service HTTP répondant à une requête POST composée d’ un flux MIDI et différents paramètres de configurations, et retournera une réponse HTTP formée d’un flux MIDI. Le langage de programmation à utiliser n’est pas imposé.

Le projet est à faire individuellement, mais afin d’alléger un peu le travail une moitié de la promotion (celle dont le nom de famille commence par B, D, F, L ou P) implémentera la méthode PST, l’autre la méthode IP. Au moins une expérience entre deux projets devra être réalisée. Le projet est à rendre à travers le formulaire disponible à la fin de cet énoncé (après authentification), pour le lundi 19 Janvier 2009 à midi (évidemment), le cache de la méthode POST faisant foi. On trouvera également une Foire Aux Questions, permettant de poser des questions et de faire profiter tout le monde de la réponse (aucune question par mail ne devra être envoyée).

1 Gérer les paramètres

Comme on le verra à la lecture de l’article cité en référence, plusieurs choix d’implémentation sont possibles. En particulier il est évoqué un seuil dans les deux méthodes, qui influe sur les qualités du résultat. Implicitement, on peut considérer qu’il existe aussi un paramètre indiquant la longueur maximale de la séquence à générer (en nombre total de NoteOn). On discutera de différentes méthodes pour éviter une fin trop brutale de la séquence.

Dans cette première question, il s’agit donc d’écrire un programme nommé plagiat, reconnaissant sur la ligne de commandes au moins deux options Unix, savoir -seuil s et -longueur l (on pourra en rajouter d’autres au besoin) et un nom de fichier MIDI. Ce programme enverra sur le flux de sortie un flux MIDI, résultat de l’application de la méthode retenue sur l’entrée fournie.


2 Composer le service

Dans cette deuxième question, on souhaite transformer le programme rédigé à la première question sous forme de service Web, prenant en entrée au moins quatre valeurs fournies par un formulaire en méthode POST :

  • flux : le flux MIDI ;
  • seuil : le seuil ;
  • longueur : le nombre maximal de NoteOn dans le résultat ;
  • url (optionnel) : l’adresse d’un service implémentant un plagiaire automatique.

On écrira d’abord un petit formulaire HTML nommé plagiaire.html permettant d’envoyer ces informations.

Ensuite, on rajoutera au programme écrit à la question précédente de quoi l’interfacer avec un serveur HTTP. Ce programme se nommera plagiaire.ext, où ext dépendra du langage d’implémentation choisi et des nécessités imposées par le serveur HTTP.

A noter que dans le cas où le paramètre url est présent, il faudra donc ouvrir une connexion entre le serveur du première plagiaire et celui du second. Pour renvoyer le résultat, on renverra une en-tête HTTP Content-Type: audio/midi. Les étudiants peu familiers de la programmation Web pourront consulter le cours de M1 Architecture des Clients Internet et celui de L3 Programmation Réticulaire.


3 Foire Aux Questions

Cliquer sur le lien ci-dessous pour poser une question à propos du projet. Afin d’éviter les spams, celle-ci n’apparaitra qu’après lecture par le modérateur.

Les questions et les réponses apparaîtront à la suite de ce texte, précédées de la liste de toutes les questions posées afin qu’un coup d’œil rapide (sans nécessité de défilement) permette de voir si une question a déjà été posée. Pour profiter au maximum de cette fonctionnalité, pensez à donner un titre significatif et différent de tous les titres précédents.

Titres des 17 intervention(s)


  • Paramètre URL
    20 janvier 2009 à 10h26min

    Comment utiliser le paramètre URL ?
    A quoi sert-il ?
    Si j’ai bien compris c’est pour envoyer notre fichier plagié à un autre plagiaire afin qu’il le plagie à nouveau. C’est ça ?
    Dans ce cas je ne vois pas comment transmettre des paramètres au formulaire du second plagiaire.
    Faut-il alors supposer que le second plagiaire dispose d’une méthode GET pour passer de paramètres directement dans l’URL ?
    Dans ce cas doit-on également implémenter une méthode GET en plus de la méthode POST pour notre formulaire ?

    • Paramètre URL
      20 janvier 2009 à 18h00min par adm

      Le paramètre URL donne seulement l’adresse Internet du plagiaire, dont l’énoncé dit bien qu’il doit être appelé en méthode POST, autrement dit recevoir ses arguments dans le flux d’entrée. Il faut donc appeler la fonction C nommé socket ou son dérivé dans le langage de programmation utilisé. Il n’y a aucune raison de passer en méthode GET.

  • Gestion ligne de commande
    20 janvier 2009 à 04h19min

    Bonjour, ma question porte sur la gestion de la ligne de commande du fichier plagiat demandé.
    il est demandé de reconnaître au moins deux options Unix, savoir -seuil s et -longueur l.
    ça sous entend que l’on doit appeler le programme de la manière 1 :
    ./plagiat -longueur=10 -seuil=42
    ou de la manière 2 :
    ./plagiat -longueur 10 -seuil 42

    autre question : est ce qu’il est possible d’appeler les options : —seuil et —longueur au lieu de -seuil et -longueur .
    La raison est que l’outil que je veux utiliser pour parser la ligne de commande refuse des noms d’option longue précédées par un seul tiret.
    Je sais, je peux toujours coder ça à la main et ne pas utiliser cet outil, mais ça va me faire perdre du temps que je préfère passer sur des parties plus intéressantes.

    Sinon, une autre argumentation un peu plus solide tirée de
    http://docs.python.org/library/optp... (l’outil que je souhaite utiliser)

    Some other option syntaxes that the world has seen include :

    * a hyphen followed by a few letters, e.g. "-pf" (this is not the same as multiple options merged into a single argument)
    * a hyphen followed by a whole word, e.g. "-file" (this is technically equivalent to the previous syntax, but they aren’t usually seen in the same program)
    * a plus sign followed by a single letter, or a few letters, or a word, e.g. "+f", "+rgb"
    * a slash followed by a letter, or a few letters, or a word, e.g. "/f", "/file"

    These option syntaxes are not supported by optparse, and they never will be. This is deliberate : the first three are non-standard on any environment, and the last only makes sense if you’re exclusively targeting VMS, MS-DOS, and/or Windows.

    • Gestion ligne de commande
      20 janvier 2009 à 17h55min par adm

      La syntaxe 2 est celle recommandée pour Unix.

      J’accepte le double tiret, car ce n’est effectivement pas prioritaire dans le travail à fournir.

  • Service Web Python
    18 janvier 2009 à 15h03min

    Bonjour,

    dans le cadre de l’implementation du service Web, j’ai utilisé Python.
    ça nécessite d’installer le module mod_python sur un serveur apache 2, et de changer la conf du serveur pour qu’il prenne en charge les sources python correctement.

    Est ce que je peux partir du principe que le serveur utilisé pour la correction sera un apache avec mod_python installé correctement ? ça me frustrerai qu’à cause de la configuration d’un serveur que je ne connais pas, et sur laquelle je n’ai pas vraiment le controle, mon implémentation client/serveur ne fonctionne pas correctement...

    ci joint la version de mon serveur :
    rudk% apache2 -v

    Server version : Apache/2.2.9 (Ubuntu)
    Server built : Sep 19 2008 13:45:10

    concernant ma version de mod_python, il s’agit de la 3.3.1

    ma version de Python est la :

    rudk% python —version

    Python 2.5.2

    D’après mes souvenirs, il ne faut surtout pas utiliser de version de Python >= à la 3.0, car certaines commandes n’existent plus (xrange, ...) et certaines ont des syntaxes différentes (print, ...)

    Bref, est ce que je peux considérer que tout ira pour le mieux dans le meilleur des mondes ? Est ce que vous voulez plus de détails sur un point précis ?

    • Service Web Python
      19 janvier 2009 à 08h12min par adm

      L’énoncé dit bien que tout langage est autorisé. Je vous demanderai plus de précision sur votre installation si je rencontre des problèmes d’exécution lors de la correction.

  • report
    17 janvier 2009 à 18h44min

    Bonjour,
    après avoir parlé à quelques élèves, nous sommes un certain nombre qui
    aimeraient disposer d’un délai supplémentaire pour rendre le projet de
    STIM, et pouvoir ainsi rendre un projet de meilleure qualité.
    Est ce que vous y voyez des inconvénients majeurs ?
    Si non, jusqu’à quand pourrait on vous rendre ce projet ?

    Cdlt,

    • report
      19 janvier 2009 à 08h09min par adm

      Un délai supplémentaire de 48 heures est accordé à tous, soit le mercredi 21 à midi.

  • Generative Constraints
    16 janvier 2009 à 19h10min

    Dans la partie Generative Constraints, on explique qu’un symbole n’est accepté que si son contexte est d’au moins une certaine taille. Par exemple si ce symbole n’a pas de suffixe dans l’arbre, on cherche un contexte de taille inférieure (mais pas trop petite donc) pour continuer la séquence.

    Or par récurrence, on peut se retrouver dans le cas où les suffixes du nouveau contexte ne satisfont pas cette condition, et on doit alors annuler le symbole précédent et en chercher un autre.

    Deux problèmes se posent alors : on peut avoir un arbre qui n’autorise aucun symbole (il faut alors diminuer la contrainte de taille), et surtout on ne peut pas savoir si on peut accepter un symbole avant de savoir si on peut accepter sa suite, qui elle même peut parfois contenir ce symbole !

    Où me suis-je trompée dans mon raisonnement ? J’espère avoir été claire dans mon questionnement...

    • Generative Constraints
      19 janvier 2009 à 08h06min par adm

      La phrase importante de ce paragraphe sur cette question est celle-ci :

      If no symbol is satisfying, the algorithm backtracks to
      the previous cycle, and more if necessary.

      Le backtracking est une technique qui consiste à renoncer à un choix antérieur et d’en prendre un autre parmi la liste des choix possibles. La suite du paragraphe évoque le cas d’impossibilité dont vous parlez, mais la condition supplémentaire suggérée devrait éviter la situation.

  • Filtre de durée
    16 janvier 2009 à 00h08min

    Que veut dire "quantification statistique des durées" ? Comment fonctionne ce filtre ?

    • Filtre de durée
      16 janvier 2009 à 12h24min par adm

      Les intervalles de temps séparant les événements NoteOn etc dans un flux MIDI sont comptés par une unité allant bien au-delà de ce qui paraît simultané pour l’oreille humaine. On peut quantifier approximativement au dixième de seconde, mais il est préférable d’analyser tout ou partie du flux pour trouver une quantification spécifique au flux.

  • Resultats
    13 janvier 2009 à 16h53min

    Bonjour,

    Quel est la nature exacte du flux que l’on doit afficher en sortie ? Un fichier MIDI ’intégral’ (avec en-têtes, message de tempo, etc ...) ou une simple succession de NOTEON / NOTEOFF ?
    D’autre part ne serait-il pas préférable d’exporter en .midi ?

    Enfin vous parliez d’utilisation ’live’, vous considérez que l’algorithme doit analyser le fichier, construire l’arbre et commencer à le parcourir dans une seule fonction ?
    Il est cependant dit dans l’article de référence que la phase pré-analytique se fait sur la séquence entière et avant le découpage, vu que l’utilisation de l’ensemble du programme se fait sur un fichier.

    • Resultats
      13 janvier 2009 à 17h44min par adm

      Oui, il faut produire un fichier MIDI complet, qui puisse être joué par n’importe quel dispositif connaissance ce format. Vous devez utiliser l’en-tête HTTP Content-Type : audio/midi pour l’exporter.

      L’aspect live ne concerne que la méthode IP, l’article dit bien que PST n’y est pas adaptée.
      Mais je ne vois pas le rapport que vous faites avec l’existence d’une seule fonction, qui est une question de méthodologie de programmation.

  • Génération par la méthode IP
    13 janvier 2009 à 02h23min

    Je trouve l’explication de l’algo de génération pour la méthode IP pour le moins lacunaire et peu explicite dans l’article... Comment faut-il s’y prendre ?

    Une grosse ambiguité vient par exemple du fait que la méthode est a priori utilisable en temps-réel, mais que cela dépend quand même de la manière dont est implémentée la génération. Dans notre cas de service web par envoi d’un fichier midi à plagier par une méthode POST, on est clairement dans un contexte non temps-réel.

    Mais du coup qu’est-ce-qu’on fait pour la génération ? On attend la totalité des tranches midi pour générer à partir d’un dictionnaire complet basé sur tout le fichier midi, et ce quitte à perdre la potentialité temps-réel ? On y va pas à pas avec l’arrivée de chaque nouvelle tranche midi ? On attend des séries d’un nombre fixé de tranches ? On fait encore autrement ?

    • Génération par la méthode IP
      13 janvier 2009 à 17h23min par adm

      Le projet est divisé en deux sections justement pour garder la possibilité de temps réel dans la première section, même si la seconde y renonce évidemment. Mais au-delà de cet aspect, le plagiat dépend de l’instant : un auteur a un certain style en début de morceau, et un (d’un point de vue formel j’entends) un autre style en fin de morceau. Il est donc assez logique (quoique non obligatoire)
      que le début du plagiat ne se fonde que sur le début de la séquence d’origine, et on peut même envisager que le milieu du plagiat ne se fonde que sur le milieu de l’original (donc en oubliant le début) etc. Bref, dans la méthode IP, on démarre la construction du plagiat assez tôt, même si on ne délivre qu’un résultat complet tout à la fin dans le cadre du projet.

      • Génération par la méthode IP
        14 janvier 2009 à 18h29min

        Il me semble que la contrainte temps réel est une problématique à part entière qui sort du contexte de ce projet.

        Si cet avis n’est pas partagé, je pense que nous sommes au moins d’accord avec le fait que nous n’avons pas disposé d’assez de temps afin de répondre à cette problématique.

        En effet, développer des traitements algorithmiques "à fenêtre" nécessaires pour le temps réel est un travail beaucoup plus ardu que de développer des traitements séquentiels globaux.

        Olivier Lartillot, à l’issue de son stage d’une durée de 4 mois, n’a ni produit un code prenant en compte la dimension temps réel ni posé les fondements qui en permettrait son développement ultérieur. (Cf. Les fonctions de filtrages telles que "unlegate-voices" qui prennent l’ensemble des événements musicaux).

        • Génération par la méthode IP
          14 janvier 2009 à 21h39min par SAINT JAMES Emmanuel

          J’ai l’impression que vous sur-interprétez ce qui est demandé. Il ne s’agit pas de faire une application temps réel, mais simplement de tenir compte que l’algorithme IP, comme son nom l’indique, est incrémental, c’est-à-dire qu’il peut être utilisé dans le contexte du temps réel. En pratique, cela veut dire que vous analysez la séquence morceaux par morceaux (c’est le côté incrémental) mais cette séquence vous est transmise d’un coup au départ, et vous prenez tout le temps nécessaire pour calculer votre résultat.

          Une vraie problématique temps réel aurait consisté à recevoir la séquence et calculer le résultat en parallèle, avec la contrainte de le faire suffisamment vite pour ne pas perdre la suite de la séquence. Ce n’est pas ce qui est demandé.

  • Exemples de fichiers MIDI plagiés
    10 janvier 2009 à 15h31min

    Serait-il possible de nous fournir des fichiers MIDI ainsi que leurs plagiats afin de pouvoir comparer nos résultats aux votre ?

    • Exemples de fichiers MIDI plagiés
      11 janvier 2009 à 21h33min par adm

      Je ne suis pas sûr de pouvoir retrouver les résultats qu’Olivier Lartillot avaient produits en son temps, mais quand bien même j’y arriverai ça ne me semblerait pas judicieux : il ne s’agit pas de se rapprocher d’une solution présentée comme idéale, mais d’exercer votre propre critique sur un résultat d’expériences.

      En revanche, vous pouvez comparez vos résultats entre vous.

  • Alogo PST
    8 janvier 2009 à 18h37min

    Je pense avoir mal compris l’algo de PST. Pour le nœud ’a’, nous avons les probabilités qui correspondent aux lettres qui suivent(0.48 d’être suivi par ’b’, 0.25 par c, etc.). Au nœud suivant, pourquoi nous n’avons pas ’ab’, ’ac’, ’ad’ ?

    • Alogo PST
      9 janvier 2009 à 11h09min par adm

      Le paragraphe 3.1 dit bien qu’il faut analyser plusieurs sous-séquences jusqu’à L=10, l’exemple 3.2 n’est qu’un extrait.

  • Tranches et filtres
    8 janvier 2009 à 12h51min par ESLING PHILIPPE

    Bonjour, j’ai 2 questions concernant les parties 2.3 et 2.4 de l’article de référence :

    1. En ce qui concerne le découpage en ’tranches’ du fichier midi :

    Il semble que ce découpage s’effectue sur l’ensemble des pistes du fichier, on doit donc considérer que les évènements de deux instruments différents seront regroupés dans les mêmes tranches ?
    Si par exemple un fichier contient une guitare et un triangle, deux évènements simultanés appartiendront au même symbole ?
    Cela me semble peu logique puisque la redondance musicale serait plutôt indépendante a chaque instrument pour permettre un meilleur plagiat !
    De plus j’ai l’impression qu’avec ce type de regroupement l’arbre construit aura tendance a être limité en profondeur et aura un 1er niveau contenant énormément de feuilles, ce qui donnera surement un mauvais résultat.

    D’autre part je ne comprends pas bien si une distinction est faite dans les symboles entre début de la note et note tenue ! Doit-on découper suivant une grille et faire une différence dans un symbole entre un accord avec une note précédemment tenue et un accord composé des mêmes notes mais toutes enclenchées en même temps ?

    2. En ce qui concerne les filtres de simplification :
    Peut-on simplement considérer qu’il s’agit d’une quantification avec un pas donné par le seuil ?
    Si tel est le cas, ne doit-on pas quantifier relativement au tempo plutôt qu’au seuil ?
    Si ce n’est pas le cas, on doit presque toujours traiter l’évènement antérieur en fonction de l’évènement suivant, ce qui me semble assez inextricable pour des fichiers polyphoniques un tantinet complexe, par exemple en cas d’accords multiples se recouvrant et ayant des silences sur certaines voix, il va forcément falloir établir un ordre de priorité sur les filtres ?

    Enfin le filtre de durée effectue une quantification ’statistique’ ... mais laquelle ? Cette quantification doit-elle s’effectuer en ’seconde passe’ après avoir appliqué tous les autres filtres ?

    • Tranches et filtres
      8 janvier 2009 à 22h33min par adm

      Il est certain que plagier l’orchestration donnerait un meilleur effet, mais ce n’est pas demandé : vous pouvez considérer le fichier comme une sorte de réduction pour piano.

      De même, on assimile à un accord de N+1 notes le cas d’une note tenue pendant que N notes sont nouvellement émises. Autrement dit l’algorithme de plagiat concerne essentiellement les mélodies, parfois jouées avec des accords (cf. Debussy ou Messiaen). Le plagiat polyphonique est très difficile, (ce qui n ’est pas une surprise) et ce n’est pas demandé.

      En ce qui concerne la quantification, il faut garder présent à l’esprit que
      l’algorithme doit fonctionner en temps réel, il n’est donc pas question d’attendre une première passe de lecture avant de commencer à opérer.
      En revanche, on peut attendre quelques notes, et cela suffit souvent à faire une statistique : on sait en quelques notes si un morceau est en tempo rapide ou lent (si on suppose que celui varie peu).

      • Tranches et filtres
        10 janvier 2009 à 15h29min

        Polyphonie :

        Que veut dire "une sorte de réduction pour piano" ?

        Est-ce que cela signifie que l’on garde uniquement la piste de piano ? (et dans le cas où il n’y a pas de piano ?)

        Ou bien, est-ce qu’on regroupe toutes les pistes en une unique piste piano ?

        Dans l’article d’Olivier LARTILLOT (http://mediatheque.ircam.fr/article...) il semble que la version 2 prenne en compte la polyphonie (d’une manière assez simple mais efficace).

        Accords :

        "Autrement dit l’algorithme de plagiat concerne essentiellement les mélodies, parfois jouées avec des accords"

        Cela présuppose donc que l’on puisse extraire la mélodie de l’harmonie. Il me semble que l’extraction de la mélodie d’une oeuvre musicale est une problématique à part entière.

        • Tranches et filtres
          11 janvier 2009 à 21h26min par adm

          1. Il s’agit de regrouper toutes les pistes en une seule. J’ai mentionné la réduction pour piano parce que c’est une pratique courante en musique, mais il ne faut pas y voir une demande expresse : c’est juste pour dire qu’on simplifie le problème en disant qu’on ignore le problème de l’orchestration.

          2. je me suis peut-être mal exprimé dans une autre réponse. En MIDI, on découpe une séquence temporelle en une suite d’événements où un ou plusieurs NoteOn sont émis (un onset dans le jargon anglais habituel). Dans le cadre de ce projet (et du travail d’Olivier Lartillot) on appelle mélodie une séquence d’onset, même quand tous ne sont pas réduits à une seule note, et on traite une note tenue comme si elle était répétée dans l’onset suivant. Ce n’est évidemment pas la définition de la mélodie que donne les musicologues, mais la recherche en musicologie computationnelle consiste précisément à montrer les limites de la formalisation d’un phénomène sensoriel.

          • Tranches et filtres
            11 janvier 2009 à 22h17min

            (Orchestration)

            Je me permet d’approfondir le sujet car il me semble qu’il y ait un détail à préciser.

            Dans l’article de Lartillot, les événements midi sont tous regroupés en une seule piste midi (une seule séquence). Cependant, l’information d’appartenance à un canal (donc à un instrument) est bien conservée. Cf. "note-channel" de la fonction "channelize". C’est de cette manière qu’Olivier conserve l’orchestration pour la reproduire par la suite.

            "Il s’agit de regrouper toutes les pistes en une seule. [...] "

            Faites-vous allusion à une piste midi (séquence midi) ou bien à un canal midi (un instrument) ?

            Dans le cas où l’on regroupe les canaux midi, il s’agit bien "d’oublier" l’orchestration (ce que ne fait pas Olivier).

            Dans le cas où l’on regroupe les pistes midi, il ne s’agit que de faciliter l’analyse des messages midi (ce que fait Olivier).

            • Tranches et filtres
              12 janvier 2009 à 19h48min par adm

              En disant qu’on ignore le problème de l’orchestration, j’entendais qu’on ne prend pas cette dimension en compte en tant qu’élément du plagiat (bien que l’orchestration suffit bien souvent à dater un morceau, voir en déterminer l’auteur). Il n’est pas nécessaire pour autant de la supprimer du résultat, on peut effectivement reproduire l’utilisation des pistes et canaux d’origine sans se poser de question,
              ou tout réduire comme je le suggérais. De nouveau l’appréciation sonore doit vous guider dans ce choix.

      • Tranches et filtres
        14 janvier 2009 à 13h54min

        Vous dites qu’il n’est pas nécessaire de prendre en compte le plagiat polyphonique : est ce que ça veut dire que dans le cadre de ce projet, nous ne serons a aucun moment dans une situation ou plus d’une note sera jouée simultanément (accord,...) ?

        • Tranches et filtres
          14 janvier 2009 à 21h43min par SAINT JAMES Emmanuel

          Il me semble avoir été clair : on tient compte des accords mais il n’y a pas de notion de voix, ce qu’on entend habituellement par musique polyphonique, la conduite des différentes des voix étant ce qui serait très difficile à plagier, et qui n’est pas demandé.

  • methode de construction des PST
    5 janvier 2009 à 22h26min

    Bonjour, ma question concerne l’article sur lequel nous devons nous baser pour faire le programme de plagiat : Automatic Modeling of Musical Style.

    Question 1 :

    Je ne sais pas si cela vient d’une incompréhension de ma part, mais j’ai l’impression qu’il y a une erreur dans la partie 3.2 concernant l’exemple de PST.

    Sur le noeud dont le label est "b", la liste des probabilités devrait être selon moi (.01, .01, .01, .01, .96) et non (.96, .01, .01, .01, .01) . Est ce que vous pouvez me confirmer ce point ??

    Sinon, pour l’instant je ne suis pas certain de mes résultats concernant les autres noeuds : est ce que dans le cas ou vous considérez également qu’il y a une erreur, vous pourrez nous fournir un exemple de l’arbre de référence correspondant à la phrase "abracadabra" (en gros un corrigé de la partie 3.2 de l’article) afin de nous permettre de tester un tant soit peu notre algorithme, et d’être sur que nous n’avons pas fait d’erreur à ce stade primaire de développement...

    Question 2 :
    Dans l’article de référence sur les PST détaillant l’algorithme permettant de les générer (Modeling protein families using probabilistic suffix trees. Berjano), les auteurs utilisent un argument dans la fonction de génération appelé alpha, sans vraiment préciser son utilité. Ce paramètre semble correspondre à un coefficient de sévérité, et n’est pas mentionné dans l’article initial que nous devons implémenter. Doit on considérer que les auteurs ont utilisé une valeur alpha=0 pour générer leurs exemples ? Est ce que notre programme doit utiliser par défaut une valeur d’alpha quelconque ?

    Question 3 :
    Pour chaque méthode, vous demandez à ce que notre programme prenne en argument la valeur d’un seuil. Dans le cas des PST, doit on considérer qu’il s’agit de L, la hauteur maximale du PST ? Si oui, quelle valeur souhaitez vous que l’on donne par défaut aux autres arguments donnés à la fonction de construction du PST (PMin, alpha, gamma_min, r, L)

    Cdlt,

    • methode de construction des PST
      7 janvier 2009 à 10h10min par adm

      Question 1.

      Oui en effet, il y a une erreur dans l’article : ’b’ est suivi de ’r’ par 2 fois et non pas de ’a’ c’est votre formule qui est la bonne. Les autres formules me semblent correctes. Un forum n’étant pas très pratique pour fournir un dessin, je ne peux accéder à votre 2e demande, mais cette petite correction me semble facile à prendre en compte.

      Question 2 et 3

      Je réponds aux deux questions à la fois car il s’agit un peu de la même chose. Ces articles de recherche tentent de reproduire mécaniquement le comportement d’organismes vivants, par des formules mathématiques faisant intervenir plusieurs paramètres. Cette recherche ayant sa part d’empirisme, il faut concevoir votre implémentation de sorte que l’utilisateur puisse les faire varier facilement (valeurs sur la ligne de commande pour la partie 1, valeurs indiquées dans l’URL via un formulaire HTML pour la partie 2). L’énoncé précise d’ailleurs bien qu’il y a au moins 4 valeurs à indiquer, ce qui veut dire qu’on peut en donner plus, en particulier celles que vous évoquez. Les valeurs par défaut seront celles que vous aurez trouvées les plus pertinentes.

  • Communication inter plagiaires
    5 janvier 2009 à 21h48min

    « A noter que dans le cas où le paramètre url est présent, il faudra donc ouvrir une connexion entre le serveur du première plagiaire et celui du second. »

    J’aurais aimé savoir si le premier plagiaire pouvait simplement envoyer la requête initiale (POST) au second plagiaire en ne changeant uniquement le fichier MIDI (plagié une première fois).

    Dans le cadre d’une communication entre deux plagiaires, on aurait en conséquence qu’à développer la partie "cliente" (construction d’une requête POST). La partie "serveur" (réponse à une requête POST) aura déjà été traitée dans le cadre normal (celui où il n’y a qu’un plagiaire).

    • Communication inter plagiaires
      6 janvier 2009 à 11h36min par adm

      Oui bien sûr.

      • Communication inter plagiaires
        19 janvier 2009 à 13h00min

        Je ne vois pas bien comment gérer la communication inter plagiaires.

        En effet, il n’y a aucune raison pour que les paramètres des deux formualaires coïncident

        Faut-il donc supposer que le second plagiaire dispose d’une méthode GET pour lui passer des paramètres en URL ?

        • Communication inter plagiaires
          20 janvier 2009 à 17h52min par adm

          Les deux plagiaires ont les mêmes spécifications, mais en POST plutôt qu’en GET puisqu’il y a un flux MIDI à passer.

  • Bibliothèque Midi pour C sur Linux
    5 janvier 2009 à 16h13min

    Bonjour,
    On est plusieurs à travailler sous Linux et on n’arrive pas à trouver une bibliothèque qui permet de lire des fichiers midi en langage C (le seul langage qu’on connaisse).
    Est-ce que vous pouvez nous conseiller quelque chose ?
    Merci

    • Bibliothèque Midi pour C sur Linux
      5 janvier 2009 à 16h28min par adm

      Vous me surprenez. En tapant les mots clés
      library midi C "free software" linux
      dans le premier moteur de recherche venu on en trouve plein, beaucoup en C++ il est vrai,
      mais certaines en C.

  • Foire Aux Questions
    30 décembre 2008 à 13h32min

    Est-il possible de programmer le tout en PHP Objet avec PHP Midi Class (http://staff.dasdeck.de/valentin/midi/).

    Dans la première question, "plagiat" serait appelé avec l’interpréteur "php.exe".

    • Foire Aux Questions
      30 décembre 2008 à 14h31min par adm

      Oui, mais indiquez le numéro de version de PHP et si possible les directives de compilaton utilisées pour son installation, car il n’est pas stable de version en version, et ses installations sont très diverses. Et incluez dans votre rapport final les bibliothèques utilisées.

  • Choix du langage et des bibliothèques du programme plagiat
    28 décembre 2008 à 19h59min

    Est-on évalué sur le choix du langage pour le programme plagiat ? Faut-il que ce soit un langage compilé ?

    Le choix du langage est suivi par le choix éventuel de l’utilisation de bibliothèques. Peut-on utiliser des bibliothèques autres que les bibliothèques standard, si elles sont au moins libres d’utilisation et de copie, voire sous licence GPL/LGPL ?

    Peut-on par exemple utiliser getopt de la bibliothèque GNU libc, et adapter une bibliothèque C existante d’analyse de fichier et flux MIDI ?

    • Choix du langage et des bibliothèques du programme plagiat
      30 décembre 2008 à 00h07min par adm

      Le choix du langage est libre et n’entre pas dans la note, je suis censé savoir les lire tous.

      Pour les bibliothèques, pas de restriction non plus du moment qu’elles sont libres d’utilisation. Ce qui doit vous guider dans votre choix est que je dois pouvoir faire tourner votre projet sur toute machine Posix sans avoir à aller chercher quoi que ce soit comme élément supplémentaire. En d’autres termes, si vous utilisez des bibliothèques non standard, elles doivent figurer dans votre rendu de projet.

      Le langage peut être compilé ou non. S’il l’est, un Makefile sera nécessaire pour qu’une simple appel de la commande make permette d’avoir un programme exécutable immédiatement.

  • Applet Java
    21 décembre 2008 à 18h41min

    Est-il possible de réaliser l’intégralité du projet sous forme d’un applet java qui intégrerais a la fois l’interface web et le programme de plagiat ?

    • Applet Java
      21 décembre 2008 à 19h09min par SAINT JAMES Emmanuel

      L’utilisation de Java est bien sûr possible, mais que voulez-vous dire par à la fois ?
      Ce qui est sûr c’est que j’aurais besoin de tester la première partie en local, donc il est assez fortement recommandé de structurer sa rédaction en deux fichiers, correspondant aux deux questions, voire en trois (un fichier sous forme de bibliothèque à inclure, 2 fichiers répondant chacun à une question).

      • Applet Java
        22 décembre 2008 à 15h15min

        Ma question était en fait sur la possibilité de regrouper les 2 questions dans un applet Java possédant une interface graphique permettant d’interagir directement avec le programme de plagiat (et donc ne pas utiliser la méthode POST)

        • Architecture client/serveur
          30 décembre 2008 à 10h32min par adm

          Non, les architectures client/serveur sont incontournables aujourd’hui, vous devez résoudre le problème posé sous forme d’un service rendu à distance : les applications monolithiques, même téléchargées, ne sont pas compatibles avec les nécessités du développement logiciel moderne.



4 Remise du projet

Le projet devra être remis sous la forme d’une archive .zip comportant :

  • le source du fichier plagiat
  • le fichier plagiaire.html
  • le source du fichier plagiaire.ext
  • un fichier doc.pdf décrivant le projet.

Il n’est pas interdit d’ajouter d’autres fichiers, notamment des flux MIDI pris en exemple et un fichier makefile les mettant en œuvre, l’essentiel étant que les 4 fichiers ci-dessus soient présents et nommés comme spécifié.


Date limite: 21 janvier 2009 à 23h30min



Warning: Illegal string offset 'id_auteur' in /dsk/www-master/html/2008/ecrire/public/assembler.php(625) : eval()'d code on line 4
Cliquer ici pour vous authentifier