HomeTortue graphiqueGPanelRobotique WebTigerPython
 Python - Online
sound
Deutsch   English   Français   

16. SON

 

 

TU APPRENDS ICI...

 

comment la Tortue peut jouer différents sons et mélodies et même dessiner des figures.

 

 

FREQUENCES DES SONS

 

Pour jouer différents tons, utilises la fonction :
playTone(frequency, duration).
Le premier paramètre détermine la fréquence audio en Hz (hertz), le second paramètre la durée de lecture en millisecondes. Voici quelques fréquences sonores :

Note Fréquence Note Fréquence Note Fréquence

c 131 c' 262 c'' 524
d 147 d' 294 d'' 588
e 165 e' 330 e'' 650
f 175 f' 349 f'' 698
g 196 g' 392 g'' 784
a 220 a' 440 a'' 880
h 247 h' 494 h''' 988

Pour accorder les instruments, le son la' avec une fréquence de 440 Hz a été défini comme diapason. Les autres fréquences peuvent être calculées.
Les fréquences du tableau sont arrondies.

 

 

EXEAMPLES

 

Exemple 1: Jouer une mélodie courte
Pour jouer plusieurs sons à la suite, tu peux regrouper les fréquences correspondantes dans une liste. Tu parcourras la liste avec une boucle for et tu joueras les sons avec playTone(frequency, duration).

Programme:

from gturtle import *
      
song = [262, 294, 330, 349, 392, 392, 392, 0, 440, 440, 440, 440, 392]

for f in song:
    playTone(f, 250)
► Copy to clipboard

 

Exemple 2: Définir les notes avec des noms de tons
Dans la fonction playTone(), tu peux aussi définir les tons avec les noms de tons: c‘, d’, e‘... ou une octave plus haute c’‘, d’‘, e’'...

 

Programme:

from gturtle import *
    
song = ["c'","d'","e'","f'","g'","g'","g'",0,"a'","a'","a'","a'","g'"]
song2 = ["c''","d''","e''","f''","g''","g''","g''",0,"a''","a''",
         "a''","a''","g''"]

for f in song:
    playTone(f, 250)
delay(1000)
for f in song2:
    playTone(f, 250)
► Copy to clipboard

 

Exemple 3: Jouer des sons et dessiner en même temps

La Tortue dessine un escalier tout en jouant des notes de plus en plus aiguës. La fonction playTone(f, 500) est bloquante, ce qui signifie que le programme attend 500 ms avant de dessiner la prochaine marche. Si tu veux que le son soit joué pendant que la Tortue dessine, utilisez la fonction non-bloquante :
playTone(f, 500, block = False).

 

Programme:

from gturtle import *

def step():    
    forward(20) 
    right(90)
    forward(30) 
    left(90)   
      
song = [262, 294, 330, 349, 392, 440, 494, 524]
for f in song:
    playTone(f, 500, block = False)
    #playTone(f, 500)
    step()
► Copy to clipboard

 

Exemple 4: Jouer plusieurs notes simultanément
Tu veux jouer trois notes en même temps (accord de do majeur). Ici aussi, tu utilises la fonction non bloquante playTone().

Programme:

from gturtle import *

playTone(262, 2000, block = False)
playTone(330, 2000, block = False)
playTone(392, 2000, block = False)
► Copy to clipboard

 

Exemple 5: Choisir différents instruments
Avec la fonction playTone(frequency, duration, intrument), tu peux choisir différents instruments pour jouer les sons : Piano (piano), Guitare (guitar), Trompette (trumpet), Violon (violin), Orgue (organ), Harpe (harp), Xylofone (xylophone).

Programme:

from gturtle import *

song = ["c'", "e'", "g'", "c''"]

for f in song:
    playTone(f, 600, instrument="piano")
for f in song:
    playTone(f, 600, instrument="guitar")
for f in song:
    playTone(f, 600, instrument="trumpet")
for f in song:
    playTone(f, 600, instrument="violin")
for f in song:
    playTone(f, 600, instrument="organ")
► Copy to clipboard

 

Exemple 6: Piano interactif

Avec deux boucles for, tu dessines d’abord les touches blanches et noires d’une octave. En cliquant avec la souris, tu peux jouer une mélodie. A partir de la coordonnée x du clic de souris, tu calcules quelle touche a été cliquée. Pour les touches noires, tu utilises en plus la fonction getPixelColorStr() qui renvoie la couleur du support.

 

Programme:

from gturtle import *

def drawPiano():
    setPenColor("black")
    for x in range(-200, 160, 50):
        setPos(x, -100)
        for k in range(2):
            fd(216).rt(90).fd(50).rt(90)
    setPenWidth(32)
    for x in [-150, -100, 0, 50, 100, 200]:
        setPos(x, 0)
        fd(100)

def onMousePressed(x, y):
    if x > -200 and x < 215 and y > -100 and y < 100:
        i = int((x + 200)/50)
        setPos(x, y)
        if getPixelColorStr() == "black":
            k = int((x + 215) / 50)
            f = blacktones[k]
        else:
            f = whitetones[i]
        playTone(f, 400, instrument="piano",block = False)

whitetones = [262, 294, 330, 349, 392, 440, 494, 524]
blacktones = [0, 277, 311, 0, 360, 415, 466, 0, 555]

makeTurtle(mousePressed = onMousePressed)
hideTurtle()
drawPiano()
addStatusBar(20)
setStatusText("Click a piano key to play!")
► Copy to clipboard

 

 

REMARQUE...

 

La Tortue peut jouer des sons en utilisant la fonction playTone(frequency, duration, instrument). Si tu veux que la Tortue dessine en même temps ou jouer plusieurs sons (accords) simultanément, utilise la fonction non-bloquante: playTone(frequency, duration, block = False).

 

 

À FAIRE PAR TOI-MÊME

 
1.

Complète l'exemple 1 avec d'autres notes de manière à ce que la chanson soit jouée en entier.

2. Joue la gamme de do majeur (c, d, e, f, g, a, h, c) avec différents instruments.

3.

Utilise for f in reversed(song): pour jouer les notes en ordre inverse. Joue d'abord la gamme de l'exercice 2 vers le haut, puis dans l'ordre inverse. Essaie aussi avec d'autres mélodies.

4.

a) Joue les 8 notes de la gamme de do majeur et dessinez des carrés de plus en plus grands.

b) Joue les 8 notes en ordre inverse et dessinez aussi les carrés en ordre inverse (plus grand en premier).

 
5.

Complète le piano de l'exemple 5 avec une deuxième octave. Utilise les noms de notes : c, d, e, ..., c‘, d’, e‘, f’, ... c‘’ pour les touches blanches. Utilise : c#, d#, f#, g#, a#, c#‘, d#’, f#‘, g#’, a#’ pour les touches noires.

   
16-1

Technical information:

These frequencies can be calculated. If you start from a fundamental tone (a‘ with f = 440 Hz), you obtain the frequency of the following semitone with the factor 1.05946 and the next whole tone with the factor 1.05946 * 1.05946 ≈ 1.122. (e.g. h’ = 440 * 1.122 = 494). The frequencies in the table are rounded.

Why these factors? An octave (frequency ratio c‘’ : c' = 2 : 1) is divided into twelve semitone steps.
One semitone = 1/12 octave. This corresponds to the frequency ratio = twelfth root of 2 = 1.05946.

 
16-2
Informations:

In English notation, notes are indicated with capital letters.

c, d, e, f ... corresponds to C3, D3, E3, F3,...
c', d', e', f'... corresponds toC4, D4, E4, F4, ...
c'', d'', e'', f'', corresponds toC5, D6, E5, F5, ...