diff --git a/musique/exercice.py b/musique/exercice.py index 9ce1cf8e2f451c7d05c31917d5ebcd35bf955536..3ab4079363a856d15fa41cec0b4ba726a1631c15 100644 --- a/musique/exercice.py +++ b/musique/exercice.py @@ -233,6 +233,39 @@ class GenerateurExercice(GammeTemperee): result += "\\end{table}\n" return result + + def estDessinable(self, partitions): + if len(partitions) != 1: + print "plus d'une partition" + return False + if self.contientNoteAlteree(partitions): + print "note alteree" + return False + + notes = [ self.getOctaveEtIDNote(p) for p in self.notesDansPartition(partitions) ] + + minNote = min(notes) + maxNote = max(notes) + + print notes + # si les notes sont dans une même gamme + # ou qu'elles sont sur deux gammes, avec le do dans la gamme suivante + return minNote[0] == maxNote[0] or (minNote[0] == maxNote[0] + 1 and maxNote[1] == 0) + + + def partitionGraphique(self, partitions): + result = "" + + frequences = self.notesDansPartition(partitions) + + if self.estDessinable(partitions): + p = partitions[0] + # TODO + result += "On peut la dessiner." + else: + result += "Cette partition n'est pas représentable sous forme de partition pour boomwhackers diatoniques." + + return result # cette fonction écrit la fin de l'exercice spectrogramme def finExerciceSpectrogramme(self, partitions): @@ -261,6 +294,9 @@ class GenerateurExercice(GammeTemperee): # on écrit le tableau solution de l'exercice result += self.tableauNotesBrutes(partitions, True) + result += "\\section{Partition graphique}\n" + # on écrit le tableau solution de l'exercice + result += self.partitionGraphique(partitions) return result @@ -288,7 +324,6 @@ class GenerateurExercice(GammeTemperee): # à l'horodatage donné def accordSpectrogrammePartition(self, accord, horodatage, couleur): if isinstance(accord[0], float): - print "duree", accord[1], self.nomDuree(accord[1]) return self.noteSpectrogrammePartition(accord[0], accord[1], horodatage, couleur) else: return ''.join([self.noteSpectrogrammePartition(note, accord[1], horodatage, couleur) for note in accord[0]]) diff --git a/musique/gamme.py b/musique/gamme.py index 068187627109602b215e14f33653659a0ee38438..56938b78d6f2bc63b001277ded4f10557d998084 100644 --- a/musique/gamme.py +++ b/musique/gamme.py @@ -125,6 +125,22 @@ class GammeTemperee: l = [[ x for x in [note[0] if isinstance(note[0], float) else note[0] for note in partition] if x != 0.] for partition in partitions] return list(set([ j for i in l for j in i ])) + + def isNoteAlteree(self, frequence): + (o, i) = self.getOctaveEtIDNote(frequence) + return i in [ 1, 3, 6, 8, 10 ] + + def contientNoteAlteree(self, partitions): + for partition in partitions: + for note in partition: + if isinstance(note[0], float): + if self.isNoteAlteree(note[0]): + return True + else: + for n in note: + if self.isNoteAlteree(n[0]): + return True + return False # retourne la fréquence minimum utilisée dans les partitions def minFrequence(self, partitions):