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
|
do4=261.63 # do fréquence par convention
|
||||||
do5=2*do4 # do octave suivante
|
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")
|
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
|
## Ramener à l'octave de do4
|
||||||
toOctave=function(x, i=0){
|
toOctave=function(x, i=0){
|
||||||
|
@ -18,13 +18,14 @@ toOctave=function(x, i=0){
|
||||||
factors=(1:N/sapply(do4*(1:N),FUN=toOctave))
|
factors=(1:N/sapply(do4*(1:N),FUN=toOctave))
|
||||||
harmoniques=do4*factors # On calcule les fréquences à l'octave de do4
|
harmoniques=do4*factors # On calcule les fréquences à l'octave de do4
|
||||||
|
|
||||||
## On compare les fréquences trouvé à la gamme tempérée
|
## On compare les fréquences trouvé à la gamme naturelle
|
||||||
M=abs(outer(harmoniques,temperee, "-")) # Fonction d'erreur
|
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
|
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
|
## On affiche le résultat
|
||||||
for( e in Map(list, 1:N, names[v], sapply(do4*(1:N),FUN=toOctave))){
|
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
|
.. literalinclude:: code/harmoniques.R
|
||||||
:language: R
|
:language: R
|
||||||
|
|
||||||
Example de sortie avec le format <harmonique> <note> <ratio>:
|
Example de sortie du programme:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
1f do 1/1
|
1f do 1/1
|
||||||
2f do 2/1
|
2f do 2/1
|
||||||
3f sol 3/2
|
3f sol 3/2
|
||||||
4f do 4/2
|
4f do 4/2
|
||||||
5f mi 5/4
|
5f mi 5/4
|
||||||
6f sol 6/4
|
6f sol 6/4
|
||||||
7f la#/sib 7/4
|
7f la#/sib 7/4
|
||||||
8f do 8/4
|
8f do 8/4
|
||||||
9f re 9/8
|
|
||||||
etc...
|
|
||||||
|
|
||||||
Le *timbre* corresponds aux caracteristiques propres au son d'un
|
Le *timbre* corresponds aux caracteristiques propres au son d'un
|
||||||
instruments, ce qui permet de le reconnaitre. Un do joué sur un piano,
|
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é
|
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.
|
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.
|
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.
|
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}`.
|
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.
|
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.
|
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}`.
|
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
|
.. literalinclude:: code/temperee.R
|
||||||
:language: 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.
|
.. 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
|
:align: center
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
|
|
Loading…
Add table
Reference in a new issue