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

Début de réajustement du fonctionnement du synthétiseur

parent ec7d7d05
No related branches found
No related tags found
No related merge requests found
......@@ -699,5 +699,5 @@ if args.exerciceSpectrogramme:
g.genererExerciceSpectrogramme(elise, "exercices/ex-spec-elise.tex", "La lettre à Élise")
else:
print "Génération de la version \"piano\""
s = BasicSequenceur(1, gamme.bpm, 0.7, 3)
s = BasicSequenceur(1, gamme.bpm, 3)
s.genererMelodie(elise, "sons/elise.wav")
......@@ -48,6 +48,6 @@ if args.exerciceSpectrogramme:
g.genererExerciceSpectrogramme(flic, "exercices/ex-spec-flic.tex", "thème \"le flic de Beverly Hills\"")
else:
print "Génération de la version \"piano\""
s = BasicSequenceur(1, gamme.bpm, 0.7, 0)
s = BasicSequenceur(1, gamme.bpm, 0)
s.genererMelodie(flic, "sons/flic.wav")
......@@ -47,6 +47,6 @@ if args.exerciceSpectrogramme:
g.genererExerciceSpectrogramme(flic2, "exercices/ex-spec-flic2.tex", "thème \"le flic de Beverly Hills\"")
else:
print "Génération du son"
s = BasicSequenceur(1, gamme.bpm, 0.7, 0)
s = BasicSequenceur(1, gamme.bpm, 0)
s.genererMelodie(flic2, "sons/flic2.wav")
......@@ -47,6 +47,6 @@ if args.exerciceSpectrogramme:
g.genererExerciceSpectrogramme(happy, "exercices/ex-spec-happybirthday.tex", "thème joyeux anniversaire")
else:
print "Génération du son"
s = BasicSequenceur(1, gamme.bpm, 0.7, 8)
s = BasicSequenceur(1, gamme.bpm, 8)
s.genererMelodie(happy, "sons/happybirthday.wav")
......@@ -67,5 +67,5 @@ if args.exerciceSpectrogramme:
g.genererExerciceSpectrogramme(lavieenrose, "exercices/ex-spec-lavieenrose.tex", "La vie en rose")
else:
print "Génération de la version \"piano\""
s = BasicSequenceur(1, gamme.bpm , 0.7, 5)
s = BasicSequenceur(1, gamme.bpm , 5)
s.genererMelodie(lavieenrose, "sons/lavieenrose.wav")
......@@ -156,7 +156,7 @@ class Enveloppe:
# methode statique permettant de construire une enveloppe simple, avec une duree d'attaque et declin
# identique (correspondant à la frappe d'une corde), un court maintien, et une longue relache
# identique (correspondant à la frappe d'une corde), un long maintien, et une courte relache
# Parametres:
# * dureeEnSeconde: duree totale du son, en seconde
# * dureeFrappe: duree cumulee de l'attaque et du declin
......@@ -165,7 +165,7 @@ class Enveloppe:
att = dureeFrappe / 2
if dureeEnSeconde < 4 * att:
dureeEnSeconde = 4 * att
return Enveloppe(att, att, (dureeEnSeconde - 2 * att) * 0.1, (dureeEnSeconde - 2 * att) * 0.8, fech)
return Enveloppe(att, att, dureeEnSeconde - 3 * att, att, fech)
# methode statique permettant de construire une enveloppe simple sans frappe, avec une duree de declin
# et de maintien nulle, une duree d'attaque très courte, et une longue relâche
......@@ -197,8 +197,8 @@ class Enveloppe:
# methode permettant de modifier la duree du maintien et de la relache, en reduisant le maintien pour
# qu'il corresponde a la contrainte donnee, et en reduisant proportionnellement la relache et le maintien
# methode permettant de modifier la duree de la note, en reduisant le maintien pour
# qu'il corresponde a la contrainte donnee
# Parametres:
# * dureeAvantRelache: duree maximum (en seconde) avant la relache
def getEnveloppeReduite(self, dureeAvantRelache):
......@@ -207,12 +207,10 @@ class Enveloppe:
maintien = self.dureeMaintien
relache = self.dureeRelache
amplitudeMaintien = self.amplitudeMaintien
if dureeAvantRelache < attaque + declin + maintien + relache:
dureeApresFrappe = maintien + relache
nouvelledureeApresFrappe = dureeAvantRelache - (attaque + declin)
if nouvelledureeApresFrappe >= 0:
maintien = maintien / dureeApresFrappe * nouvelledureeApresFrappe
relache = relache / dureeApresFrappe * nouvelledureeApresFrappe
if dureeAvantRelache < attaque + declin + maintien:
nouveauMaintien = dureeAvantRelache - (attaque + declin)
if nouveauMaintien >= 0:
maintien = nouveauMaintien
else:
maintien = 0.
relache = 0.
......@@ -337,7 +335,7 @@ class BasicNote:
# * duree: la duree de la note, correspondant non pas à la duree du son, mais à sa duree sur la partition (ie noire, blanche, etc.)
# * nbHarmoniques: nombre d'harmoniques qui viendront enrichir la note
def __init__(self, generateurDeNote, enveloppe, fech, frequence, duree, nbHarmoniques = 0, dureeFrappe = 0.04):
print "nbHarmoniques:", nbHarmoniques
self.generateurDeNote = generateurDeNote
self.getEch = self.generateurDeNote.getEchantillon
......@@ -479,8 +477,9 @@ class BasicSequenceur(GammeTemperee):
# Paramètres:
# * nbCanaux: nombre de canaux (1: mono, 2: stereo, ...)
# * bpm: nombre de battements par minute (= nombre de noires par minute)
# * dureeSon: duree d'un son (enveloppe complète).
def __init__(self, nbCanaux = 1, bpm = 120, dureeSon = 0.1, nbHarmoniques = 0):
# * nbHarmoniques: nombre d'harmoniques composant le son
# * dureeSon: duree maximale d'un son (enveloppe complète).
def __init__(self, nbCanaux = 1, bpm = 120, nbHarmoniques = 0, dureeSon = 4):
GammeTemperee.__init__(self, bpm)
self.generateurDeNote = GenerateurDeNote(self.fech)
self.nbHarmoniques = nbHarmoniques
......@@ -490,16 +489,16 @@ class BasicSequenceur(GammeTemperee):
# Permet d'ajuster l'enveloppe d'un son produit par le synthetiseur, sans aucune attaque, relâche...
# le son passe d'un volume nul à un volume maximal instantanément, et inversement à la fin.
# Paramètres:
# * dureeEnSeconde: duree du son produit par le synthetiseur lorsqu'une note est jouee
def setEnveloppeZeroUn(self, dureeEnSeconde):
# * dureeEnSeconde: duree maximale du son produit par le synthetiseur lorsqu'une note est jouee
def setEnveloppeZeroUn(self, dureeEnSeconde = 4):
self.dureeAttaqueEnveloppe = 0
self.enveloppe = Enveloppe.enveloppeZeroUn(dureeEnSeconde, self.fech)
# Permet d'ajuster l'enveloppe d'un son produit par le synthetiseur, sous forme d'une montée
# progressive, puis d'une descente: "/\"
# Paramètres:
# * dureeEnSeconde: duree du son produit par le synthetiseur lorsqu'une note est jouee
def setEnveloppeMonteeDescente(self, dureeEnSeconde):
# * dureeEnSeconde: duree maximale du son produit par le synthetiseur lorsqu'une note est jouee
def setEnveloppeMonteeDescente(self, dureeEnSeconde = 4):
self.dureeAttaqueEnveloppe = 0
self.enveloppe = Enveloppe.enveloppeMonteeDescente(dureeEnSeconde, self.fech)
......@@ -507,10 +506,10 @@ class BasicSequenceur(GammeTemperee):
# Permet d'ajuster l'enveloppe d'un son produit par le synthetiseur, en imitant un instrument
# percussif, comme celui d'un piano.
# Paramètres:
# * dureeEnSeconde: duree du son produit par le synthetiseur lorsqu'une note est jouee
# * dureeEnSeconde: duree maximale du son produit par le synthetiseur lorsqu'une note est jouee
# * dureeFrappe: duree de la frappe (première partie du son, correspondant dans l'enveloppe
# à l'attaque et au declin).
def setEnveloppeFrappeSimple(self, dureeEnSeconde, dureeFrappe = 0.02):
def setEnveloppeFrappeSimple(self, dureeEnSeconde = 4, dureeFrappe = 0.02):
self.dureeAttaqueEnveloppe = dureeFrappe / 4
self.enveloppe = Enveloppe.enveloppeAvecFrappeSimple(dureeEnSeconde, dureeFrappe, self.fech)
......@@ -635,7 +634,7 @@ class BasicSequenceur(GammeTemperee):
echSuivant()
# on filtre ensuite les sons en ne gardant que ceux qui ne sont pas encore finsi
# on filtre ensuite les sons en ne gardant que ceux qui ne sont pas encore finis
self.sons = [ x for x in self.sons if not x.estFiniSonEtNote() ]
......
......@@ -47,6 +47,6 @@ if args.exerciceSpectrogramme:
g.genererExerciceSpectrogramme(rainbow, "exercices/ex-spec-rainbow.tex", "Rainbow")
else:
print "Génération du son"
s = BasicSequenceur(1, gamme.bpm, 0.7, 0)
s = BasicSequenceur(1, gamme.bpm, 0)
s.genererMelodie(rainbow, "sons/rainbow.wav")
......@@ -50,6 +50,6 @@ if args.exerciceSpectrogramme:
g.genererExerciceSpectrogramme(stair, "exercices/ex-spec-stairway.tex", "Stairway")
else:
print "Génération du son"
s = BasicSequenceur(1, gamme.bpm, 0.7, 0)
s = BasicSequenceur(1, gamme.bpm, 0)
s.genererMelodie(stair, "sons/stairway.wav")
......@@ -59,5 +59,5 @@ if args.exerciceSpectrogramme:
g.genererExerciceSpectrogramme(starwars, "exercices/ex-spec-starwars.tex", "thème StarWars")
else:
print "Génération de la version \"piano\""
s = BasicSequenceur(1, gamme.bpm, 0.7, 3)
s = BasicSequenceur(1, gamme.bpm, 3)
s.genererMelodie(starwars, "sons/starwars.wav")
......@@ -58,7 +58,7 @@ tabac = [ [ [gamme.sol(3), gamme.noire],
] ]
s = BasicSequenceur(1, gamme.bpm , 0.7, 0)
s = BasicSequenceur(1, gamme.bpm , 0)
if args.full:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment