macro pour fréquence

  • Initiateur de la discussion Initiateur de la discussion OlivGM
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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
 
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:
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.
 
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:
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

D
  • Question Question
Réponses
5
Affichages
214
Didierpasdoué
D
Réponses
7
Affichages
429
Réponses
2
Affichages
193
Réponses
1
Affichages
535
Retour