4.5 EXPÉRIENCES ACOUSTIQUES

 

 

INTRODUCTION

 

Il est également possible d’utiliser l’ordinateur pour remplacer un système expérimental onéreux. On pourrait par exemple imaginer faire des recherches sur l’ouïe humaine en utilisant le système sonore de TigerJython, ce qui est bien meilleur marché et procure une flexibilité énorme lorsque l’on conduit l’expérience à l’aide d’un programme « maison ».

CONCEPTS DE PROGRAMMATION: Fréquence de référence, battements, gamme musicale

 

 

ACCORDER UN INSTRUMENT DE MUSIQUE, BATTEMENTS

 

L’ouïe humaine ne peut pas distinguer deux sons de fréquences très proches lorsqu’ils sont joués séparément. En revanche, si les deux sons sont joués simultanément, il se produit un phénomène de battement caractérisé par des augmentations et des diminutions de volume qui sont très clairement audibles. Pour bien entendre ce phénomène, le programme suivant commence par jouer deux sons de fréquences très proches. Le premier est un joué à 440 Hz et le deuxième à 441 Hz. Lorsque les deux sons sont joués séparément, seule une oreille très développée percevra la différence. En revanche, lorsque les deux sons sont joués ensemble, on entend très clairement le phénomène de battement.

import time

playTone(440, 5000)
time.sleep(2)
playTone(441, 5000)
time.sleep(2)
playTone(440, 20000, block = False)
playTone(441, 20000)
Sélectionner le code (Ctrl+C pour copier, Ctrl+V pour coller)

 

 

MEMENTO

 

La fonction globale playTone() accepte différentes variantes d’arguments qui sont exposées dans l’aide de TigerJython sous la rubrique « Documentation APLU  (Fenêtre graphique et autres gadgets) ». Dans le précédent programme, nous avons fait usage du paramètre block qui permet d’indiquer si la fonction doit être bloquante (ne retourner qu’après la fin du son) ou si elle doit être non bloquante (retourner immédiatement, sans attendre la fin du son). Il est nécessaire d’utiliser la version non bloquante pour jouer plusieurs sons simultanément.

Pour accorder des instruments au sein d’un orchestre et même pour des instruments seuls (instrument à corde, piano, etc.), on joue deux notes simultanément tout en prêtant attention aux battements qui surviennent lorsque les notes sont jouées à des fréquences très proches mais différentes.

 

 

GAMMES

 

La gamme tempérée est basée sur une fréquence de référence de 440 Hz et divise l’octave (rapport de fréquence 2) en 12 demi-tons possédant tous le même rapport de fréquences r. Cela donne donc:

  r12 = 2   oder     r = 122 = 1.0594630943

On peut ainsi générer les notes de la gamme de Do majeur formée de tons et demi-tons répartis de manière appropriée. La fréquence de référence correspond à la note La.

Dans la gamme naturelle, on obtient la fréquence des différentes notes par multiplication par le rapport r en partant de la fréquence de référence. Les rapports pour les 8 notes naturelles d’une octave sont donc: 

et correspondent aux rapports entretenus par les nombres entiers 24, 27, 30, 32, 36, 40, 45, 48. Pour jouer ces notes, il faut sauver ces fréquences dans une liste et les jouer à l’aide de la fonction playTone(). Une fois que la gamme tempérée et naturelle ont été jouées séparément, vous pouvez écouter les deux instruments accordés différemment jouer simultanément la gamme de Do majeur. Vous verrez que ça sonne horriblement mal.

r = 2**(1/12)
a = 440

scale_temp = [a / r**9, a / r**7, a / r**5, a / r**4, a / r**2,
              a, a * r**2, a * r**3]
scale_pure = [3/5 * a, 3/5 * a * 9/8, 3/5 * a * 5/4,  3/5 * a * 4/3,  3/5 * a * 3/2,
              a, 3/5 * a * 15/8, 3/5 * a * 2]

playTone(scale_temp, 1000)
playTone(scale_pure, 1000)

playTone(scale_temp, 1000, block = False)
playTone(scale_pure, 1000)
Sélectionner le code (Ctrl+C pour copier, Ctrl+V pour coller)

 

 

MEMENTO

 

Dans la gamme tempérée, les demi-tons successifs entretiennent tous le même rapport de fréquences, de sorte que la différence de fréquences n’est pas égale. L’avantage de la gamme tempérée par rapport aux gammes naturelles est que les rapports de fréquences restent les mêmes dans toutes les tonalités (Do majeur, Ré majeur, etc …) [plus... La gamme naturelle présente cependant l’avantage que les accords
son très purs puisqu’il n’y a pas de battement entre les harmoniques
].

 

 

JOUER DES MÉLODIES

 

Il est également possible de jouer de simples mélodies pour le plaisir avec la fonction playTone(). Pour jouer des notes successives de même longueur, utilisons une liste de tuples indiquant chacun une fréquence et une durée. Il est également possible de choisir un instrument de musique. L’exemple suivant joue un air enfantin. Le reconnaîtrez-vous?

v = 250
playTone([("cdef", v), ("gg", 2*v), ("aaaa", v//2), ("g", 2*v),
          ("aaaa", v//2), ("g", 2*v), ("ffff", v), ("ee", 2*v),
          ("dddd", v), ("c", 2*v)], instrument="harp")
Sélectionner le code (Ctrl+C pour copier, Ctrl+V pour coller)

 

 

MEMENTO

 

La facilité avec laquelle il est possible de jouer une mélodie avec playTone() est assez déconcertante. Par rapport à un instrument réel, le son est cependant relativement synthétique.

 

 

EXERCICES

 

1.


On peut composer une mélodie en écrivant une liste de fréquences sonores et la rejouer ensuite grâce à une boucle for :

melody = [262, 444, 349, 349, 392, 330, 262, 466, 440, 392, 392, 349]
v = 200
for f in melody:
    playTone(f, v)

a. Connaissez-vous cette chanson? Rejouer ce morceau un peu plus lentement

b. Rejouer le morceau une octave plus haut.

c. Le morceau est trop bas pour votre classe de chant et sa transposition à l’octave supérieure est trop haute. Transposez la mélodie de telle manière qu’elle démarre par un sol3 au lieu d’un do3.

2.


Jouer l’accord de Do majeur composé des notes do4, mi4, sol4 (tierce, quinte) pendant 20 secondes avec la gamme tempérée. À cet effet, il est possible de passer à la fonction playTone() les lettres correspondant aux notes à jouer (Le do4 correspond à c'', le ré4 à d'' etc …). Rejouer le même accord en utilisant la gamme naturelle. Que remarquez-vous?