Refonte majeure du code des motifs

This commit is contained in:
Raspbeguy 2014-04-01 13:48:39 +02:00
parent fbf7f8b78b
commit 8c0b0337d1
3 changed files with 95 additions and 41 deletions

View File

@ -0,0 +1,9 @@
#ifndef _melodie_h
#define _melodie_h
#include <stdlib.h>
#include <stdio.h>
#endif

View File

@ -1,35 +1,62 @@
#include <string.h>
#include "motifs.h" #include "motifs.h"
int getIdMotif(Motif* m){
if (m == NULL) {
return 0;
} else {
return getIdMotif(m->suivant)+1;
}
}
void ajouterMotif(int nbrPortees, int nbrTmp){ void ajouterMotif(int nbrPortees, int nbrTmp){
Motif m = malloc(nbrPortees*sizeof(Portee)); Motif* m = malloc(sizeof(Motif));
int i; m->nbrTmp = nbrTmp;
for (i=0; i<nbrPortees; i++) { m->suivant = liste;
m[i] = malloc(nbrTmp*sizeof(Note)); m->motif = malloc(nbrPortees*sizeof(portee));
} m->nom = strcat("Motif %d", getIdMotif(m));
Liste* l = malloc(sizeof(Liste)); int i;
l->suivant = tab; for (i=0; i<nbrPortees; i++) {
tab = l; m->motif[i] = calloc(nbrTmp,sizeof(Note));
}
liste = m;
} }
void supprimerMotif(Liste** cellule, int nbrPortees){ void definirNomMotif(char* nom, Motif* m){
int i; m->nom = nom;
for (i=0; i<nbrPortees; i++) {
free((*cellule)->motif[i]);
}
free((*cellule)->motif);
Liste* aux = (*cellule)->suivant;
free((*cellule));
*cellule = aux;
} }
void definirNote(Motif m, int portee, int tmp, int note, int octave, int instrument, int volume, int effet){ void supprimerMotif(Motif** cellule){
m[portee][tmp]->note=note; int i;
m[portee][tmp]->octave=octave; for (i=0; i<nbrPortees; i++) {
m[portee][tmp]->instrument=instrument; free((*cellule)->motif[i]);
m[portee][tmp]->volume=volume; }
m[portee][tmp]->effet=effet; free((*cellule)->motif);
Motif* aux = (*cellule)->suivant;
free((*cellule));
*cellule = aux;
}
void definirNote(Motif* m, int portee, int tmp, int note){
m->Motif[portee][tmp]->note = note;
}
void definirOctave(Motif m, int portee, int tmp, int octave){
m->Motif[portee][tmp]->octave = octave;
}
void definirInstrument(Motif m, int portee, int tmp, int intrument){
m->Motif[portee][tmp]->instrument = instrument;
}
void definirVolume(Motif m, int portee, int tmp, int volume){
m->Motif[portee][tmp]->volume = volume;
}
void definirEffet(Motif m, int portee, int tmp, int effet){
m->Motif[portee][tmp]->effet = effet;
} }
void supprimerNote(Motif m, int portee, int tmp){ void supprimerNote(Motif m, int portee, int tmp){
m[portee][tmp]->note=0; m->motif[portee][tmp]->note = 0;
} }

View File

@ -1,32 +1,50 @@
#ifndef _motif_h
#define _motif_h
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#define NBRPORT 4
#define NBRMOTIF 16
typedef struct _note{ typedef struct _note{
int note; int note;
int octave; int octave;
int instrument; int instrument;
int volume; int volume;
int effet; int effet;
} Note; } Note;
typedef Note** Portee; typedef Note** Portee;
typedef Portee* Motif; typedef struct _motif{
char* nom;
int nbrTmp;
Portee* motif;
struct _motif suivant;
} Motif;
typedef struct _liste{ Motif* liste = NULL;
Motif motif;
struct _liste* suivant;
} Liste;
Liste* tab; int nbrTmp = 16;
int nbrMotif = 16;
int getIdMotif(Motif* m);
void ajouterMotif(int nbrPortees, int nbrTmp); void ajouterMotif(int nbrPortees, int nbrTmp);
void definirNomMotif(char* nom, Motif* m);
void supprimerMotif(Liste** cellule, int nbrPortees); // cellule correspond à l'adresse de l'élément de la liste (avec &) void supprimerMotif(Liste** cellule, int nbrPortees); // cellule correspond à l'adresse de l'élément de la liste (avec &)
void definirNote(Motif m, int portee, int tmp, int note, int octave, int instrument, int volume, int effet); void definirNote(Motif* m, int portee, int tmp, int note);
void definirOctave(Motif m, int portee, int tmp, int octave)
void definirInstrument(Motif m, int portee, int tmp, int intrument);
void definirVolume(Motif m, int portee, int tmp, int volume);
void definirEffet(Motif m, int portee, int tmp, int effet);
void supprimerNote(Motif m, int portee, int tmp); void supprimerNote(Motif m, int portee, int tmp);
#endif