Minor changes

This commit is contained in:
Loïc Guégan 2024-10-29 22:29:59 +01:00
parent 0726accbb1
commit a702a82f4f
3 changed files with 64 additions and 19 deletions

View file

@ -0,0 +1,25 @@
#!/usr/bin/Rscript
q=3/2 # Facteur de quinte
t=5/4 # Facteur de tierce
## Construction de la gamme parfaite
## Les division par deux sont la pour rammener à l'octave
do4=261.63 # do fréquence par convention
sol4=do4*q
re4=sol4*q/2
fa4=do4*(1/q)*2
mi4=do4*t
sol4d=mi4*t
re4d=sol4d*q/2
si4=sol4*t
fa4d=si4*q/2
la4d=fa4d*t
la4=fa4*t
do4d=la4*t/2
names=c("do","do#reb","re","re#/mib","mi","fa","fa#/solb","sol", "sol#/lab", "la", "la#/sib", "si")
frequences=c(do4,do4d,re4,re4d,mi4,fa4,fa4d,sol4,sol4d,la4,la4d,si4)
for( e in Map(list,names,frequences)){
message(paste0(sprintf("%-8s",e[[1]])," ",e[[2]],"Hz"))
}

View file

@ -2,9 +2,9 @@
do4=261.63 # do fréquence par convention
do5=2*do4 # do octave suivante
N=27 # Nombre d'harmoniques à explorer
N=8 # Nombre d'harmoniques à explorer (ne pas hésité à faire varier N!)
names=c("do","do#reb","re","re#/mib","mi","fa","fa#/solb","sol", "sol#/lab", "la", "la#/sib", "si", "do","NA")
temperee=do4*((2^(1/12))^(0:12)) # Gamme tempere (expliquer plus tard)
naturelle=c(261.63,272.53125,294.33375,306.59765625,327.0375,348.84,367.9171875,392.445,408.796875,436.05,459.896484375,490.55625,2*do4) # Valeurs théoriques de la gamme naturelle (parfaite voir plus loin)
## Ramener à l'octave de do4
toOctave=function(x, i=0){
@ -18,13 +18,14 @@ toOctave=function(x, i=0){
factors=(1:N/sapply(do4*(1:N),FUN=toOctave))
harmoniques=do4*factors # On calcule les fréquences à l'octave de do4
## On compare les fréquences trouvé à la gamme tempérée
M=abs(outer(harmoniques,temperee, "-")) # Fonction d'erreur
## On compare les fréquences trouvé à la gamme naturelle
M=abs(outer(harmoniques,naturelle, "-")) # Fonction d'erreur
M=t(apply(M,1,FUN=function(row){row==min(row)})) # On selection l'entrée avec l'erreur minimale
v=apply(M,1,FUN=function(row){if(any(row)) (1:13)[row] else 14}) # On selectionne les notes correspondantes
v=apply(M,1,FUN=function(row){if(any(row)) (1:13)[which(row)[1]] else 14}) # On selectionne les notes correspondantes (which est la pour les can ou plusieurs il y a plusieur minima (ici on prends le premier a TRUE))
## On affiche le résultat
for( e in Map(list, 1:N, names[v], sapply(do4*(1:N),FUN=toOctave))){
message(paste0(e[[1]],"f ",e[[2]])," ",e[[1]],"/",e[[3]])
message(
paste0(sprintf("%-5s ",paste0(e[[1]],"f")),sprintf("%-10s",e[[2]]),e[[1]],"/",e[[3]]))
}

View file

@ -65,20 +65,18 @@ Le code source suivant détermine pour chacune des harmoniques la note associé
.. literalinclude:: code/harmoniques.R
:language: R
Example de sortie avec le format <harmonique> <note> <ratio>:
Example de sortie du programme:
.. code-block:: console
1f do 1/1
2f do 2/1
3f sol 3/2
4f do 4/2
5f mi 5/4
6f sol 6/4
7f la#/sib 7/4
8f do 8/4
9f re 9/8
etc...
1f do 1/1
2f do 2/1
3f sol 3/2
4f do 4/2
5f mi 5/4
6f sol 6/4
7f la#/sib 7/4
8f do 8/4
Le *timbre* corresponds aux caracteristiques propres au son d'un
instruments, ce qui permet de le reconnaitre. Un do joué sur un piano,
@ -145,14 +143,35 @@ On choisisait les accords qui sonnent le mieux avec le *tempérament mésotoniqu
Gamme Tempéré
==============
Il est possible de recontruire l'ensemble des notes d'une tonalité pour que tout les intervalles tombent justent (`source <https://www.youtube.com/watch?v=cTYvCpLRwao&t=383s>`__).
Il est possible de recontruire l'ensemble des notes d'une tonalité (ce terme sera dévelopé plus tard) pour que toutes les intervalles tombent justent (`source <https://www.youtube.com/watch?v=cTYvCpLRwao&t=383s>`__). On appelle cela la *gamme naturelle* ou *gamme juste* ou *gamme du physicien*.
Sauf que l'on ne pourra pas changer de tonalité sans que celle-ci sonne fausse.
Pour cela, il suffit de connaitre les ratios exactes de tierce (:math:`\frac{3}{2}`) ou de quintes (:math:`\frac{5}{4}`) et de contruire l'ensemble des notes avec.
Grâce à cette approche, on peu en déduire la valeur théorique de chacune des intervalles en musique.
Par example, pour la seconde majeur, on sait que la deuxième quinte de do est ré (intervalle de seconde majeur). On sait également que :math:`f_{do}=261.63` Hz. Ainsi, :math:`f_{ré}=\frac{\frac{3}{2}^2f_{do}}{\underbrace{2}_{\text{Ramène la note à l'octave}}}=294.3293` Hz. En faisant le rapport des fréquences on obtient le ratio d'une seconde majeur :math:`\frac{294.3293}{261.63}=1.125=\frac{9}{8}`.
Le programme suivant génère l'ensemble des fréquence théorique de chacune des notes de la gamme naturelle:
.. literalinclude:: code/gamme_naturelle.R
:language: R
Sortie du programme:
.. code-block:: console
do 261.63Hz
do#reb 272.53125Hz
re 294.33375Hz
re#/mib 306.59765625Hz
mi 327.0375Hz
fa 348.84Hz
fa#/solb 367.9171875Hz
sol 392.445Hz
sol#/lab 408.796875Hz
la 436.05Hz
la#/sib 459.896484375Hz
si 490.55625Hz
Comme on ne peut pas utiliser toutes les tonalités avec une gamme parfaitement accordée, la *gamme tempéré* propose de répartir l'ensemble des désaccords sur toutes les notes.
Il s'agit de l'accordage utilisé de nos jours.
Ansi, pour passer d'une note à la suivante, on multiplie par facteur :math:`2^\frac{1}{12}`.
@ -161,7 +180,7 @@ Le code suivant génère l'ensemble des notes de la *gamme tempérée*:
.. literalinclude:: code/temperee.R
:language: R
.. list-table:: Exemple d'approximations des intervalles faites par la gamme tempérée. Tout les intervalles sont légèrement faux à part l'octave.
:align: center
:header-rows: 1