Minor changes
This commit is contained in:
parent
0726accbb1
commit
a702a82f4f
3 changed files with 64 additions and 19 deletions
25
source/music/code/gamme_naturelle.R
Executable file
25
source/music/code/gamme_naturelle.R
Executable 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"))
|
||||
}
|
|
@ -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]]))
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue