/** * @file motifs.h * * Gestion des motifs * * @version 1 * @author Module CSC3502 : Projet Informatique 1ère année TELECOM SudParis * @date Mai 2014 */ #ifndef _motif_h #define _motif_h #include #include #define DEFNBRTMP 16 typedef struct _note{ int note; int octave; int instrument; int volume; int effet; } Note; typedef Note Portee[]; typedef Portee* Mesure[]; typedef struct _motif{ char nom[10]; int nbrTmp; Mesure* motif; struct _motif* suivant; } Motif; /** Permet d'obtenir le numéro d'un motif @param[in] m : Mmtif dont on veut déterminer le numéro @return Le numéro du motif */ int getIdMotif(Motif* m); /** Permet d'ajouter un nouveau motif @param[out] pliste : liste de motifs @param[in] nbrTmp : nombre de temps que doit contenir le motif @param[in] nbrPortees : nombre de portées que doit contenir le motif */ void ajouterMotif(Motif** pliste, int nbrTmp, int nbrPortees); /** Permet de nommer un motif @param[out] m : motif que l'on veut nommer @param[in] nom : nom que l'on donne au motif */ void definirNomMotif(Motif* m, char* nom); // void definirNbrTmp(Motif* m, int nbrTmp); // C'est chiant de changer le nomre de temps en cours de route, // donc on le fera après le proto. /** Permet de supprimer un motif @param[out] cellule : adresse de l'élément de la liste @param[in] nbrPortees : nombre de portées que l'on supprime */ void supprimerMotif(Motif** cellule, int nbrPortees); // cellule correspond à l'adresse de l'élément de la liste (avec &) /** Permet de définir une note param[out] m : motif dans lequel on ajoute la note param[in] portee : portée du motif dans laquelle on ajoute la note param[in] tmp : temps du motif dans lequel on ajoute la note param[in] note : note que l'on ajoute */ void definirNote(Motif* m, int portee, int tmp, int note); /** Permet de définir une octave param[out] m : motif dans lequel on ajoute l'octave param[in] portee : portée du motif dans laquelle on ajoute l'octave param[in] tmp : temps du motif dans lequel on ajoute l'octave param[in] octave : octave que l'on ajoute à la note */ void definirOctave(Motif* m, int portee, int tmp, int octave); /** Permet de définir l'instrument jouant une note param[out] m : motif dans lequel on utilise cet instrument param[in] portee : portée du motif dans laquelle on utilise cet instrument param[in] tmp : temps du motif dans lequel on utilise cet instrument param[in] instrument : instrument que l'on utilise */ void definirInstrument(Motif* m, int portee, int tmp, int intrument); /** Permet de définir le volume d'une note param[out] m : motif dans lequel on modifie le volume param[in] portee : portée du motif dans laquelle on modifie le volume param[in] tmp : temps du motif dans lequel on modifie le volume param[in] volume : volume de la note */ void definirVolume(Motif* m, int portee, int tmp, int volume); /** Permet de définir l'effet donné à une note param[out] m : motif dans lequel on ajoute l'effet param[in] portee : portée du motif dans laquelle on ajoute l'effet param[in] tmp : temps du motif dans lequel on ajoute l'effet param[in] effet : effet donné à la note */ void definirEffet(Motif* m, int portee, int tmp, int effet); /** Permet de supprimer une note param[out] m : motif dans lequel on supprime la note param[in] portee : portée du motif dans laquelle on supprime la note param[in] tmp : temps du motif dans lequel on supprime la note */ void supprimerNote(Motif* m, int portee, int tmp); // Maintenant, voici les getters (qui intéressent entre autres Majora) /** Permet d'afficher une note param[out] m : motif dans lequel on affiche la note param[in] portee : portée du motif dans laquelle on affiche la note param[in] tmp : temps du motif dans lequel on affiche la note */ int getNote(Motif* m, int portee, int tmp); /** Permet d'afficher une octave param[out] m : motif dans lequel on affiche l'octave param[in] portee : portée du motif dans laquelle on affiche l'octave param[in] tmp : temps du motif dans lequel on affiche l'octave */ int getOctave(Motif* m, int portee, int tmp); /** Permet d'afficher un instrument utilisé param[out] m : motif dans lequel on affiche l'instrument utilisé param[in] portee : portée du motif dans laquelle on affiche l'instrument utilisé param[in] tmp : temps du motif dans lequel on affiche l'instrument utilisé */ int getInstrument(Motif* m, int portee, int tmp); /** Permet d'afficher une volume de note param[out] m : motif dans lequel on affiche le volume de la note param[in] portee : portée du motif dans laquelle on affiche le volume de la note param[in] tmp : temps du motif dans lequel on affiche le volume de la note */ int getVolume(Motif* m, int portee, int tmp); /** Permet d'afficher un effet donné param[out] m : motif dans lequel on affiche l'effet donné param[in] portee : portée du motif dans laquelle on affiche l'effet donné param[in] tmp : temps du motif dans lequel on affiche l'effet donné */ int getEffet(Motif* m, int portee, int tmp); #endif