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"
void ajouterMotif(int nbrPortees, int nbrTmp){ int getIdMotif(Motif* m){
Motif m = malloc(nbrPortees*sizeof(Portee)); if (m == NULL) {
int i; return 0;
for (i=0; i<nbrPortees; i++) { } else {
m[i] = malloc(nbrTmp*sizeof(Note)); return getIdMotif(m->suivant)+1;
} }
Liste* l = malloc(sizeof(Liste));
l->suivant = tab;
tab = l;
} }
void supprimerMotif(Liste** cellule, int nbrPortees){ void ajouterMotif(int nbrPortees, int nbrTmp){
Motif* m = malloc(sizeof(Motif));
m->nbrTmp = nbrTmp;
m->suivant = liste;
m->motif = malloc(nbrPortees*sizeof(portee));
m->nom = strcat("Motif %d", getIdMotif(m));
int i;
for (i=0; i<nbrPortees; i++) {
m->motif[i] = calloc(nbrTmp,sizeof(Note));
}
liste = m;
}
void definirNomMotif(char* nom, Motif* m){
m->nom = nom;
}
void supprimerMotif(Motif** cellule){
int i; int i;
for (i=0; i<nbrPortees; i++) { for (i=0; i<nbrPortees; i++) {
free((*cellule)->motif[i]); free((*cellule)->motif[i]);
} }
free((*cellule)->motif); free((*cellule)->motif);
Liste* aux = (*cellule)->suivant; Motif* aux = (*cellule)->suivant;
free((*cellule)); free((*cellule));
*cellule = aux; *cellule = aux;
} }
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){
m[portee][tmp]->note=note; m->Motif[portee][tmp]->note = note;
m[portee][tmp]->octave=octave; }
m[portee][tmp]->instrument=instrument;
m[portee][tmp]->volume=volume; void definirOctave(Motif m, int portee, int tmp, int octave){
m[portee][tmp]->effet=effet; 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