From 8ad4b550106bbaec19bf721488082930a52958cc Mon Sep 17 00:00:00 2001
From: Jean-Marie Favreau <J-Marie.Favreau@uca.fr>
Date: Tue, 29 Jan 2019 14:49:20 +0100
Subject: [PATCH] =?UTF-8?q?Beaucoup=20de=20corrections=20de=20bugs,=20on?=
 =?UTF-8?q?=20commence=20=C3=A0=20avoir=20quelque=20chose=20de=20fonctionn?=
 =?UTF-8?q?el?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Makefile            |   64 +-
 bellaciao.py        |    7 +-
 crescendo.py        |    5 +
 cucaracha.py        |    6 +
 elise.py            | 1411 ++++++++++++++++++++++---------------------
 flic.py             |    5 +
 flic2.py            |  109 ++--
 frerejacques.py     |    5 +
 happybirthday.py    |    6 +
 lavieenrose.py      |    6 +-
 musique/exercice.py |   60 +-
 musique/gamme.py    |   34 +-
 rainbow.py          |    6 +-
 stairway.py         |  114 ++--
 starwars.py         |  130 ++--
 tabac.py            |  177 +++---
 16 files changed, 1112 insertions(+), 1033 deletions(-)

diff --git a/Makefile b/Makefile
index 595b5c6..0065516 100644
--- a/Makefile
+++ b/Makefile
@@ -1,31 +1,33 @@
-
-EXERCICESDIR=exercices/
-SONS=sons/
-SCRIPTS=$(wildcard *.py)
-EXESPECTEX=$(addprefix $(EXERCICESDIR)/ex-spec-,$(SCRIPTS:.py=.tex))
-EXESPECPDF=$(EXESPECTEX:.tex=.pdf)
-WAVES=$(addprefix $(SONS)/,$(SCRIPTS:.py=.wav))
-.PRECIOUS: $(EXESPECTEX)
-
-all: waves pdf
-
-waves: $(WAVES)
-
-pdf: $(EXESPECPDF)
-
-tex: $(EXESPECTEX)
-
-$(EXERCICESDIR)/%.pdf: $(EXERCICESDIR)/%.tex
-	cd $(EXERCICESDIR); pdflatex $(<:$(EXERCICESDIR)/%=%); cd ..
-	
-$(EXERCICESDIR)/ex-spec-%.tex: %.py
-	python $< --exercice-spectrogramme
-	
-$(SONS)/%.wav: %.py
-	python $< 
-	
-cleantex:
-	rm -f $(EXESPECTEX) 
-	
-clean: cleantex
-	rm -f $(EXESPECPDF) $(WAVES)
+
+EXERCICESDIR=exercices/
+SONS=sons/
+SCRIPTS=$(wildcard *.py)
+EXESPECTEX=$(addprefix $(EXERCICESDIR)/ex-spec-,$(SCRIPTS:.py=.tex))
+EXESPECPDF=$(EXESPECTEX:.tex=.pdf)
+WAVES=$(addprefix $(SONS)/,$(SCRIPTS:.py=.wav))
+BOOMWHACKERS=boomwhackers-8.json
+
+.PRECIOUS: $(EXESPECTEX)
+
+all: waves pdf
+
+waves: $(WAVES)
+
+pdf: $(EXESPECPDF)
+
+tex: $(EXESPECTEX)
+
+$(EXERCICESDIR)/%.pdf: $(EXERCICESDIR)/%.tex
+	cd $(EXERCICESDIR); pdflatex $(<:$(EXERCICESDIR)/%=%); cd ..
+	
+$(EXERCICESDIR)/ex-spec-%.tex: %.py
+	python $< --exercice-spectrogramme --boomwhackers=$(BOOMWHACKERS)
+	
+$(SONS)/%.wav: %.py
+	python $< 
+	
+cleantex:
+	rm -f $(EXESPECTEX) 
+	
+clean: cleantex
+	rm -f $(EXESPECPDF) $(WAVES)
diff --git a/bellaciao.py b/bellaciao.py
index 1f1d03c..e086084 100644
--- a/bellaciao.py
+++ b/bellaciao.py
@@ -12,12 +12,16 @@ from musique.gamme import GammeTemperee
 
 parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition de Bella Ciao.')
 parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
+parser.add_argument('--boomwhackers', help="Génère un exercice plutôt que le fichier son", dest='boomwhackers', nargs=1)
 
 args = parser.parse_args()
 
 gamme = GammeTemperee(100)
 
-
+boomwhackers = ""
+if not args.boomwhackers is None:
+  boomwhackers = args.boomwhackers[0]
+  
 bellaciao = [ [ [gamme.mi(4), gamme.croche],
                 [gamme.la(4), gamme.croche],
                 [gamme.si(4), gamme.croche],
@@ -74,6 +78,7 @@ bellaciao = [ [ [gamme.mi(4), gamme.croche],
 
 if args.exerciceSpectrogramme:
   g = GenerateurExercice(gamme.bpm)
+  g.setBoomwhackers(boomwhackers)
   g.genererExerciceSpectrogramme(bellaciao, "exercices/ex-spec-bellaciao.tex", "thème \"Bella Ciao\"")
 else:
   print "Génération de la version \"piano\""
diff --git a/crescendo.py b/crescendo.py
index 5932513..97c7f9b 100644
--- a/crescendo.py
+++ b/crescendo.py
@@ -15,11 +15,15 @@ parser = argparse.ArgumentParser(description='Génère des documents à \
 parser.add_argument('--exercice-spectrogramme', help="Génère un exercice \
                     plutôt que le fichier son", dest='exerciceSpectrogramme', 
                     action='store_true',default=False)
+parser.add_argument('--boomwhackers', help="Génère un exercice plutôt que le fichier son", dest='boomwhackers', nargs=1)
 
 args = parser.parse_args()
 
 gamme = GammeTemperee(117)
 
+boomwhackers = ""
+if not args.boomwhackers is None:
+  boomwhackers = args.boomwhackers[0]
 
 crescendo = [ [ [gamme.do(3), gamme.noire],
                 [gamme.re(3), gamme.noire], 
@@ -33,6 +37,7 @@ crescendo = [ [ [gamme.do(3), gamme.noire],
 
 if args.exerciceSpectrogramme:
   g = GenerateurExercice(gamme.bpm)
+  g.setBoomwhackers(boomwhackers)
   g.genererExerciceSpectrogramme(crescendo,
                                  "exercices/ex-spec-crescendo.tex",
                                  "Crescendo")
diff --git a/cucaracha.py b/cucaracha.py
index f7464f7..c1d69b7 100644
--- a/cucaracha.py
+++ b/cucaracha.py
@@ -12,12 +12,17 @@ from musique.gamme import GammeTemperee
 
 parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition de la cucaracha.')
 parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
+parser.add_argument('--boomwhackers', help="Génère un exercice plutôt que le fichier son", dest='boomwhackers', nargs=1)
 
 args = parser.parse_args()
 
 gamme = GammeTemperee(160)
 
 
+boomwhackers = ""
+if not args.boomwhackers is None:
+  boomwhackers = args.boomwhackers[0]
+
 cucaracha = [ [ [gamme.re(4), gamme.noire], 
                 [gamme.re(4), gamme.noire],
                 [gamme.re(4), gamme.noire],
@@ -57,6 +62,7 @@ cucaracha = [ [ [gamme.re(4), gamme.noire],
 
 if args.exerciceSpectrogramme:
   g = GenerateurExercice(gamme.bpm)
+  g.setBoomwhackers(boomwhackers)
   g.genererExerciceSpectrogramme(cucaracha, "exercices/ex-spec-cucaracha.tex", "thème \"la cucaracha\"")
 else:
   print "Génération de la version \"piano\""
diff --git a/elise.py b/elise.py
index 046e3b8..1ae3bc0 100755
--- a/elise.py
+++ b/elise.py
@@ -1,703 +1,708 @@
-#!/usr/bin/env python
-# coding: utf8
-
-import argparse
-from musique.basicsynth import BasicSequenceur
-from musique.exercice import GenerateurExercice
-from musique.gamme import GammeTemperee
-
-parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition de "la lettre à Élise".')
-parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
-
-args = parser.parse_args()
-
-gamme = GammeTemperee(95)
-
-
-
-
-elise =  [
-          [ [gamme.mi(3), gamme.doublecroche], 
-          [gamme.red(3), gamme.doublecroche],
-          [gamme.mi(3), gamme.doublecroche],
-          [gamme.red(3), gamme.doublecroche],
-          [gamme.mi(3), gamme.doublecroche],
-          [gamme.si(2), gamme.doublecroche],
-          [gamme.re(3), gamme.doublecroche],
-          [gamme.do(3), gamme.doublecroche],
-          [gamme.la(2), gamme.croche],
-          [gamme.silence(), gamme.doublecroche],
-          [gamme.do(2), gamme.doublecroche],
-          [gamme.mi(2), gamme.doublecroche],
-          [gamme.la(2), gamme.doublecroche],
-          [gamme.si(2), gamme.croche],
-          [gamme.silence(), gamme.doublecroche],
-          [gamme.mi(2), gamme.doublecroche],
-          [gamme.sold(2), gamme.doublecroche],
-          [gamme.si(2), gamme.doublecroche],
-          [gamme.do(3), gamme.croche],
-          [gamme.silence(), gamme.doublecroche],
-          [gamme.mi(2), gamme.doublecroche],
-          [gamme.mi(3), gamme.doublecroche],
-          [gamme.red(3), gamme.doublecroche],
-          [gamme.mi(3), gamme.doublecroche],
-          [gamme.red(3), gamme.doublecroche],
-          [gamme.mi(3), gamme.doublecroche],
-          [gamme.si(2), gamme.doublecroche],
-          [gamme.re(3), gamme.doublecroche],
-          [gamme.do(3), gamme.doublecroche],
-          [gamme.la(2), gamme.croche],
-          [gamme.silence(), gamme.doublecroche],          
-          [gamme.do(2), gamme.doublecroche],
-          [gamme.mi(2), gamme.doublecroche],
-          [gamme.la(2), gamme.doublecroche],
-          [gamme.si(2), gamme.croche],
-          [gamme.silence(), gamme.doublecroche],          
-          [gamme.mi(2), gamme.doublecroche],
-          [gamme.do(3), gamme.doublecroche],
-          [gamme.si(2), gamme.doublecroche],
-          [gamme.la(2), gamme.croche],
-          [gamme.silence(), gamme.doublecroche],          
-          [gamme.si(2), gamme.doublecroche],
-          [gamme.do(3), gamme.doublecroche],
-          [gamme.re(3), gamme.doublecroche],
-          [gamme.mi(3), gamme.crochepointee],
-          [gamme.sol(2), gamme.doublecroche],
-          [gamme.fa(3), gamme.doublecroche],
-          [gamme.mi(3), gamme.doublecroche],
-          [gamme.re(3), gamme.crochepointee],
-          [gamme.fa(2), gamme.doublecroche],
-          [gamme.mi(3), gamme.doublecroche],
-          [gamme.re(3), gamme.doublecroche],
-          [gamme.do(3), gamme.crochepointee],
-          [gamme.mi(2), gamme.doublecroche],
-          [gamme.re(3), gamme.doublecroche],
-          [gamme.do(3), gamme.doublecroche],
-          [gamme.si(2), gamme.croche],
-          #[gamme.silence(), gamme.doublecroche],          
-          #[gamme.mi(2), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.silence(), gamme.croche],          
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.mi(4), gamme.doublecroche],
-          #[gamme.silence(), gamme.croche],          
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.silence(), gamme.doublecroche],          
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.si(2), gamme.doublecroche],
-          #[gamme.re(3), gamme.doublecroche],
-          #[gamme.do(3), gamme.doublecroche],
-          #[gamme.la(2), gamme.croche],
-          #[gamme.silence(), gamme.doublecroche],          
-          #[gamme.do(2), gamme.doublecroche],
-          #[gamme.mi(2), gamme.doublecroche],
-          #[gamme.la(2), gamme.doublecroche],
-          #[gamme.si(2), gamme.croche],
-          #[gamme.silence(), gamme.doublecroche],          
-          #[gamme.mi(2), gamme.doublecroche],
-          #[gamme.sold(2), gamme.doublecroche],
-          #[gamme.si(2), gamme.doublecroche],
-          #[gamme.do(3), gamme.croche],
-          #[gamme.silence(), gamme.doublecroche],          
-          #[gamme.mi(2), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.si(2), gamme.doublecroche],
-          #[gamme.re(3), gamme.doublecroche],
-          #[gamme.do(3), gamme.doublecroche],
-          #[gamme.la(2), gamme.doublecroche],
-          #[gamme.silence(), gamme.doublecroche],          
-          #[gamme.do(2), gamme.doublecroche],
-          #[gamme.mi(2), gamme.doublecroche],
-          #[gamme.la(2), gamme.doublecroche],
-          #[gamme.si(2), gamme.croche],
-          #[gamme.silence(), gamme.doublecroche],          
-          #[gamme.mi(2), gamme.doublecroche],
-          #[gamme.do(3), gamme.doublecroche],
-          #[gamme.si(2), gamme.doublecroche],
-          #[gamme.la(2), gamme.croche],
-          #[[gamme.mi(2), gamme.do(3)],gamme.doublecroche],
-          #[[gamme.fa(2), gamme.do(3)], gamme.doublecroche],
-          #[[gamme.mi(2), gamme.sol(2), gamme.do(3)], gamme.doublecroche],
-          #[gamme.fa(2), gamme.doublecroche],
-          #[gamme.la(2), gamme.doublecroche],
-          #[gamme.do(3), gamme.doublecroche],
-          #[gamme.fa(3), gamme.doublecrochepointee],
-          #[gamme.mi(3), gamme.triplecroche],
-          #[gamme.mi(3), gamme.croche],
-          #[gamme.re(3), gamme.croche],
-          #[gamme.sib(3), gamme.doublecrochepointee],
-          #[gamme.la(3), gamme.triplecroche],
-          #[gamme.la(3), gamme.doublecroche],
-          #[gamme.sol(3), gamme.doublecroche],
-          #[gamme.fa(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.re(3), gamme.doublecroche],
-          #[gamme.do(3), gamme.doublecroche],
-          #[gamme.sib(2), gamme.croche],
-          #[gamme.la(2), gamme.croche],
-          #[gamme.si(2), gamme.doublecroche],
-          #[gamme.la(2), gamme.doublecroche],
-          #[gamme.sol(2), gamme.doublecroche],
-          #[gamme.la(2), gamme.doublecroche],
-          #[gamme.si(2), gamme.doublecroche],
-          #[gamme.do(3), gamme.noire],
-          #[gamme.re(3), gamme.doublecroche],
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.crochepointee],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.fa(3), gamme.doublecroche],
-          #[gamme.la(2), gamme.doublecroche],
-          #[gamme.do(3), gamme.noire],
-          #[gamme.re(3), gamme.doublecrochepointee],
-          #[gamme.si(2), gamme.triplecroche],
-          #[gamme.do(3), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.sol(2), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.la(2), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.si(3), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.do(3), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.re(3), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.mi(3), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.do(4), gamme.triplecroche],
-          #[gamme.si(3), gamme.triplecroche],
-          #[gamme.la(3), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.fa(3), gamme.triplecroche],
-          #[gamme.mi(3), gamme.triplecroche],
-          #[gamme.re(3), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.fa(3), gamme.triplecroche],
-          #[gamme.re(3), gamme.triplecroche],
-          #[gamme.do(3), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.sol(2), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.la(2), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.si(3), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.do(3), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.re(3), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.mi(3), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.do(4), gamme.triplecroche],
-          #[gamme.si(3), gamme.triplecroche],
-          #[gamme.la(3), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.fa(3), gamme.triplecroche],
-          #[gamme.mi(3), gamme.triplecroche],
-          #[gamme.re(3), gamme.triplecroche],
-          #[gamme.sol(3), gamme.triplecroche],
-          #[gamme.fa(3), gamme.triplecroche],
-          #[gamme.re(3), gamme.triplecroche],
-          #[gamme.mi(3), gamme.triplecroche],
-          #[gamme.fa(3), gamme.triplecroche],
-          #[gamme.mi(3), gamme.triplecroche],
-          #[gamme.red(3), gamme.triplecroche],
-          #[gamme.mi(3), gamme.triplecroche],
-          #[gamme.si(2), gamme.triplecroche],
-          #[gamme.mi(3), gamme.triplecroche],
-          #[gamme.re(3), gamme.triplecroche],
-          #[gamme.mi(3), gamme.triplecroche],
-          #[gamme.si(2), gamme.triplecroche],
-          #[gamme.mi(3), gamme.triplecroche],
-          #[gamme.re(3), gamme.triplecroche],
-          #[gamme.mi(3), gamme.crochepointee],
-          #[gamme.si(2), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.crochepointee],
-          #[gamme.si(2), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #[gamme.si(2), gamme.doublecroche],
-          #[gamme.re(3), gamme.doublecroche],
-          #[gamme.do(3), gamme.doublecroche],
-          #[gamme.la(2), gamme.croche],
-          #[gamme.silence(), gamme.doublecroche] 
-          ]#,
-          #[gamme.demiSoupir(),
-          #gamme.pause(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.sold(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #gamme.pause(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.sold(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.do(1), gamme.doublecroche],
-          #[gamme.sol(1), gamme.doublecroche],
-          #[gamme.do(2), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.sol(0), gamme.doublecroche],
-          #[gamme.sol(1), gamme.doublecroche],
-          #[gamme.si(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.mi(2), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.quartDeSoupir(),
-          #[gamme.mi(2), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.quartDeSoupir(),
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.quartDeSoupir(),
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #gamme.pause(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.sold(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #gamme.pause(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.sold(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1),gamme.doublecroche],
-          #[gamme.la(1),gamme.doublecroche],
-          #[[gamme.sib(1),gamme.do(2)],gamme.doublecroche],
-          #[[gamme.la(1),gamme.do(2)],gamme.doublecroche],
-          #[[gamme.sol(1),gamme.sib(1),gamme.do(2)],gamme.doublecroche],
-          #[gamme.fa(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #[gamme.do(2), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #[gamme.do(2), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #[gamme.fa(1), gamme.doublecroche],
-          #[gamme.sib(1), gamme.doublecroche],
-          #[gamme.re(2), gamme.doublecroche],
-          #[gamme.sib(1), gamme.doublecroche],
-          #[gamme.re(2), gamme.doublecroche],
-          #[gamme.sib(1), gamme.doublecroche],
-          #[gamme.fa(1), gamme.doublecroche],
-          #[gamme.mi(2), gamme.doublecroche],
-          #[[gamme.fa(1),gamme.sol(1),gamme.sib(1)], gamme.doublecroche],
-          #[gamme.mi(2), gamme.doublecroche],
-          #[[gamme.fa(1),gamme.sol(1),gamme.sib(1)], gamme.doublecroche],
-          #[gamme.mi(2), gamme.doublecroche],
-          #[gamme.fa(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #[gamme.do(2), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #[gamme.do(2), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #[gamme.fa(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #[gamme.do(2), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #[gamme.do(2), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #[gamme.do(2), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #[[gamme.re(1), gamme.re(2)], gamme.doublecroche],
-          #[gamme.fa(1), gamme.doublecroche],
-          #[gamme.sol(1), gamme.doublecroche],
-          #[gamme.mi(2), gamme.doublecroche],
-          #[gamme.sol(1), gamme.doublecroche],
-          #[gamme.mi(2), gamme.doublecroche],
-          #[gamme.sol(1), gamme.doublecroche],
-          #[gamme.fa(2), gamme.doublecroche],
-          #[[gamme.do(2), gamme.mi(2)], gamme.croche],
-          #gamme.quartDeSoupir(),
-          #[[gamme.fa(2), gamme.sol(2)], gamme.doublecroche],
-          #[[gamme.sol(2), gamme.mi(2)], gamme.doublecroche],
-          #[[gamme.re(2), gamme.fa(2), gamme.sol(2)], gamme.doublecroche],
-          #[[gamme.do(2), gamme.mi(2), gamme.sol(2)], gamme.croche],
-          #[[gamme.fa(1), gamme.la(1)], gamme.croche],
-          #[[gamme.sol(1), gamme.si(1)], gamme.croche],
-          #[gamme.do(2), gamme.croche],
-          #gamme.quartDeSoupir(),
-          #[[gamme.fa(2), gamme.sol(2)], gamme.doublecroche],
-          #[[gamme.sol(2), gamme.mi(2)], gamme.doublecroche],
-          #[[gamme.re(2), gamme.fa(2), gamme.sol(2)], gamme.doublecroche],
-          #[[gamme.do(2), gamme.mi(2), gamme.sol(2)], gamme.croche],
-          #[[gamme.fa(1), gamme.la(1)], gamme.croche],
-          #[[gamme.sol(1), gamme.si(1)], gamme.croche],
-          #[[gamme.sold(1), gamme.si(1)], gamme.croche],
-          #gamme.soupir(),
-          #gamme.pause(),
-          #gamme.pause(),
-          #gamme.pause(),
-          #gamme.pause(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.sold(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #gamme.pause(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.sold(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.do(1),gamme.doublecroche],
-          #[gamme.sol(1), gamme.doublecroche],
-          #[gamme.do(2), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.sol(0),gamme.doublecroche],
-          #[gamme.sol(1), gamme.doublecroche],
-          #[gamme.si(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.mi(2), gamme.doublecroche],
-          #gamme.demiSoupir(),
-          #[gamme.mi(2), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #gamme.demiSoupir(),
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #gamme.demiSoupir(),
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #gamme.pause(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.sold(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #gamme.pause(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.sold(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[[gamme.re(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.re(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.re(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.re(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.re(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.re(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.red(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.red(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.red(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.red(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.red(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.red(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.mi(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.mi(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.mi(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.mi(0), gamme.la(0)], gamme.doublecroche],
-          #[[gamme.mi(0), gamme.fad(0)], gamme.doublecroche],
-          #[[gamme.mi(0), gamme.fad(0)], gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.sib(0), gamme.doublecroche],
-          #[gamme.sib(0), gamme.doublecroche],
-          #[gamme.sib(0), gamme.doublecroche],
-          #[gamme.sib(0), gamme.doublecroche],
-          #[gamme.sib(0), gamme.doublecroche],
-          #[gamme.sib(0), gamme.doublecroche],
-          #[gamme.sib(0), gamme.doublecroche],
-          #[gamme.sib(0), gamme.doublecroche],
-          #[gamme.sib(0), gamme.doublecroche],
-          #[gamme.sib(0), gamme.doublecroche],
-          #[gamme.sib(0), gamme.doublecroche],
-          #[gamme.sib(0), gamme.doublecroche],
-          #[gamme.si(0), gamme.doublecroche],
-          #[gamme.si(0), gamme.doublecroche],
-          #[gamme.si(0), gamme.doublecroche],
-          #[gamme.si(0), gamme.doublecroche],
-          #[gamme.si(0), gamme.doublecroche],
-          #[gamme.si(0), gamme.doublecroche],
-          #[gamme.do(1), gamme.noire],
-          #gamme.soupir(),
-          #[[gamme.mi(1), gamme.sold(1)], gamme.croche],
-          #gamme.soupir(),
-          #gamme.soupir(),
-          #[gamme.la(0), gamme.croche],
-          #gamme.soupir(),
-          #[[gamme.la(1), gamme.do(2), gamme.mi(2)], gamme.croche],
-          #[[gamme.la(1), gamme.do(2), gamme.mi(2)], gamme.croche],
-          #gamme.soupir(),
-          #[[gamme.la(1), gamme.do(2), gamme.mi(2)], gamme.croche],
-          #[[gamme.la(1), gamme.do(2), gamme.mi(2)], gamme.croche],
-          #gamme.soupir(),
-          #[[gamme.la(1), gamme.do(2), gamme.mi(2)], gamme.croche],
-          #[[gamme.la(1), gamme.do(2), gamme.mi(2)], gamme.croche],
-          #gamme.soupir(),
-          #gamme.soupir(),
-          #gamme.pause(),
-          #gamme.pause(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.sold(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #gamme.pause(),
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.sold(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.la(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.do(1), gamme.doublecroche],
-          #[gamme.sol(1), gamme.doublecroche],
-          #[gamme.do(2), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.fa(0), gamme.doublecroche],
-          #[gamme.sol(1), gamme.doublecroche],
-          #[gamme.si(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.mi(2), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(2), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.red(3), gamme.doublecroche],
-          #[gamme.mi(3), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #gamme.pause(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.sold(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #gamme.pause(),
-          #[gamme.la(0),gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.la(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.mi(0), gamme.doublecroche],
-          #[gamme.mi(1), gamme.doublecroche],
-          #[gamme.sold(1), gamme.doublecroche],
-          #gamme.quartDeSoupir(),
-          #gamme.demiSoupir(),
-          #[gamme.la(0), gamme.croche]]
-          ]
-
-if args.exerciceSpectrogramme:
-  g = GenerateurExercice(gamme.bpm)
-  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, 3)
-  s.genererMelodie(elise, "sons/elise.wav")
+#!/usr/bin/env python
+# coding: utf8
+
+import argparse
+from musique.basicsynth import BasicSequenceur
+from musique.exercice import GenerateurExercice
+from musique.gamme import GammeTemperee
+
+parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition de "la lettre à Élise".')
+parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
+parser.add_argument('--boomwhackers', help="Génère un exercice plutôt que le fichier son", dest='boomwhackers', nargs=1)
+
+args = parser.parse_args()
+
+gamme = GammeTemperee(95)
+
+
+boomwhackers = ""
+if not args.boomwhackers is None:
+  boomwhackers = args.boomwhackers[0]
+
+
+elise =  [
+          [ [gamme.mi(3), gamme.doublecroche], 
+          [gamme.red(3), gamme.doublecroche],
+          [gamme.mi(3), gamme.doublecroche],
+          [gamme.red(3), gamme.doublecroche],
+          [gamme.mi(3), gamme.doublecroche],
+          [gamme.si(2), gamme.doublecroche],
+          [gamme.re(3), gamme.doublecroche],
+          [gamme.do(3), gamme.doublecroche],
+          [gamme.la(2), gamme.croche],
+          [gamme.silence(), gamme.doublecroche],
+          [gamme.do(2), gamme.doublecroche],
+          [gamme.mi(2), gamme.doublecroche],
+          [gamme.la(2), gamme.doublecroche],
+          [gamme.si(2), gamme.croche],
+          [gamme.silence(), gamme.doublecroche],
+          [gamme.mi(2), gamme.doublecroche],
+          [gamme.sold(2), gamme.doublecroche],
+          [gamme.si(2), gamme.doublecroche],
+          [gamme.do(3), gamme.croche],
+          [gamme.silence(), gamme.doublecroche],
+          [gamme.mi(2), gamme.doublecroche],
+          [gamme.mi(3), gamme.doublecroche],
+          [gamme.red(3), gamme.doublecroche],
+          [gamme.mi(3), gamme.doublecroche],
+          [gamme.red(3), gamme.doublecroche],
+          [gamme.mi(3), gamme.doublecroche],
+          [gamme.si(2), gamme.doublecroche],
+          [gamme.re(3), gamme.doublecroche],
+          [gamme.do(3), gamme.doublecroche],
+          [gamme.la(2), gamme.croche],
+          [gamme.silence(), gamme.doublecroche],          
+          [gamme.do(2), gamme.doublecroche],
+          [gamme.mi(2), gamme.doublecroche],
+          [gamme.la(2), gamme.doublecroche],
+          [gamme.si(2), gamme.croche],
+          [gamme.silence(), gamme.doublecroche],          
+          [gamme.mi(2), gamme.doublecroche],
+          [gamme.do(3), gamme.doublecroche],
+          [gamme.si(2), gamme.doublecroche],
+          [gamme.la(2), gamme.croche],
+          [gamme.silence(), gamme.doublecroche],          
+          [gamme.si(2), gamme.doublecroche],
+          [gamme.do(3), gamme.doublecroche],
+          [gamme.re(3), gamme.doublecroche],
+          [gamme.mi(3), gamme.crochepointee],
+          [gamme.sol(2), gamme.doublecroche],
+          [gamme.fa(3), gamme.doublecroche],
+          [gamme.mi(3), gamme.doublecroche],
+          [gamme.re(3), gamme.crochepointee],
+          [gamme.fa(2), gamme.doublecroche],
+          [gamme.mi(3), gamme.doublecroche],
+          [gamme.re(3), gamme.doublecroche],
+          [gamme.do(3), gamme.crochepointee],
+          [gamme.mi(2), gamme.doublecroche],
+          [gamme.re(3), gamme.doublecroche],
+          [gamme.do(3), gamme.doublecroche],
+          [gamme.si(2), gamme.croche],
+          #[gamme.silence(), gamme.doublecroche],          
+          #[gamme.mi(2), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.silence(), gamme.croche],          
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.mi(4), gamme.doublecroche],
+          #[gamme.silence(), gamme.croche],          
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.silence(), gamme.doublecroche],          
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.si(2), gamme.doublecroche],
+          #[gamme.re(3), gamme.doublecroche],
+          #[gamme.do(3), gamme.doublecroche],
+          #[gamme.la(2), gamme.croche],
+          #[gamme.silence(), gamme.doublecroche],          
+          #[gamme.do(2), gamme.doublecroche],
+          #[gamme.mi(2), gamme.doublecroche],
+          #[gamme.la(2), gamme.doublecroche],
+          #[gamme.si(2), gamme.croche],
+          #[gamme.silence(), gamme.doublecroche],          
+          #[gamme.mi(2), gamme.doublecroche],
+          #[gamme.sold(2), gamme.doublecroche],
+          #[gamme.si(2), gamme.doublecroche],
+          #[gamme.do(3), gamme.croche],
+          #[gamme.silence(), gamme.doublecroche],          
+          #[gamme.mi(2), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.si(2), gamme.doublecroche],
+          #[gamme.re(3), gamme.doublecroche],
+          #[gamme.do(3), gamme.doublecroche],
+          #[gamme.la(2), gamme.doublecroche],
+          #[gamme.silence(), gamme.doublecroche],          
+          #[gamme.do(2), gamme.doublecroche],
+          #[gamme.mi(2), gamme.doublecroche],
+          #[gamme.la(2), gamme.doublecroche],
+          #[gamme.si(2), gamme.croche],
+          #[gamme.silence(), gamme.doublecroche],          
+          #[gamme.mi(2), gamme.doublecroche],
+          #[gamme.do(3), gamme.doublecroche],
+          #[gamme.si(2), gamme.doublecroche],
+          #[gamme.la(2), gamme.croche],
+          #[[gamme.mi(2), gamme.do(3)],gamme.doublecroche],
+          #[[gamme.fa(2), gamme.do(3)], gamme.doublecroche],
+          #[[gamme.mi(2), gamme.sol(2), gamme.do(3)], gamme.doublecroche],
+          #[gamme.fa(2), gamme.doublecroche],
+          #[gamme.la(2), gamme.doublecroche],
+          #[gamme.do(3), gamme.doublecroche],
+          #[gamme.fa(3), gamme.doublecrochepointee],
+          #[gamme.mi(3), gamme.triplecroche],
+          #[gamme.mi(3), gamme.croche],
+          #[gamme.re(3), gamme.croche],
+          #[gamme.sib(3), gamme.doublecrochepointee],
+          #[gamme.la(3), gamme.triplecroche],
+          #[gamme.la(3), gamme.doublecroche],
+          #[gamme.sol(3), gamme.doublecroche],
+          #[gamme.fa(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.re(3), gamme.doublecroche],
+          #[gamme.do(3), gamme.doublecroche],
+          #[gamme.sib(2), gamme.croche],
+          #[gamme.la(2), gamme.croche],
+          #[gamme.si(2), gamme.doublecroche],
+          #[gamme.la(2), gamme.doublecroche],
+          #[gamme.sol(2), gamme.doublecroche],
+          #[gamme.la(2), gamme.doublecroche],
+          #[gamme.si(2), gamme.doublecroche],
+          #[gamme.do(3), gamme.noire],
+          #[gamme.re(3), gamme.doublecroche],
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.crochepointee],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.fa(3), gamme.doublecroche],
+          #[gamme.la(2), gamme.doublecroche],
+          #[gamme.do(3), gamme.noire],
+          #[gamme.re(3), gamme.doublecrochepointee],
+          #[gamme.si(2), gamme.triplecroche],
+          #[gamme.do(3), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.sol(2), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.la(2), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.si(3), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.do(3), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.re(3), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.mi(3), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.do(4), gamme.triplecroche],
+          #[gamme.si(3), gamme.triplecroche],
+          #[gamme.la(3), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.fa(3), gamme.triplecroche],
+          #[gamme.mi(3), gamme.triplecroche],
+          #[gamme.re(3), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.fa(3), gamme.triplecroche],
+          #[gamme.re(3), gamme.triplecroche],
+          #[gamme.do(3), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.sol(2), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.la(2), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.si(3), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.do(3), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.re(3), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.mi(3), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.do(4), gamme.triplecroche],
+          #[gamme.si(3), gamme.triplecroche],
+          #[gamme.la(3), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.fa(3), gamme.triplecroche],
+          #[gamme.mi(3), gamme.triplecroche],
+          #[gamme.re(3), gamme.triplecroche],
+          #[gamme.sol(3), gamme.triplecroche],
+          #[gamme.fa(3), gamme.triplecroche],
+          #[gamme.re(3), gamme.triplecroche],
+          #[gamme.mi(3), gamme.triplecroche],
+          #[gamme.fa(3), gamme.triplecroche],
+          #[gamme.mi(3), gamme.triplecroche],
+          #[gamme.red(3), gamme.triplecroche],
+          #[gamme.mi(3), gamme.triplecroche],
+          #[gamme.si(2), gamme.triplecroche],
+          #[gamme.mi(3), gamme.triplecroche],
+          #[gamme.re(3), gamme.triplecroche],
+          #[gamme.mi(3), gamme.triplecroche],
+          #[gamme.si(2), gamme.triplecroche],
+          #[gamme.mi(3), gamme.triplecroche],
+          #[gamme.re(3), gamme.triplecroche],
+          #[gamme.mi(3), gamme.crochepointee],
+          #[gamme.si(2), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.crochepointee],
+          #[gamme.si(2), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #[gamme.si(2), gamme.doublecroche],
+          #[gamme.re(3), gamme.doublecroche],
+          #[gamme.do(3), gamme.doublecroche],
+          #[gamme.la(2), gamme.croche],
+          #[gamme.silence(), gamme.doublecroche] 
+          ]#,
+          #[gamme.demiSoupir(),
+          #gamme.pause(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.sold(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #gamme.pause(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.sold(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.do(1), gamme.doublecroche],
+          #[gamme.sol(1), gamme.doublecroche],
+          #[gamme.do(2), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.sol(0), gamme.doublecroche],
+          #[gamme.sol(1), gamme.doublecroche],
+          #[gamme.si(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.mi(2), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.quartDeSoupir(),
+          #[gamme.mi(2), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.quartDeSoupir(),
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.quartDeSoupir(),
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #gamme.pause(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.sold(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #gamme.pause(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.sold(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1),gamme.doublecroche],
+          #[gamme.la(1),gamme.doublecroche],
+          #[[gamme.sib(1),gamme.do(2)],gamme.doublecroche],
+          #[[gamme.la(1),gamme.do(2)],gamme.doublecroche],
+          #[[gamme.sol(1),gamme.sib(1),gamme.do(2)],gamme.doublecroche],
+          #[gamme.fa(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #[gamme.do(2), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #[gamme.do(2), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #[gamme.fa(1), gamme.doublecroche],
+          #[gamme.sib(1), gamme.doublecroche],
+          #[gamme.re(2), gamme.doublecroche],
+          #[gamme.sib(1), gamme.doublecroche],
+          #[gamme.re(2), gamme.doublecroche],
+          #[gamme.sib(1), gamme.doublecroche],
+          #[gamme.fa(1), gamme.doublecroche],
+          #[gamme.mi(2), gamme.doublecroche],
+          #[[gamme.fa(1),gamme.sol(1),gamme.sib(1)], gamme.doublecroche],
+          #[gamme.mi(2), gamme.doublecroche],
+          #[[gamme.fa(1),gamme.sol(1),gamme.sib(1)], gamme.doublecroche],
+          #[gamme.mi(2), gamme.doublecroche],
+          #[gamme.fa(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #[gamme.do(2), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #[gamme.do(2), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #[gamme.fa(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #[gamme.do(2), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #[gamme.do(2), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #[gamme.do(2), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #[[gamme.re(1), gamme.re(2)], gamme.doublecroche],
+          #[gamme.fa(1), gamme.doublecroche],
+          #[gamme.sol(1), gamme.doublecroche],
+          #[gamme.mi(2), gamme.doublecroche],
+          #[gamme.sol(1), gamme.doublecroche],
+          #[gamme.mi(2), gamme.doublecroche],
+          #[gamme.sol(1), gamme.doublecroche],
+          #[gamme.fa(2), gamme.doublecroche],
+          #[[gamme.do(2), gamme.mi(2)], gamme.croche],
+          #gamme.quartDeSoupir(),
+          #[[gamme.fa(2), gamme.sol(2)], gamme.doublecroche],
+          #[[gamme.sol(2), gamme.mi(2)], gamme.doublecroche],
+          #[[gamme.re(2), gamme.fa(2), gamme.sol(2)], gamme.doublecroche],
+          #[[gamme.do(2), gamme.mi(2), gamme.sol(2)], gamme.croche],
+          #[[gamme.fa(1), gamme.la(1)], gamme.croche],
+          #[[gamme.sol(1), gamme.si(1)], gamme.croche],
+          #[gamme.do(2), gamme.croche],
+          #gamme.quartDeSoupir(),
+          #[[gamme.fa(2), gamme.sol(2)], gamme.doublecroche],
+          #[[gamme.sol(2), gamme.mi(2)], gamme.doublecroche],
+          #[[gamme.re(2), gamme.fa(2), gamme.sol(2)], gamme.doublecroche],
+          #[[gamme.do(2), gamme.mi(2), gamme.sol(2)], gamme.croche],
+          #[[gamme.fa(1), gamme.la(1)], gamme.croche],
+          #[[gamme.sol(1), gamme.si(1)], gamme.croche],
+          #[[gamme.sold(1), gamme.si(1)], gamme.croche],
+          #gamme.soupir(),
+          #gamme.pause(),
+          #gamme.pause(),
+          #gamme.pause(),
+          #gamme.pause(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.sold(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #gamme.pause(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.sold(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.do(1),gamme.doublecroche],
+          #[gamme.sol(1), gamme.doublecroche],
+          #[gamme.do(2), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.sol(0),gamme.doublecroche],
+          #[gamme.sol(1), gamme.doublecroche],
+          #[gamme.si(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.mi(2), gamme.doublecroche],
+          #gamme.demiSoupir(),
+          #[gamme.mi(2), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #gamme.demiSoupir(),
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #gamme.demiSoupir(),
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #gamme.pause(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.sold(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #gamme.pause(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.sold(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[[gamme.re(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.re(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.re(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.re(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.re(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.re(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.red(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.red(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.red(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.red(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.red(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.red(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.mi(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.mi(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.mi(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.mi(0), gamme.la(0)], gamme.doublecroche],
+          #[[gamme.mi(0), gamme.fad(0)], gamme.doublecroche],
+          #[[gamme.mi(0), gamme.fad(0)], gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.sib(0), gamme.doublecroche],
+          #[gamme.sib(0), gamme.doublecroche],
+          #[gamme.sib(0), gamme.doublecroche],
+          #[gamme.sib(0), gamme.doublecroche],
+          #[gamme.sib(0), gamme.doublecroche],
+          #[gamme.sib(0), gamme.doublecroche],
+          #[gamme.sib(0), gamme.doublecroche],
+          #[gamme.sib(0), gamme.doublecroche],
+          #[gamme.sib(0), gamme.doublecroche],
+          #[gamme.sib(0), gamme.doublecroche],
+          #[gamme.sib(0), gamme.doublecroche],
+          #[gamme.sib(0), gamme.doublecroche],
+          #[gamme.si(0), gamme.doublecroche],
+          #[gamme.si(0), gamme.doublecroche],
+          #[gamme.si(0), gamme.doublecroche],
+          #[gamme.si(0), gamme.doublecroche],
+          #[gamme.si(0), gamme.doublecroche],
+          #[gamme.si(0), gamme.doublecroche],
+          #[gamme.do(1), gamme.noire],
+          #gamme.soupir(),
+          #[[gamme.mi(1), gamme.sold(1)], gamme.croche],
+          #gamme.soupir(),
+          #gamme.soupir(),
+          #[gamme.la(0), gamme.croche],
+          #gamme.soupir(),
+          #[[gamme.la(1), gamme.do(2), gamme.mi(2)], gamme.croche],
+          #[[gamme.la(1), gamme.do(2), gamme.mi(2)], gamme.croche],
+          #gamme.soupir(),
+          #[[gamme.la(1), gamme.do(2), gamme.mi(2)], gamme.croche],
+          #[[gamme.la(1), gamme.do(2), gamme.mi(2)], gamme.croche],
+          #gamme.soupir(),
+          #[[gamme.la(1), gamme.do(2), gamme.mi(2)], gamme.croche],
+          #[[gamme.la(1), gamme.do(2), gamme.mi(2)], gamme.croche],
+          #gamme.soupir(),
+          #gamme.soupir(),
+          #gamme.pause(),
+          #gamme.pause(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.sold(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #gamme.pause(),
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.sold(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.la(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.do(1), gamme.doublecroche],
+          #[gamme.sol(1), gamme.doublecroche],
+          #[gamme.do(2), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.fa(0), gamme.doublecroche],
+          #[gamme.sol(1), gamme.doublecroche],
+          #[gamme.si(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.mi(2), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(2), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.red(3), gamme.doublecroche],
+          #[gamme.mi(3), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #gamme.pause(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.sold(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #gamme.pause(),
+          #[gamme.la(0),gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.la(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.mi(0), gamme.doublecroche],
+          #[gamme.mi(1), gamme.doublecroche],
+          #[gamme.sold(1), gamme.doublecroche],
+          #gamme.quartDeSoupir(),
+          #gamme.demiSoupir(),
+          #[gamme.la(0), gamme.croche]]
+          ]
+
+if args.exerciceSpectrogramme:
+  g = GenerateurExercice(gamme.bpm)
+  g.setBoomwhackers(boomwhackers)
+  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, 3)
+  s.genererMelodie(elise, "sons/elise.wav")
diff --git a/flic.py b/flic.py
index 021b876..ef41c9e 100755
--- a/flic.py
+++ b/flic.py
@@ -12,11 +12,15 @@ from musique.gamme import GammeTemperee
 
 parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition du thème du flic de Beverly Hills.')
 parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
+parser.add_argument('--boomwhackers', help="Génère un exercice plutôt que le fichier son", dest='boomwhackers', nargs=1)
 
 args = parser.parse_args()
 
 gamme = GammeTemperee(117)
 
+boomwhackers = ""
+if not args.boomwhackers is None:
+  boomwhackers = args.boomwhackers[0]
 
 flic = [ [ [gamme.fad(4), gamme.noire], 
           [gamme.la(4), gamme.crochepointee],
@@ -45,6 +49,7 @@ flic = [ [ [gamme.fad(4), gamme.noire],
 
 if args.exerciceSpectrogramme:
   g = GenerateurExercice(gamme.bpm)
+  g.setBoomwhackers(boomwhackers)
   g.genererExerciceSpectrogramme(flic, "exercices/ex-spec-flic.tex", "thème \"le flic de Beverly Hills\"")
 else:
   print "Génération de la version \"piano\""
diff --git a/flic2.py b/flic2.py
index 2563b2a..17e8a9e 100755
--- a/flic2.py
+++ b/flic2.py
@@ -1,52 +1,57 @@
-#!/usr/bin/env python
-# coding: utf8
-# -*- coding: utf-8 -*-
-
-
-import argparse
-from musique.basicsynth import BasicSequenceur
-from musique.exercice import GenerateurExercice
-from musique.gamme import GammeTemperee
-
-parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition du thème du flic de Beverly Hills (v2).')
-parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
-
-args = parser.parse_args()
-
-gamme = GammeTemperee(80)
-
-
-
-flic2 = [ [ [gamme.mi(4), gamme.croche],
-[gamme.sol(4), gamme.doublecrochepointee],
-[gamme.mi(4), gamme.doublecroche],
-[gamme.mi(4), gamme.triplecroche],
-[gamme.la(4), gamme.doublecroche],
-[gamme.mi(4), gamme.doublecroche],
-[gamme.red(4), gamme.doublecroche],
-[gamme.mi(4), gamme.croche],
-[gamme.si(4), gamme.doublecrochepointee],
-[gamme.mi(4), gamme.doublecroche],
-[gamme.mi(4), gamme.triplecroche],
-[gamme.do(3), gamme.doublecroche],
-[gamme.si(4), gamme.doublecroche],
-[gamme.sol(4), gamme.doublecroche],
-[gamme.mi(4), gamme.doublecroche],
-[gamme.si(4), gamme.doublecroche],
-[gamme.mi(3), gamme.doublecroche],
-[gamme.mi(4), gamme.triplecroche],
-[gamme.red(4), gamme.doublecroche],
-[gamme.red(4), gamme.triplecroche],
-[gamme.si(1), gamme.doublecroche],
-[gamme.fad(4), gamme.doublecroche],
-[gamme.mi(4), gamme.doublecroche]
-                     ] ]
-
-if args.exerciceSpectrogramme:
-  g = GenerateurExercice(gamme.bpm)
-  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)
-  s.genererMelodie(flic2, "sons/flic2.wav")
-
+#!/usr/bin/env python
+# coding: utf8
+# -*- coding: utf-8 -*-
+
+
+import argparse
+from musique.basicsynth import BasicSequenceur
+from musique.exercice import GenerateurExercice
+from musique.gamme import GammeTemperee
+
+parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition du thème du flic de Beverly Hills (v2).')
+parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
+parser.add_argument('--boomwhackers', help="Génère un exercice plutôt que le fichier son", dest='boomwhackers', nargs=1)
+
+args = parser.parse_args()
+
+gamme = GammeTemperee(80)
+
+
+boomwhackers = ""
+if not args.boomwhackers is None:
+  boomwhackers = args.boomwhackers[0]
+
+flic2 = [ [ [gamme.mi(4), gamme.croche],
+[gamme.sol(4), gamme.doublecrochepointee],
+[gamme.mi(4), gamme.doublecroche],
+[gamme.mi(4), gamme.triplecroche],
+[gamme.la(4), gamme.doublecroche],
+[gamme.mi(4), gamme.doublecroche],
+[gamme.red(4), gamme.doublecroche],
+[gamme.mi(4), gamme.croche],
+[gamme.si(4), gamme.doublecrochepointee],
+[gamme.mi(4), gamme.doublecroche],
+[gamme.mi(4), gamme.triplecroche],
+[gamme.do(3), gamme.doublecroche],
+[gamme.si(4), gamme.doublecroche],
+[gamme.sol(4), gamme.doublecroche],
+[gamme.mi(4), gamme.doublecroche],
+[gamme.si(4), gamme.doublecroche],
+[gamme.mi(3), gamme.doublecroche],
+[gamme.mi(4), gamme.triplecroche],
+[gamme.red(4), gamme.doublecroche],
+[gamme.red(4), gamme.triplecroche],
+[gamme.si(1), gamme.doublecroche],
+[gamme.fad(4), gamme.doublecroche],
+[gamme.mi(4), gamme.doublecroche]
+                     ] ]
+
+if args.exerciceSpectrogramme:
+  g = GenerateurExercice(gamme.bpm)
+  g.setBoomwhackers(boomwhackers)
+  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)
+  s.genererMelodie(flic2, "sons/flic2.wav")
+
diff --git a/frerejacques.py b/frerejacques.py
index 9889280..810f0d1 100644
--- a/frerejacques.py
+++ b/frerejacques.py
@@ -12,11 +12,15 @@ from musique.gamme import GammeTemperee
 
 parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition de Frère Jacques.')
 parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
+parser.add_argument('--boomwhackers', help="Génère un exercice plutôt que le fichier son", dest='boomwhackers', nargs=1)
 
 args = parser.parse_args()
 
 gamme = GammeTemperee(160)
 
+boomwhackers = ""
+if not args.boomwhackers is None:
+  boomwhackers = args.boomwhackers[0]
 
 frerejacques = [ [ [gamme.sol(4), gamme.noire],
                    [gamme.la(4), gamme.noire],
@@ -62,6 +66,7 @@ frerejacques = [ [ [gamme.sol(4), gamme.noire],
 
 if args.exerciceSpectrogramme:
   g = GenerateurExercice(gamme.bpm)
+  g.setBoomwhackers(boomwhackers)
   g.genererExerciceSpectrogramme(frerejacques, "exercices/ex-spec-frerejacques.tex", "thème \"Frère Jacques\"")
 else:
   print "Génération de la version \"piano\""
diff --git a/happybirthday.py b/happybirthday.py
index 62e3513..c9a4cc2 100755
--- a/happybirthday.py
+++ b/happybirthday.py
@@ -9,9 +9,14 @@ from musique.gamme import GammeTemperee
 
 parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition du thème joyeux anniversaire.')
 parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
+parser.add_argument('--boomwhackers', help="Génère un exercice plutôt que le fichier son", dest='boomwhackers', nargs=1)
 
 args = parser.parse_args()
 
+boomwhackers = ""
+if not args.boomwhackers is None:
+  boomwhackers = args.boomwhackers[0]
+
 gamme = GammeTemperee(117)
 
 
@@ -45,6 +50,7 @@ happy = [ [ [gamme.do(4), gamme.crochepointee],
 
 if args.exerciceSpectrogramme:
   g = GenerateurExercice(gamme.bpm)
+  g.setBoomwhackers(boomwhackers)
   g.genererExerciceSpectrogramme(happy, "exercices/ex-spec-happybirthday.tex", "thème joyeux anniversaire")
 else:
   print "Génération du son"
diff --git a/lavieenrose.py b/lavieenrose.py
index a0965c3..2863505 100755
--- a/lavieenrose.py
+++ b/lavieenrose.py
@@ -9,13 +9,16 @@ from musique.gamme import GammeTemperee
 
 parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition de "la vie en rose".')
 parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
+parser.add_argument('--boomwhackers', help="Génère un exercice plutôt que le fichier son", dest='boomwhackers', nargs=1)
 
 args = parser.parse_args()
 
 gamme = GammeTemperee(160)
 
 
-
+boomwhackers = ""
+if not args.boomwhackers is None:
+  boomwhackers = args.boomwhackers[0]
 
 lavieenrose = [ [ [gamme.do(2), gamme.noirepointee],
                   [gamme.si(1), gamme.croche],
@@ -64,6 +67,7 @@ lavieenrose = [ [ [gamme.do(2), gamme.noirepointee],
 
 if args.exerciceSpectrogramme:
   g = GenerateurExercice(gamme.bpm)
+  g.setBoomwhackers(boomwhackers)
   g.genererExerciceSpectrogramme(lavieenrose, "exercices/ex-spec-lavieenrose.tex", "La vie en rose")
 else:
   print "Génération de la version \"piano\""
diff --git a/musique/exercice.py b/musique/exercice.py
index 3ad916c..3d6e6f8 100644
--- a/musique/exercice.py
+++ b/musique/exercice.py
@@ -22,6 +22,16 @@ class GenerateurExercice(GammeTemperee):
         self.margeFrequence = 100 
         self.margeFrequenceLegende = 20
         self.margeLegende = 2.0
+        self.boomwhackers = []
+
+    def setBoomwhackers(self, mw):
+      import json
+      with open(mw) as f:
+        bw = json.load(f)
+        self.boomwhackers = {}
+        for key, value in bw.iteritems():
+          
+          self.boomwhackers[(int(key[-1]), self.getIDNoteDepuisNom(key[:-1]))] = value
 
     # 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
@@ -35,17 +45,11 @@ class GenerateurExercice(GammeTemperee):
     def calculeDureePartitions(self, partitions):
       return max([self.calculeDureePartition(p) for p in partitions])
     
-    # calcule les fréquences minimales et maximales des partitions
-    def calculeIntervalleFrequencesPartition(self, partition):
-      minf = min([ min([ f for f in note[0]]) if not isinstance(note[0], float) else note[0] for note in partition])
-      maxf = max([ max([ f for f in note[0]]) if not isinstance(note[0], float) else note[0] for note in partition])
-      
-      return (minf, maxf)
     
     # calcule les fréquences minimales et maximales des partitions
     def calculeIntervalleFrequencesPartitions(self, partitions):
-      intervalles = [ self.calculeIntervalleFrequencesPartition(p) for p in partitions]
-      return ( min([i[0] for i in intervalles]), max([i[1] for i in intervalles]))
+      notes = self.notesDansPartition(partitions)
+      return (min(notes), max(notes))
     
   
     # cette fonction calcule l'échelle qui sera utilisée pour le spectrogramme:
@@ -190,9 +194,10 @@ class GenerateurExercice(GammeTemperee):
           result += str(i + 1) + " & "
           if solution:
             if isinstance(note[0], float):
-              result +=  str(int(round(note[0]))) + " & " + '{0:.2f}'.format(note[1]).replace(".", ",") + " & "
-              result += self.frequenceToLaTeX(note[0]) +  "& " + self.nomDuree(note[1]) + " \\\\\n"
-              result += "\\hline\n"
+              if note[0] > 0:
+                result +=  str(int(round(note[0]))) + " & " + '{0:.2f}'.format(note[1]).replace(".", ",") + " & "
+                result += self.frequenceToLaTeX(note[0]) +  "& " + self.nomDuree(note[1]) + " \\\\\n"
+                result += "\\hline\n"
             else:
               result +=  ', '.join(['{0:.2f}'.format(n) for n in note[0]]) + " & " + '{0:.2f}'.format(note[1]).replace(".", ",")
               result += " & " + ', '.join([self.frequenceToLaTeX(n) for n in note[0]]) + " & " + self.nomDuree(note[1]) + " \\\\\n"
@@ -233,25 +238,36 @@ class GenerateurExercice(GammeTemperee):
       result += "\\end{table}\n"
       return result
         
+    # retourne la translation d'octave nécessaire pour jouer avec
+    # les boomwhackers, ou une valeur supérieure à 100 si la note 
+    # n'est pas disponible
+    def getTranslationOctaveBoomwhackers(self, minNote):
+      octaveCible = min([ n[0] for n in self.boomwhackers if n[1] == minNote[1] ] + [10000])
+      return octaveCible - minNote[0]
+    
+    def estJouable(self, note, shiftOctave):
+      nN = (note[0] + shiftOctave, note[1])
+      return nN in self.boomwhackers
     
     def estDessinable(self, partitions):
       if len(partitions) != 1:
         print "La partition contient plusieurs mains."
         return False
-      if self.contientNoteAlteree(partitions):
-        print "La partition contient une alterée."
-        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)
-
+      shiftOctave = self.getTranslationOctaveBoomwhackers(minNote)
+      
+      if shiftOctave > 100:
+        return False
+      
+      for n in notes:
+        if not self.estJouable(n, shiftOctave):
+          return False
+      
+      return True
     
     def partitionGraphique(self, partitions):
       result = ""
@@ -260,8 +276,9 @@ class GenerateurExercice(GammeTemperee):
       
       if self.estDessinable(partitions):
         p = partitions[0]
-        # TODO
         result += "On peut la dessiner."
+        print "on peut la dessiner"
+        # TODO
       else:
         result += "Cette partition n'est pas représentable sous forme de partition pour boomwhackers diatoniques."
       
@@ -371,6 +388,7 @@ class GenerateurExercice(GammeTemperee):
     def graduationOrdonnees(self, partitions):
       frequences = self.notesDansPartition(partitions)
 
+
       result = ""
       
       for frequence in frequences:
diff --git a/musique/gamme.py b/musique/gamme.py
index e5d1a47..4719603 100644
--- a/musique/gamme.py
+++ b/musique/gamme.py
@@ -9,6 +9,9 @@ class GammeTemperee:
 
     def __init__(self, bpm = 120):
         self.frequences = [4186.01, 4434.92, 4698.64, 4978.03, 5274.04, 5587.65, 5919.91, 6271.93, 6644.88, 7040.00, 7458.62, 7902.13]
+        self.nomsNotes = [ ["do"],  ["dod", "reb"], ["re"], ["red", "mib"],
+                            ["mi"], ["fa"], ["fad", "solb"], ["sol"], ["sold", "lab"],
+               ["la"], ["lad", "sib"], ["si"]]
         self.setBPM(bpm)
     # Definition de chacune des notes du clavier (leur frequence).
     # Paramètre: 
@@ -70,6 +73,12 @@ class GammeTemperee:
     def silence(self):
         return 0.
 
+    def getIDNoteDepuisNom(self, nom):
+      for i, noms in enumerate(self.nomsNotes):
+        if nom in noms:
+          return i
+      return -1
+
     # definition des pauses (un silence joue pendant une duree donnee)
     def pause(self):
         return [ self.silence(), self.ronde ]
@@ -122,32 +131,17 @@ class GammeTemperee:
         return [ self.note(o, i) for (o, i) in self.getOctaveEtIDNoteDansIntervalle(noteMin, noteMax) ]
       
     def notesDansPartition(self, partitions):
-      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 ]
+      l = [[ [x] if isinstance(x, float) else x for x in [note[0] if not isinstance(note[0], float) else note[0] for note in partition]] for partition in partitions]
+      return [x for x in sum(sum(l, []), []) if x != 0]
       
-    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):
-      return min([min([ x for x in [note[0] if isinstance(note[0], float) else min(note[0]) for note in partition] if x > 0]) for partition in partitions])
+      return min(self.notesDansPartition(partitions))
+
     # retourne la fréquence maximum utilisée dans les partitions
     def maxFrequence(self, partitions):
-      return max([max([note[0] if isinstance(note[0], float) else max(note[0]) for note in partition]) for partition in partitions])
+      return max(self.notesDansPartition(partitions))
 
 
     def durees(self, partitions):
diff --git a/rainbow.py b/rainbow.py
index 4b0bd6b..a3d3233 100755
--- a/rainbow.py
+++ b/rainbow.py
@@ -9,12 +9,15 @@ from musique.gamme import GammeTemperee
 
 parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition de "rainbow".')
 parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
+parser.add_argument('--boomwhackers', help="Génère un exercice plutôt que le fichier son", dest='boomwhackers', nargs=1)
 
 args = parser.parse_args()
 
 gamme = GammeTemperee(130)
 
-
+boomwhackers = ""
+if not args.boomwhackers is None:
+  boomwhackers = args.boomwhackers[0]
 
 rainbow = [ [ [gamme.do(3), gamme.blanche],
 [gamme.do(3), gamme.noire],
@@ -44,6 +47,7 @@ gamme.pause(),
 
 if args.exerciceSpectrogramme:
   g = GenerateurExercice(gamme.bpm)
+  g.setBoomwhackers(boomwhackers)
   g.genererExerciceSpectrogramme(rainbow, "exercices/ex-spec-rainbow.tex", "Rainbow")
 else:
   print "Génération du son"
diff --git a/stairway.py b/stairway.py
index 1c2847c..043d558 100755
--- a/stairway.py
+++ b/stairway.py
@@ -1,55 +1,59 @@
-#!/usr/bin/env python
-# coding: utf8
-# -*- coding: utf-8 -*-
-
-import argparse
-from musique.basicsynth import BasicSequenceur
-from musique.exercice import GenerateurExercice
-from musique.gamme import GammeTemperee
-
-parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition de Stairway.')
-parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
-
-args = parser.parse_args()
-
-gamme = GammeTemperee(117)
-
-
-
-stair = [ [
-    [gamme.la(2), gamme.croche],
-[gamme.do(3), gamme.croche],
-[gamme.mi(3), gamme.croche],
-[gamme.la(3), gamme.croche],
-[[gamme.fad(2), gamme.si(3)], gamme.croche],
-[gamme.mi(3), gamme.croche],
-[gamme.do(3), gamme.croche],
-[gamme.si(3), gamme.croche],
-[[gamme.fa(2), gamme.do(4)], gamme.croche],
-[gamme.mi(3), gamme.croche],
-[gamme.do(3), gamme.croche],
-[gamme.do(4), gamme.croche],
-[[gamme.fad(2), gamme.fad(3)], gamme.croche],
-[gamme.re(3), gamme.croche],
-[gamme.la(2), gamme.croche],
-[gamme.fa(3), gamme.croche],
-[[gamme.fa(2), gamme.mi(3)], gamme.croche],
-[gamme.do(3), gamme.croche],
-[gamme.la(2), gamme.croche],
-[gamme.do(3), gamme.noire],
-[gamme.mi(3), gamme.croche],
-[gamme.do(3), gamme.croche],
-[gamme.la(2), gamme.croche],
-[[gamme.si(1), gamme.sol(2), gamme.si(2)], gamme.croche],
-[[gamme.la(2), gamme.do(3)], gamme.croche],
-[[gamme.la(1), gamme.la(2)], gamme.blanche]
-        ] ]
-
-if args.exerciceSpectrogramme:
-  g = GenerateurExercice(gamme.bpm)
-  g.genererExerciceSpectrogramme(stair, "exercices/ex-spec-stairway.tex", "Stairway")
-else:
-  print "Génération du son"
-  s = BasicSequenceur(1, gamme.bpm, 0)
-  s.genererMelodie(stair, "sons/stairway.wav")
-
+#!/usr/bin/env python
+# coding: utf8
+# -*- coding: utf-8 -*-
+
+import argparse
+from musique.basicsynth import BasicSequenceur
+from musique.exercice import GenerateurExercice
+from musique.gamme import GammeTemperee
+
+parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition de Stairway.')
+parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
+parser.add_argument('--boomwhackers', help="Génère un exercice plutôt que le fichier son", dest='boomwhackers', nargs=1)
+
+args = parser.parse_args()
+
+gamme = GammeTemperee(117)
+
+boomwhackers = ""
+if not args.boomwhackers is None:
+  boomwhackers = args.boomwhackers[0]
+
+stair = [ [
+    [gamme.la(2), gamme.croche],
+[gamme.do(3), gamme.croche],
+[gamme.mi(3), gamme.croche],
+[gamme.la(3), gamme.croche],
+[[gamme.fad(2), gamme.si(3)], gamme.croche],
+[gamme.mi(3), gamme.croche],
+[gamme.do(3), gamme.croche],
+[gamme.si(3), gamme.croche],
+[[gamme.fa(2), gamme.do(4)], gamme.croche],
+[gamme.mi(3), gamme.croche],
+[gamme.do(3), gamme.croche],
+[gamme.do(4), gamme.croche],
+[[gamme.fad(2), gamme.fad(3)], gamme.croche],
+[gamme.re(3), gamme.croche],
+[gamme.la(2), gamme.croche],
+[gamme.fa(3), gamme.croche],
+[[gamme.fa(2), gamme.mi(3)], gamme.croche],
+[gamme.do(3), gamme.croche],
+[gamme.la(2), gamme.croche],
+[gamme.do(3), gamme.noire],
+[gamme.mi(3), gamme.croche],
+[gamme.do(3), gamme.croche],
+[gamme.la(2), gamme.croche],
+[[gamme.si(1), gamme.sol(2), gamme.si(2)], gamme.croche],
+[[gamme.la(2), gamme.do(3)], gamme.croche],
+[[gamme.la(1), gamme.la(2)], gamme.blanche]
+        ] ]
+
+if args.exerciceSpectrogramme:
+  g = GenerateurExercice(gamme.bpm)
+  g.setBoomwhackers(boomwhackers)
+  g.genererExerciceSpectrogramme(stair, "exercices/ex-spec-stairway.tex", "Stairway")
+else:
+  print "Génération du son"
+  s = BasicSequenceur(1, gamme.bpm, 0)
+  s.genererMelodie(stair, "sons/stairway.wav")
+
diff --git a/starwars.py b/starwars.py
index c244543..9e12b70 100755
--- a/starwars.py
+++ b/starwars.py
@@ -1,63 +1,67 @@
-#!/usr/bin/env python
-# coding: utf8
-
-import argparse
-from musique.basicsynth import BasicSequenceur
-from musique.exercice import GenerateurExercice
-from musique.gamme import GammeTemperee
-
-parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition du thème de star wars.')
-parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
-
-args = parser.parse_args()
-
-gamme = GammeTemperee(150)
-
-
-
-starwars =  [
-    [ [gamme.re(2), gamme.croche],
-    [gamme.sol(2), gamme.blanche],
-    [gamme.la(2), gamme.noire],
-    [gamme.sib(2), gamme.croche],
-    [gamme.do(3), gamme.croche],
-    [gamme.sib(2), gamme.blanche],
-    [gamme.re(2), gamme.noirepointee],
-    [gamme.re(2), gamme.croche],
-    [gamme.sol(2), gamme.noirepointee],
-    [gamme.la(2), gamme.croche],
-    [gamme.sib(2), gamme.croche],
-    [gamme.sol(2), gamme.croche],
-    [gamme.sib(2), gamme.croche],
-    [gamme.sol(2), gamme.croche],
-    [gamme.re(3), gamme.croche],
-    [gamme.do(3), gamme.blanche],
-    [gamme.re(2), gamme.croche],
-    [gamme.re(2), gamme.croche],
-    [gamme.re(2), gamme.croche],
-    [gamme.sol(2), gamme.noirepointee],
-    [gamme.la(2), gamme.croche],
-    [gamme.sib(2), gamme.croche],
-    [gamme.sol(2), gamme.croche],
-    [gamme.sib(2), gamme.croche],
-    [gamme.sol(2), gamme.croche],
-    [gamme.sol(3), gamme.blanche],
-    [gamme.sol(2), gamme.noire],
-    [gamme.sib(2), gamme.croche],
-    [gamme.la(2), gamme.doublecroche],
-    [gamme.sol(2), gamme.doublecroche],
-    [gamme.re(3), gamme.noire],
-    [gamme.sib(2), gamme.croche],
-    [gamme.sol(2), gamme.croche],
-    [gamme.re(2), gamme.noirepointee],
-    [gamme.re(2), gamme.croche],
-    [gamme.sol(2), gamme.blanche]
-          ]]
-
-if args.exerciceSpectrogramme:
-  g = GenerateurExercice(gamme.bpm)
-  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, 3)
-  s.genererMelodie(starwars, "sons/starwars.wav")
+#!/usr/bin/env python
+# coding: utf8
+
+import argparse
+from musique.basicsynth import BasicSequenceur
+from musique.exercice import GenerateurExercice
+from musique.gamme import GammeTemperee
+
+parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition du thème de star wars.')
+parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
+parser.add_argument('--boomwhackers', help="Génère un exercice plutôt que le fichier son", dest='boomwhackers', nargs=1)
+args = parser.parse_args()
+
+gamme = GammeTemperee(150)
+
+boomwhackers = ""
+if not args.boomwhackers is None:
+  boomwhackers = args.boomwhackers[0]
+
+
+starwars =  [
+    [ [gamme.re(2), gamme.croche],
+    [gamme.sol(2), gamme.blanche],
+    [gamme.la(2), gamme.noire],
+    [gamme.sib(2), gamme.croche],
+    [gamme.do(3), gamme.croche],
+    [gamme.sib(2), gamme.blanche],
+    [gamme.re(2), gamme.noirepointee],
+    [gamme.re(2), gamme.croche],
+    [gamme.sol(2), gamme.noirepointee],
+    [gamme.la(2), gamme.croche],
+    [gamme.sib(2), gamme.croche],
+    [gamme.sol(2), gamme.croche],
+    [gamme.sib(2), gamme.croche],
+    [gamme.sol(2), gamme.croche],
+    [gamme.re(3), gamme.croche],
+    [gamme.do(3), gamme.blanche],
+    [gamme.re(2), gamme.croche],
+    [gamme.re(2), gamme.croche],
+    [gamme.re(2), gamme.croche],
+    [gamme.sol(2), gamme.noirepointee],
+    [gamme.la(2), gamme.croche],
+    [gamme.sib(2), gamme.croche],
+    [gamme.sol(2), gamme.croche],
+    [gamme.sib(2), gamme.croche],
+    [gamme.sol(2), gamme.croche],
+    [gamme.sol(3), gamme.blanche],
+    [gamme.sol(2), gamme.noire],
+    [gamme.sib(2), gamme.croche],
+    [gamme.la(2), gamme.doublecroche],
+    [gamme.sol(2), gamme.doublecroche],
+    [gamme.re(3), gamme.noire],
+    [gamme.sib(2), gamme.croche],
+    [gamme.sol(2), gamme.croche],
+    [gamme.re(2), gamme.noirepointee],
+    [gamme.re(2), gamme.croche],
+    [gamme.sol(2), gamme.blanche]
+          ]]
+
+if args.exerciceSpectrogramme:
+  g = GenerateurExercice(gamme.bpm)
+  g.setBoomwhackers(boomwhackers)
+  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, 3)
+  s.genererMelodie(starwars, "sons/starwars.wav")
diff --git a/tabac.py b/tabac.py
index c1aac52..ef465b5 100755
--- a/tabac.py
+++ b/tabac.py
@@ -1,85 +1,92 @@
-#!/usr/bin/env python
-# coding: utf8
-# -*- coding: utf-8 -*-
-
-import argparse
-from musique.basicsynth import BasicSequenceur
-from musique.exercice import GenerateurExercice
-from musique.gamme import GammeTemperee
-
-
-parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition "j\'ai du bon tabac".')
-parser.add_argument('--full', help="Génère l'ensemble des sons pour illustrer la construction du synthétiseur", dest='full', action='store_true',default=False)
-parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
-
-args = parser.parse_args()
-
-gamme = GammeTemperee(160)
-
-tabac = [ [ [gamme.sol(3), gamme.noire],
-           [gamme.la(3), gamme.noire],
-           [gamme.si(3), gamme.noire],
-           [gamme.sol(3), gamme.noire],
-           [gamme.la(3), gamme.blanche],
-           [gamme.la(3), gamme.noire],
-           [gamme.si(3), gamme.noire],
-           [gamme.do(4), gamme.blanche],
-           [gamme.do(4), gamme.blanche],
-           [gamme.si(3), gamme.blanche],
-           [gamme.si(3), gamme.blanche],
-           [gamme.sol(3), gamme.noire],
-           [gamme.la(3), gamme.noire],
-           [gamme.si(3), gamme.noire],
-           [gamme.sol(3), gamme.noire],
-           [gamme.la(3), gamme.blanche],
-           [gamme.la(3), gamme.noire],
-           [gamme.si(3), gamme.noire],
-           [gamme.do(4), gamme.blanche],
-           [gamme.re(4), gamme.blanche],
-           [gamme.sol(3), gamme.ronde],
-           [gamme.re(4), gamme.blanche],
-           [gamme.re(4), gamme.noire],
-           [gamme.do(4), gamme.noire],
-           [gamme.si(3), gamme.blanche],
-           [gamme.la(3), gamme.noire],
-           [gamme.si(3), gamme.noire],
-           [gamme.do(4), gamme.blanche],
-           [gamme.re(4), gamme.blanche],
-           [gamme.la(3), gamme.ronde],
-           [gamme.re(4), gamme.blanche],
-           [gamme.re(4), gamme.noire],
-           [gamme.do(4), gamme.noire],
-           [gamme.si(3), gamme.blanche],
-           [gamme.la(3), gamme.noire],
-           [gamme.si(3), gamme.noire],
-           [gamme.do(4), gamme.blanche],
-           [gamme.re(4), gamme.blanche],
-           [gamme.la(3), gamme.ronde]
-           ] ]
-
-
-s = BasicSequenceur(1, gamme.bpm , 0)
-
-
-if args.full:
-  print "Génération de multiples versions"
-  s.setEnveloppeZeroUn(0.3)
-  s.genererMelodie(tabac, "sons/tabac-01.wav")
-
-  s.setEnveloppeMonteeDescente(0.5)
-  s.genererMelodie(tabac, "sons/tabac-md.wav")
-
-  s.setEnveloppeFrappeSimple(0.7)
-  s.nbHarmoniques = 0
-  s.genererMelodie(tabac, "sons/tabac-frappe.wav")
-
-if args.exerciceSpectrogramme:
-  g = GenerateurExercice(gamme.bpm)
-  g.genererExerciceSpectrogramme(tabac, "exercices/ex-spec-tabac.tex", "j'ai du bon tabac")
-else:
-  print "Génération de la version \"piano\""
-  s.setEnveloppeFrappeSimple(0.7)
-  s.nbHarmoniques = 5
-  s.genererMelodie(tabac, "sons/tabac.wav")
-
-
+#!/usr/bin/env python
+# coding: utf8
+# -*- coding: utf-8 -*-
+
+import argparse
+from musique.basicsynth import BasicSequenceur
+from musique.exercice import GenerateurExercice
+from musique.gamme import GammeTemperee
+
+
+parser = argparse.ArgumentParser(description='Génère des documents à partir de la partition "j\'ai du bon tabac".')
+parser.add_argument('--full', help="Génère l'ensemble des sons pour illustrer la construction du synthétiseur", dest='full', action='store_true',default=False)
+parser.add_argument('--exercice-spectrogramme', help="Génère un exercice plutôt que le fichier son", dest='exerciceSpectrogramme', action='store_true',default=False)
+parser.add_argument('--boomwhackers', help="Génère un exercice plutôt que le fichier son", dest='boomwhackers', nargs=1)
+
+args = parser.parse_args()
+
+boomwhackers = ""
+if not args.boomwhackers is None:
+  boomwhackers = args.boomwhackers[0]
+
+
+gamme = GammeTemperee(160)
+
+tabac = [ [ [gamme.sol(3), gamme.noire],
+           [gamme.la(3), gamme.noire],
+           [gamme.si(3), gamme.noire],
+           [gamme.sol(3), gamme.noire],
+           [gamme.la(3), gamme.blanche],
+           [gamme.la(3), gamme.noire],
+           [gamme.si(3), gamme.noire],
+           [gamme.do(4), gamme.blanche],
+           [gamme.do(4), gamme.blanche],
+           [gamme.si(3), gamme.blanche],
+           [gamme.si(3), gamme.blanche],
+           [gamme.sol(3), gamme.noire],
+           [gamme.la(3), gamme.noire],
+           [gamme.si(3), gamme.noire],
+           [gamme.sol(3), gamme.noire],
+           [gamme.la(3), gamme.blanche],
+           [gamme.la(3), gamme.noire],
+           [gamme.si(3), gamme.noire],
+           [gamme.do(4), gamme.blanche],
+           [gamme.re(4), gamme.blanche],
+           [gamme.sol(3), gamme.ronde],
+           [gamme.re(4), gamme.blanche],
+           [gamme.re(4), gamme.noire],
+           [gamme.do(4), gamme.noire],
+           [gamme.si(3), gamme.blanche],
+           [gamme.la(3), gamme.noire],
+           [gamme.si(3), gamme.noire],
+           [gamme.do(4), gamme.blanche],
+           [gamme.re(4), gamme.blanche],
+           [gamme.la(3), gamme.ronde],
+           [gamme.re(4), gamme.blanche],
+           [gamme.re(4), gamme.noire],
+           [gamme.do(4), gamme.noire],
+           [gamme.si(3), gamme.blanche],
+           [gamme.la(3), gamme.noire],
+           [gamme.si(3), gamme.noire],
+           [gamme.do(4), gamme.blanche],
+           [gamme.re(4), gamme.blanche],
+           [gamme.la(3), gamme.ronde]
+           ] ]
+
+
+s = BasicSequenceur(1, gamme.bpm , 0)
+
+
+if args.full:
+  print "Génération de multiples versions"
+  s.setEnveloppeZeroUn(0.3)
+  s.genererMelodie(tabac, "sons/tabac-01.wav")
+
+  s.setEnveloppeMonteeDescente(0.5)
+  s.genererMelodie(tabac, "sons/tabac-md.wav")
+
+  s.setEnveloppeFrappeSimple(0.7)
+  s.nbHarmoniques = 0
+  s.genererMelodie(tabac, "sons/tabac-frappe.wav")
+
+if args.exerciceSpectrogramme:
+  g = GenerateurExercice(gamme.bpm)
+  g.setBoomwhackers(boomwhackers)
+  g.genererExerciceSpectrogramme(tabac, "exercices/ex-spec-tabac.tex", "j'ai du bon tabac")
+else:
+  print "Génération de la version \"piano\""
+  s.setEnveloppeFrappeSimple(0.7)
+  s.nbHarmoniques = 5
+  s.genererMelodie(tabac, "sons/tabac.wav")
+
+
-- 
GitLab