Skip to content
Snippets Groups Projects
Commit 71869f36 authored by Jean-Marie  FAVREAU's avatar Jean-Marie FAVREAU
Browse files

Ajout des partitions générées

parent 66ff2a87
No related branches found
No related tags found
No related merge requests found
{
"do1": { "couleur": [167, 56, 36], "capsule": "0", "court": "1" },
"re1": { "couleur": [197, 101, 40], "capsule": "0", "court": "0" },
"mi1": { "couleur": [244, 226, 54], "capsule": "0", "court": "0" },
"fa1": { "couleur": [150, 197, 40], "capsule": "0", "court": "0" },
"sol1": { "couleur": [46, 72, 109], "capsule": "0", "court": "0" },
"la1": { "couleur": [62, 58, 135], "capsule": "0", "court": "0" },
"si1": { "couleur": [106, 41, 131], "capsule": "0", "court": "0" },
"do2": { "couleur": [151, 55, 30], "capsule": "0", "court": "0" }
"do1": { "couleur": [255, 0, 0], "capsule": "0", "court": "1" },
"re1": { "couleur": [255, 119, 0], "capsule": "0", "court": "1" },
"mi1": { "couleur": [255, 238, 0], "capsule": "0", "court": "1" },
"fa1": { "couleur": [81, 255, 0], "capsule": "0", "court": "1" },
"sol1": { "couleur": [0, 118, 88], "capsule": "0", "court": "1" },
"la1": { "couleur": [140, 0, 255], "capsule": "0", "court": "1" },
"si1": { "couleur": [221, 0, 115], "capsule": "0", "court": "1" },
"do2": { "couleur": [255, 0, 0], "capsule": "0", "court": "0" }
}
......@@ -95,6 +95,8 @@ class GenerateurExercice(GammeTemperee):
result += "\\usetikzlibrary{arrows}\n"
result += "\\pagestyle{empty}\n"
result += "\\usepackage{helvet}"
result += "\\usepackage{musixtex}"
result += "\\usepackage{harmony}"
result += "\\renewcommand{\\familydefault}{\\sfdefault}"
......@@ -293,7 +295,7 @@ class GenerateurExercice(GammeTemperee):
def pointColore(self, boomwhacker, x, y, r):
result = self.couleurBoomwhackerToTikz(boomwhacker)
rayon = r if boomwhacker["court"] == "0" else r * 0.7
rayon = r * 1.2 if boomwhacker["court"] == "0" else r
result += "\\fill[fill=tempcolor] ("+ \
str(x) + "," + str(y) + ") circle (" + str(rayon) + ");"
if boomwhacker["capsule"] == "1":
......@@ -329,7 +331,7 @@ class GenerateurExercice(GammeTemperee):
result += "Prénom"
for n in notes:
result += "&"
result += "\\hspace*{2.5cm}"
result += "\\hspace*{2cm}"
result += "\\\\ \n"
result += "\\hline\n"
result += "\\end{tabular}\n"
......@@ -347,7 +349,7 @@ class GenerateurExercice(GammeTemperee):
stepx = 2
stepy = 2.5
radius = stepx / 4.
radius = stepx * 0.22
finDeLigne = self.longueurPartitionColoree * stepx
......@@ -389,6 +391,49 @@ class GenerateurExercice(GammeTemperee):
return result
def partitionMusicale(self, partitions):
result = ""
if len(partitions) == 1:
partition = partitions[0]
for n in partition:
if not isinstance(n[0], float):
result += "Le générateur d'exercice ne prend pas en charge cette partition."
return result
notes = [ self.getOctaveEtIDNote(p) for p in self.notesDansPartition(partitions) ]
minNote = min([ n for n in notes if n[1] > 0])
(minoctave, minidnote) = minNote
maxNote = max([ n for n in notes if n[1] > 0])
(maxoctave, maxidnote) = maxNote
midOctave = int((maxoctave + minoctave) / 2)
result += "\\begin{figure}[H]"
result += "\\begin{music}"
result += "\\parindent10mm"
result += "\\startextract"
result += "\\notes "
for note in partition:
if note[0] != 0:
result += self.dureeToMusicTex(note[1]) + "{"
result += self.frequenceToMusicTeX(note[0], midOctave)
result += "}"
else:
# TODO
pass
result +="\enotes"
result += "\\zendextract"
result += "\\end{music}"
result += "\\caption{Partition simplifiée}"
result += "\\end{figure}"
else:
result += "Le générateur d'exercice ne prend pas en charge cette partition."
return result
# cette fonction écrit la fin de l'exercice spectrogramme
def finExerciceSpectrogramme(self, partitions):
result = "\n"
......@@ -417,9 +462,12 @@ class GenerateurExercice(GammeTemperee):
result += self.tableauNotesBrutes(partitions, True)
result += "\\section{Partition graphique}\n"
# on écrit le tableau solution de l'exercice
result += self.partitionGraphique(partitions)
result += "\\section{Partition musicale}\n"
result += self.partitionMusicale(partitions)
return result
def frequenceEnCm(self, frequence):
......
......@@ -107,6 +107,64 @@ class GammeTemperee:
(o, i) = self.getOctaveEtIDNote(frequence)
return self.toLaTeX(o, i)
def dureeToMusicTex(self, duree):
if duree == self.ronde:
return "\\wh"
elif duree == self.rondepointee:
return "\\whp"
elif duree == self.blanche:
return "\\ha"
elif duree == self.blanchepointee:
return "\\hap"
elif duree == self.noire:
return "\\qa"
elif duree == self.noirepointee:
return "\\qap"
elif duree == self.croche:
return "\\ca"
elif duree == self.crochepointee:
return "\\clp"
elif duree == self.doublecroche:
return "\\cca"
elif duree == self.doublecrochepointee:
return "\\cclp"
elif duree == self.triplecroche:
return "\\ccca"
elif duree == self.triplecrochepointee:
return "\\ccclp"
def toMusicTeX(self, octave, idNote, octaveRef):
# voir https://fr.wikibooks.org/wiki/LaTeX/%C3%89crire_de_la_musique
if octave == octaveRef:
notes = [ "c", "^c", "d", "^d",
"e", "f", "^f", "g", "^g",
"h", "^h", "i"]
return notes[idNote]
elif octave - octaveRef == 1:
notes = [ "j", "^j", "k", "^k",
"l", "m", "^m", "n", "^n",
"o", "^o", "p"]
return notes[idNote]
elif octave - octaveRef == -1:
notes = [ "J", "^J", "K", "^K",
"L", "M", "^M", "N", "^N",
"a", "^a", "b"]
return notes[idNote]
elif octave - octaveRef == -2:
notes = [ "C", "^C", "D", "^D",
"E", "F", "^F", "G", "^G",
"H", "^H", "I"]
return notes[idNote]
elif octave - octaveRef == 2:
notes = [ "q", "^q", "r", "^r",
"s", "t", "^t", "u", "^u",
"v", "^v", "w"]
return notes[idNote]
def frequenceToMusicTeX(self, frequence, octaveRef):
(o, i) = self.getOctaveEtIDNote(frequence)
return self.toMusicTeX(o, i, octaveRef)
# retourne l'octave et l'identifiant de la note pour chacune des notes de l'intervalle donné en fréquence
def getOctaveEtIDNoteDansIntervalle(self, noteMin, noteMax):
if noteMin > noteMax:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment