Je l’ai cherchée tellement souvent sur le net sans jamais la trouver !
Après toutes ces recherches infructueuse, j’ai décidé de faire confiance à mon intuition : ça doit pas être si compliqué …
Les hypothèses de départ :
- La fréquence du La 3 est de 440 Hz
- Pour passer à l’octave supérieure on multiplie par 2 : La 4 = 880 Hz
- Une octave contient 12 demi-tons
- http://fr.wikipedia.org/wiki/Note_de_musique
Wikipedia donne une formule mais qui se base sur une fréquence de départ, comment fait-on si on veux pas avoir à utiliser une constante de départ, y’a-t-il une formule magique ?
Concentrons nous sur les valeurs exactes connues : 55, 110, 220, 440 … ça doit bien avoir un rapport avec les puissances de 2. Justement en informatique on les connait par cœur : 64, 128, 256, 512 …
Ca colle pas, mais quelques petites observations néanmoins :
- 55 = 64 – 9
- 110 = 128 – 18
- 220 = 256 – 36
- 440 = 512 – 72
- f(n) = 2^n - (9*(2^(n-6))) ???
Ca prend forme mais que faire alors des notes intermédiaire entre les La. Il reste juste à appliquer cette formule sur des douzième d’octave et à faire quelques ajustements pour que qu’une fonction puisse prendre le numéro d’octave tel que défini dans la musique contemporaine (l’octave 0 commence à Do 32,70).
static class NoteFrequencyHelper
{
static public double GetNoteFrequency(double octave, double pitch)
{
// Dans cette formule 0=La, donc -9 sur le pitch pour rétabli 0=Do
double absolute_picth = octave + (pitch - 9) / 12d;
return Math.Pow(2, absolute_picth + 6) - 9d * Math.Pow(2, absolute_picth);
}
}
et le test qui vas avec :
[Test]
public void GetNoteFrequencies()
{
string[] note_names = { "Do ", "Do#", "Re ", "Re#", "Mi ", "Fa ", "Fa#", "Sol ", "Sol#", "La ", "La#", "Si " };
var frequencies =
from octave in Enumerable.Range(-1, 9)
from pitch in Enumerable.Range(0, 12)
select new
{
O = octave,
P = pitch,
Name = note_names[pitch],
Freq = NoteFrequencyHelper.GetNoteFrequency((double)octave, (double)pitch)
};
foreach (var f in frequencies)
Console.WriteLine(String.Format("{0}\t{1}:\t{2} Hz", f.Name, f.O, f.Freq));
}
Cela donne :
Do -1: 16,3515978312874 Hz
Do# -1: 17,3239144360545 Hz
Re -1: 18,354047994838 Hz
Re# -1: 19,4454364826301 Hz
Mi -1: 20,6017223070544 Hz
Fa -1: 21,8267644645627 Hz
Fa# -1: 23,1246514194772 Hz
Sol -1: 24,4997147488593 Hz
Sol# -1: 25,9565435987466 Hz
La -1: 27,5 Hz
La# -1: 29,1352350948806 Hz
Si -1: 30,8677063285078 Hz
Do 0: 32,7031956625748 Hz
Do# 0: 34,647828872109 Hz
Re 0: 36,708095989676 Hz
Re# 0: 38,8908729652601 Hz
Mi 0: 41,2034446141087 Hz
Fa 0: 43,6535289291255 Hz
Fa# 0: 46,2493028389543 Hz
Sol 0: 48,9994294977187 Hz
Sol# 0: 51,9130871974932 Hz
La 0: 55 Hz
La# 0: 58,2704701897612 Hz
Si 0: 61,7354126570155 Hz
Do 1: 65,4063913251497 Hz
Do# 1: 69,295657744218 Hz
Re 1: 73,4161919793519 Hz
Re# 1: 77,7817459305202 Hz
Mi 1: 82,4068892282175 Hz
Fa 1: 87,307057858251 Hz
Fa# 1: 92,4986056779086 Hz
Sol 1: 97,9988589954373 Hz
Sol# 1: 103,826174394986 Hz
La 1: 110 Hz
La# 1: 116,540940379522 Hz
Si 1: 123,470825314031 Hz
Do 2: 130,812782650299 Hz
Do# 2: 138,591315488436 Hz
Re 2: 146,832383958704 Hz
Re# 2: 155,56349186104 Hz
Mi 2: 164,813778456435 Hz
Fa 2: 174,614115716502 Hz
Fa# 2: 184,997211355817 Hz
Sol 2: 195,997717990875 Hz
Sol# 2: 207,652348789973 Hz
La 2: 220 Hz
La# 2: 233,081880759045 Hz
Si 2: 246,941650628062 Hz
Do 3: 261,625565300599 Hz
Do# 3: 277,182630976872 Hz
Re 3: 293,664767917407 Hz
Re# 3: 311,126983722081 Hz
Mi 3: 329,62755691287 Hz
Fa 3: 349,228231433004 Hz
Fa# 3: 369,994422711634 Hz
Sol 3: 391,995435981749 Hz
Sol# 3: 415,304697579945 Hz
La 3: 440 Hz
La# 3: 466,16376151809 Hz
Si 3: 493,883301256124 Hz
Do 4: 523,251130601197 Hz
Do# 4: 554,365261953744 Hz
Re 4: 587,329535834815 Hz
Re# 4: 622,253967444162 Hz
Mi 4: 659,25511382574 Hz
Fa 4: 698,456462866008 Hz
Fa# 4: 739,988845423269 Hz
Sol 4: 783,990871963499 Hz
Sol# 4: 830,60939515989 Hz
La 4: 880 Hz
La# 4: 932,327523036179 Hz
Si 4: 987,766602512249 Hz
Do 5: 1046,50226120239 Hz
Do# 5: 1108,73052390749 Hz
Re 5: 1174,65907166963 Hz
Re# 5: 1244,50793488832 Hz
Mi 5: 1318,51022765148 Hz
Fa 5: 1396,91292573202 Hz
Fa# 5: 1479,97769084654 Hz
Sol 5: 1567,981743927 Hz
Sol# 5: 1661,21879031978 Hz
La 5: 1760 Hz
La# 5: 1864,65504607236 Hz
Si 5: 1975,5332050245 Hz
Do 6: 2093,00452240479 Hz
Do# 6: 2217,46104781497 Hz
Re 6: 2349,31814333926 Hz
Re# 6: 2489,01586977665 Hz
Mi 6: 2637,02045530296 Hz
Fa 6: 2793,82585146403 Hz
Fa# 6: 2959,95538169308 Hz
Sol 6: 3135,96348785399 Hz
Sol# 6: 3322,43758063956 Hz
La 6: 3520 Hz
La# 6: 3729,31009214472 Hz
Si 6: 3951,066410049 Hz
Do 7: 4186,00904480958 Hz
Do# 7: 4434,92209562995 Hz
Re 7: 4698,63628667853 Hz
Re# 7: 4978,03173955329 Hz
Mi 7: 5274,04091060591 Hz
Fa 7: 5587,65170292807 Hz
Fa# 7: 5919,91076338615 Hz
Sol 7: 6271,92697570798 Hz
Sol# 7: 6644,87516127913 Hz
La 7: 7040 Hz
La# 7: 7458,62018428943 Hz
Si 7: 7902,13282009799 Hz
Arffff, c’est tellement bien le dimanche.
4 commentaires:
J'étais aussi à la recherche d'une formule !
J'en prends bonne note. Merci. ^^
ps : Chiffres après la virgule, powah ! :D
Formidable :D
Exactement ce que je cherchais.
Suivre ton cheminement est intéressant.
Bonjour,
Quel dommage que vous ne parliez pas des bémols !!! qui n'ont pas la même fréquence que les dièses...
Cf les comma....
Effectivement je ne parle pas des commas, j'ai juste divisé la gamme en 12 demi-tons identiques ce qui ne correspond pas à la pleine réalité théorique.
Cependant vous conviendrez facilement que sur un piano par exemple, il est juste impossible de différencier le Do # du Ré b puisqu'il n'y a qu'une seule touche pour les deux.
Cet méthode de calcul devrait donc suffire pour pas mal de monde, mais si vous souhaitez en faire une version plus élaborée, libre à vous et surtout faites partager :-)
Publier un commentaire