From 3b8782f54a0f4bc2152de2cf237c87e30eeb50be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Gu=C3=A9gan?= Date: Tue, 29 Oct 2024 11:17:29 +0100 Subject: [PATCH] Minor changes --- source/music/code/harmoniques.R | 29 +++++++++++++++ source/music/harmoniques.rst | 62 +++++++++++++++++++++++++-------- 2 files changed, 77 insertions(+), 14 deletions(-) create mode 100755 source/music/code/harmoniques.R diff --git a/source/music/code/harmoniques.R b/source/music/code/harmoniques.R new file mode 100755 index 0000000..022e943 --- /dev/null +++ b/source/music/code/harmoniques.R @@ -0,0 +1,29 @@ +#!/usr/bin/Rscript + +do4=261.63 # do fréquence par convention +do5=2*do4 # do octave suivante +N=27 # Nombre d'harmoniques à explorer +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) + +## Ramener à l'octave de do4 +toOctave=function(x, i=0){ + if(x<=do5) # On verifie si on est au bonne octave + 2^i + else + toOctave(x/2, i+1) +} + +## On calcule les facteurs permettant de passer à l'octave de do4 pour chaque harmoniques +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, "-"))<10 # 10 est la marge d'erreur +v=apply(M,1,FUN=function(row){if(any(row)) (1:13)[row] else 14}) # On selectionne les notes correspondantes + +## 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]]) +} + diff --git a/source/music/harmoniques.rst b/source/music/harmoniques.rst index e6aea1c..b904ab2 100644 --- a/source/music/harmoniques.rst +++ b/source/music/harmoniques.rst @@ -7,31 +7,63 @@ Timbre Lorsque l'on joue une note à l'aide d'un intruments, celui-ci sonne à une frequence :math:`f_0` (appelée *fondamentale*) ainsi qu'à plusieurs multiples de cette fréquence :math:`f_i=(i+1)\times f_0` (appelées *harmoniques*). -Ainsi, un lorsque l'on joue un do, on entends la superposition de la fondamentale et de ces harmoniques. +En jouant un do, on entends la superposition de la fondamentale et de des harmoniques. Chacunes de ces harmoniques corresponds à l'une des 12 notes de musique jouée à des hauteurs (octaves) différentes. +.. note:: + La video suivante illustre bien ce concept: `Les harmoniques d'une note `__. + .. figure:: figures/harmoniques.svg :width: 500px :align: center Représentation des harmoniques d'une fréquence :math:`f_0` (tout en haut) en faisant vibrer une corde -Ainsi, le signal produit par une cordre vibrant à une fréquence :math:`f_0` contient les fréquences suivantes (`source `__): +Le signal produit par une cordre vibrant à une fréquence :math:`f_0` contient les fréquences suivantes: -.. math:: - f_0 &\quad\mathrm{fondamental}\quad &\text{do 0}\\ - 2f_0 &\quad\mathrm{octave} &\text{do 1}\\ - 3f_0 &\quad\mathrm{quinte} &\text{sol 1}\\ - 4f_0 &\quad\mathrm{octave} &\text{do 2}\\ - 5f_0 &\quad\mathrm{tièrce} &\text{mi 2}\\ - 6f_0 &\quad\mathrm{quinte} &\text{sol 2}\\ - 7f_0 &\quad\mathrm{septième} &\text{sib 2}\\ - ... &\quad...... +.. list-table:: Associations fréquences, notes et intervalles (`source `__). Note: do 0 est le do du premier octave, do 1 est le do du deuxième octave etc. + :align: center + :header-rows: 1 + * - Fréquence + - Note + - Intervalle + * - :math:`f_0` + - do 0 + - fondamentale + * - :math:`2f_0` + - do 1 + - octave + * - :math:`3f_0` + - sol 1 + - quinte + * - :math:`4f_0` + - do 2 + - octave + * - :math:`5f_0` + - mi 2 + - tierce + * - :math:`6f_0` + - sol 2 + - quinte + * - :math:`7f_0` + - sib 2 + - septième mineur -.. note:: - La video suivante illustre bien ce concept: `Les harmoniques d'une note `__. +L'origine des termes octave, quinte tierce etc, seront expliqué dans un prochain chapitre. +Ici, ces intervalles correspondent à la distance entre l'harmonique considéré :math:`f_i`, et la fondamental :math:`f_0`, lorsque :math:`f_i` est ramené sur le même octave que :math:`f_0`. +La distance entre une fréquence :math:`f_a` et :math:`f_b` se calcule en faisant un ratio :math:`\frac{f_a}{f_b}`. + +Comment la fréquence d'une harmonique :math:`f_i` à l'octave de :math:`f_0`? +Diviser ou multiplier une fréquence par deux ne change pas la note. +Ainsi, en divisant par deux autant de fois que nécessaire jusqu'à ce que :math:`f_0 \le f_i \le 2f_0` on ramène l'harmonique à l'octave de la fondamentale. + +Le code source suivant détermine pour chacune des harmoniques la note associé ainsi que le facteur ramenant à l'octave: + +.. literalinclude:: code/harmoniques.R + :language: R + Le *timbre* corresponds aux caracteristiques propres au son d'un instruments, ce qui permet de le reconnaitre. Un do joué sur un piano, une guitare, une flute reste un do. Ce qui permet de savoir si il @@ -42,11 +74,13 @@ variation des amplitudes (propre à chaque instruments) des harmoniques. Gamme Pythagoricienne ====================== +.. _pythagoricienne: + En musique, un intervalle est la rapport de deux fréquences. Un octave corresponds à deux fois la fréquence initiale :math:`f_{octave}=2f_0`. Il s'agit d'un intervalle important car il sonne extrêmement juste lorsque l'on joue :math:`f_0` et :math:`f_{octave}` simulatanement. -On note également que le passage à l'octave :math:`f_{octave_i}=2^i*f_0` est une opération qui ne change pas la note de départ! +Pour rappel, le passage à l'octave :math:`f_{octave_i}=2^i*f_0` est une opération qui ne change pas la note de départ! Ainsi, diviser/multiplier une fréquence par 2, une ou plusieurs fois, laisse la note inchangée. Un concept très important sur lequelle repose la gamme Pythagoricienne.