Gamme de Pythagore et gamme tempérée

Initialisation

\( (*\ Get["sound.m"]\ **) 
<< Miscellaneous`Audio`\)
sinusWave[freq_] := Sin[2 Pi freq t]
jouerSinus[freq_] := Play[Sin[2 Pi freq t], {t, 0, 1}]

duree = 1;
accord[freq_] := 
      Show[ListWaveform[Table[{freq[[i]], 1}, {i, 1, Length[freq]}], 1, 
          2]]

Consonances et dissonances

Sinus pur à 440 Hz (durée 1 seconde) :

Show[Waveform[Sinusoid, 440, duree]];

Onde triangulaire (quelques harmoniques) :

Show[Waveform[Triangle, 440, duree]];

Onde "carré" (beaucoup plus d'harmoniques) :

Show[Waveform[Square, 440, duree]];

Octave juste : (LA1/LA2)

accord[440 {1,  2}];

Quinte juste : (LA/MI)

accord[440 {1,  (3/2)}];

Tierce juste : (LA/DO#)

accord[440 {1,  (5/4)}];

Accord parfait majeur : (LA/DO#/MI)

accord[440 {1,  (5/4), (3/2)}];

Septième de dominante (7ième harmonique ramenée dans la meme octave que le fondamental) :

accord[440 {1,  (14/8)}];

et l'accord correspondant (cf. Jazz) : LA-DO#-MI-SOL

accord[440 {1,  (5/4), (3/2), (14/8)}];

Gamme de Pythagore

Définition des notes (indexation) :

{DO1, DOs1, RE1, REs1, MI1, FA1, FAs1, SOL1, SOLs1, LA1, LAs1, SI1, 
          DO2} = Range[13];

On prend le (Subscript[DO, 4]) comme fréquence de référence :

DO = 440 (2^(3/12));

Cycle des quintes : on multiplie les fréquences par 3/2 pour obtenir toutes les quintes.

cycleQuintes = Table[((((3/2)))^n), {n, 0, 12}]

Puis on ramène tous les rapports (i.e. les fréquences) dans la meme octave en divisant par (2^n):

pythagore = Map[FixedPoint[If[# > 2.03, #/2, #] &, #] &, 
          cycleQuintes] // N

On classe les rapports par ordre croissant :

pythagore = Sort[pythagore]

On génère les fréquences (en Hz) pour chaque note en partant du (Subscript[DO, 3]) défini plus haut :

pythagore = DO pythagore

Jouons un peu ...

Table[
        jouerSinus[pythagore[[n]]], {n, 1, 
          Length[pythagore]}];

Voila de quoi à jouer des accords dans cette gamme :

accordPythagore[notes_] := 
      accord[pythagore[[#]] &  /@  notes]

Quinte juste :

accordPythagore[{DO1, SOL1}];

Tierce (pas tout-à-fait juste) :

accordPythagore[{DO1, MI1}];

En effet, la tierce juste est à 5/4 :

accord[{pythagore[[MI1]], DO (5/4)}];

Octave (clairement faux !) :

accordPythagore[{DO1, DO2}];

Il suffit d'ailleurs d'écouter le battement entre le DO2 de la gamme de Pythagore et le vrai DO2 (octave juste) :

accord[{pythagore[[DO2]], 2 DO}];

Gamme tempérée

Chaque demi-ton vaut (2^(1/12)):

temperee = Table[(((2))^(n/12)), {n, 0, 12}]

temperee // N

On génère la gamme à partir du (Subscript[DO, 3]):

temperee = DO temperee

Table[
        jouerSinus[temperee[[n]]], {n, 1, 
          Length[temperee]}];

La gamme de Pythagore est toujours plus haute que la tempérée (écart important pour DO-FA, i.e. quarte, et bien évidement pour l'octave) :

temperee/pythagore

ListPlot[%,PlotJoined -> True];

accordTemperee[notes_] := 
      accord[temperee[[#]] &  /@  notes]

Comparons les quintes (tempéree puis Pythagore puis battement entre les deux),

accordTemperee[{DO1, SOL1}]; 
accordPythagore[{DO1, SOL1}];   
  
accord[{temperee[[SOL1]], 
          pythagore[[SOL1]]}];

les tierces (dont la tierce juste à 5/4, qui incidemment est mieux approximée par la gamme tempérée que la gamme de Pythagore),

accordTemperee[{DO1, MI1}];
accordPythagore[{DO1, MI1}];
accord[{DO,  DO (5/4)}];   
accord[{DO (5/4), temperee[[MI1]]}]; 
    accord[{DO (5/4), pythagore[[MI1]]}];

les octaves,

accordTemperee[{DO1, DO2}];
accordPythagore[{DO1, DO2}]; 
    accord[{temperee[[DO2]], pythagore[[DO2]]}];

et enfin les quartes :

accordTemperee[{DO1, FA1}];
accordPythagore[{DO1, FA1}];
accord[{temperee[[FA1]], pythagore[[FA1]]}];