Skip to content
Snippets Groups Projects
Commit 4dfd962d authored by Jean-Marie Favreau's avatar Jean-Marie Favreau
Browse files

Amélioration du rendu des spectrogrammes (travail encore en cours)

parent f309558d
No related branches found
No related tags found
No related merge requests found
......@@ -43,7 +43,7 @@ flic2 = [ [ [gamme.mi(4), gamme.croche],
] ]
if args.exerciceSpectrogramme:
g = GenerateurExercice(gamme.bpm, 0.7)
g = GenerateurExercice(gamme.bpm, 0.2)
g.genererExerciceSpectrogramme(flic2, "exercices/ex-spec-flic2.tex", "thème \"le flic de Beverly Hills\"")
else:
print "Génération du son"
......
......@@ -17,9 +17,9 @@ class GenerateurExercice(GammeTemperee):
self.dureeSon = dureeSon
self.dureeFrappe = 0.2 * self. dureeSon # la durée de la frappe
self.margeDocument = 1.0
self.bandeLegendeSpectrogramme = 1.0
self.margeDuree = 0.1
self.margeFrequence = 10
self.margeFrequence = 100
self.margeLegende = 1.0
# calcule la durée de la partition donnée en paramètre, dans le
# cas où elle est jouée au battement par minute courant
......@@ -58,8 +58,12 @@ class GenerateurExercice(GammeTemperee):
self.duree = self.calculeDureePartitions(partitions)
(self.fmin, self.fmax) = self.calculeIntervalleFrequencesPartitions(partitions)
self.largeur = largeur
self.hauteur = hauteur
self.echelleX = largeur / (self.duree + self.margeDuree * 2)
self.echelleY = hauteur / (self.fmax - self.fmin + self.margeFrequence * 2)
print self.echelleX, self.echelleY
# cette fonction retourne l'entête d'un document LaTeX
......@@ -92,6 +96,7 @@ class GenerateurExercice(GammeTemperee):
def debutExerciceSpectrogramme(self):
result = "\n"
result += "\\section{Les fréquences de la gamme tempérée}\n"
result += "La fréquence associée à chacune des notes notées sur une partition a varié au fil du temps. La conférence internationale de Londres de 1953 a fixé à 440~Hz la fréquence du $la^3$, ou \emph{$la$ du diapason}. Le système d'accord le plus répandu aujourd'hui est la gamme tempérée, qui divise l'octave en 12 intervalles chromatiques égaux, en s'éloignant légèrement des intonations justes afin de simplifier la gamme tout en permettant les accords conçus aux siècles précédents. Le tableau ci-dessous donne les fréquences pour chacune des notes de l'octave contenant le $la$ du diapason.\n"
result += "\\begin{center}\n"
result += "{\\scriptsize \\begin{tabular}{r|ccccccccccccc}\n"
result += "note & \\textbf{do} & do$\\sharp$ & ré & mi$\\flat$ & mi & fa & fa$\\sharp$ &sol & sol$\\sharp$ & la & si$\\flat$ & si & \\textbf{do} \\\\\n"
......@@ -113,10 +118,10 @@ class GenerateurExercice(GammeTemperee):
return result
def frequenceEnCm(self, frequence):
return self.bandeLegendeSpectrogramme + self.margeFrequence + frequence * self.echelleY
return (self.margeFrequence + frequence - self.fmin) * self.echelleY
def horodatageEnCm(self, horodatage):
return self.bandeLegendeSpectrogramme + self.margeDuree + horodatage * self.echelleX
return (self.margeDuree + horodatage) * self.echelleX
# dessine sur le spectrogramme l'accord donné en paramètre,
# à l'horodatage donné
......@@ -150,11 +155,21 @@ class GenerateurExercice(GammeTemperee):
# partition donnée en paramètre
def spectrogramme(self, partitions):
# on commence par initialiser l'échelle
self.initialisationEchelleSpectrogramme(partitions, 21 - 2 * self.margeDocument, 10)
self.initialisationEchelleSpectrogramme(partitions, 21 - 2 * self.margeDocument - self.margeLegende, 10)
result = ""
result += "\\begin{tikzpicture}[]"
# TODO: ajouter les axes
# axe des abscisses
result += "\draw[->, black] (0, 0) -- ";
result += "(" + str(self.largeur) + ", 0) node[below]{durée};\n";
# axe des ordonnées
result += "\draw[black, dashed] (0, 0) -- ";
result += "(0," + str(self.frequenceEnCm(self.fmin)) + ");\n";
result += "\draw[->, black] (0, " + str(self.frequenceEnCm(self.fmin)) + ") -- ";
result += "(0," + str(self.hauteur) + ") node[rotate=90, left, anchor=south]{fréquence};\n";
couleur = { 0: "black", 1: "darkgray", 2: "gray"}
for i,p in enumerate(partitions):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment