macro pour fréquence

OlivGM

XLDnaute Occasionnel
Bonjour,

Excel a beaucoup de possibilités, est-il capable, via un code, de reconnaître une suite de fréquences en fonction d'un tableau (colonnes A B)?

merci de votre aide sympathique.
 

Pièces jointes

  • Classeurmusique.xlsx
    10.4 KB · Affichages: 28

vgendron

XLDnaute Barbatruc
Re : macro pour fréquence

Bonjour,

pas sur d'avoir compris le besoin..
en D4 de ton fichier
=RECHERCHEV(D3;$A$2:$B$26;2;FAUX)
puis tu tires la formule vers la droite:
ATTENTION: les notes chantées D3-->S3 doivent être écrites EXACTEMENT avec la même orthographe que dans la colonne A
Ex: en F3: re ne sera pas trouvé, car en A4: ré. avec l'accent
 

vgendron

XLDnaute Barbatruc
Re : macro pour fréquence

Idem, enlever tous les espaces inutiles dans tes cellules: "pour les visualiser ici, je les remplaces par _

do#_ à remplacer par do# etc etc
je crois que tu as des espaces après chaque dieze
 

thebenoit59

XLDnaute Accro
Re : macro pour fréquence

Et pour supprimer tous les espaces inutiles tu peux utiliser :

Code:
Sub Supprespace()
Dim Cell As Range
    For Each Cell In Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
        Cell = Application.WorksheetFunction.Trim(Cell)
    Next
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : macro pour fréquence

Bonjour.
Le rang de la note la plus proche d'une fréquence en Hz donnée en cellule A1 sera :
Code:
=ARRONDI(LOG(A1/440;2)*12+10;0)
Donne 1 pour 261,63 Hz, do.
Formule inverse :
VB:
=2^((B1-10)/12)*440
Pour LOG(X;2) en VBA on peut faire :
VB:
Function Log2(X As Double) As Double
Const InvLn2 = 161546953 / 111975815
Log2 = Log(X) * InvLn2 '1,4426950408889634073599246810019
End Function

Ou bien :
VB:
Function Note(ByVal F As Double) As Integer
Const LogR122 = 212857425 / 12295127
Note = Int(Log(F / 440) * LogR122 + 0.5)
End Function
0 pour LA 440 Hz
 
Dernière édition:

OlivGM

XLDnaute Occasionnel
Re : macro pour fréquence

Bonjour à tous,

D'abord merci.
puis
Je crois que j'ai commis une bévue?

Mon énoncé était de "de reconnaître une suite de fréquences"; à savoir un son arrive dans Excel (micro) et le code VBA (intelligent donc ) affiche sol (par exemple) en fonction de la fréquence (approchée et pas forcément pile-poil juste (pour les barbus ou moustachus du Forum ! )

Merci de mes excuses plates non sonores.
 

Dranreb

XLDnaute Barbatruc
Re : macro pour fréquence

Si la valeur de la fréquence en herz est disponible, ma dernière fonction Note la convertit en rang de note par rapport au LA 440 Hz.
C'est l'entier le plus proche du logarithme en base racine douzième de 2 de la fréquence divisée par 440.
Il ne reste qu'à s'en servir comme indice pour aller chercher dans une table le nom de la note.

À titre indicatif cette version rend le nom de la note avec un "+" derrière pour chaque octave supplémentaire à partir du DO 523,25 Hz
VB:
Function Note(ByVal F As Double) As String
Const LogR122 = 212857425 / 12295127
Dim N As Long
N = Int(Log(F / 440) * LogR122 + 0.5)
Note = Array("LA", "LA#", "SI", "DO", "DO#", "RÉ", "RÉ#", "MI", "FA", _
   "FA#", "SOL", "SOL#")((N + 36) Mod 12) & String((N + 9) \ 12, "+")
End Function
 
Dernière édition:

OlivGM

XLDnaute Occasionnel
Re : macro pour fréquence

Bonjour,

mais la question reste comment dire à Excel de récupérer la note "fréquence" entrant dans le PC via le micro? elle est bien stockée quelque part? La difficulté est là.
 

Dranreb

XLDnaute Barbatruc
Re : macro pour fréquence

La fréquence n'est pas connue à priori ni stockée. Il faudrait faire une analyse de Fourrier d'au moins quelques centaines de points du signal capté. Mais je ne sais pas comment récupérer les séries de valeurs instantanées venant du micro qui décrivent la forme du signal.
Je saurais lire un fichier .wav par contre…
 
Dernière édition:

Statistiques des forums

Discussions
314 222
Messages
2 107 474
Membres
109 831
dernier inscrit
Alammo53