# Obtenir la fréquence d'un son?



## oorbbb (3 Juillet 2003)

Je voudrais trouver un moyen permettant de connaître la fréquence d'un son, par exemple en provenance du micro.
Je ne sais pas trop dans quelle direction chercher  
	

	
	
		
		

		
			




Merci!


----------



## Didier Guillion (3 Juillet 2003)

Bonjour,

Les FFT (Fast Fourrier Transform) marchent bien dans ce cas la.

Cordialement


----------



## oorbbb (3 Juillet 2003)

Ok, je vais investiguer cette piste qui me semble intéressante. Merci beaucoup, je donnerai des nouvelles si j'arrive à mes fins!


----------



## oorbbb (3 Juillet 2003)

Est-ce que FFT peut être utilisé aussi avec un G3? Ca a l'air d'être lié au Velocity Engine...


----------



## jemeor (3 Juillet 2003)

Salut,
(Je fais de gros raccourcis, car il faudrait des pages pour expliquer correctement ce qui suit)
Un son peut être assimilé à une somme de sons purs, appelés harmoniques. L'harmonique de plus basse fréquence, celle qui pourrait servir à donner la "note" du son, est la fondamentale. Les fréquences des harmoniques sont des multiples de la fréquence de la fondamentale. Elles donnent la richesse du son, le timbre. Lorsqu'on additionne tout ce petit monde, on retrouve notre son original.

Lorsque tu enregistres un son avec l'entrée audio de ton mac, tu te retrouves avec une liste de nombres: des échantillons. A 44.1 Khz, il faut 44100 échantillons pour représenter une seconde de signal sonore. Les valeurs des échantillons représentent les positions successives de la membrane de ton micro lorsque tu la fais vibrer en parlant devant. 

Tu passes donc d'une bouillie de fréquences à une suite d'échantillons.

Pour faire le chemin inverse, et retrouver des fréquences, tu peux prendre des paquets d'echantillons (par exemple 512, 1024...), et leur appliquer une DFFT. (Digital Fast Fourier Transform, Digital car notre son est échantilloné). 

Je ne sais pas ce que tu comptais faire, mais une simple DFFT ne permet pas de retrouver la fondamentale, ou la note d'un son, elle permet uniquement de calculer le contenu harmonique d'une portion de son. 

Explication: lorsque tu calcules une DFFT sur 512 points, le résultat est le volume d'une fondamentale dont la fréquence correspond justement à 512 points, et le volume de toutes les harmoniques qui suivent. En gros, la FFT te donne une bête combinaison de fréquences qui correspondent à tes 512 échantillons, mais elle ne peut pas te donner la combinaison originale.

Si c'est pour un simple égaliseur, pour voir la quantité de graves et d'aigus, comme dans iTunes, ca roule. Si c'est pour trouver LA fréquence d'un son, il faut plutot chercher a "Pitch tracking" ou "Pitch tracker".

A ciao 
	

	
	
		
		

		
		
	


	




PS: La DFFT est un algorithme, il en existe optimisées Altivec, mais ca peut être calculé par n'importe quel processeur.


----------



## oorbbb (4 Juillet 2003)

Merci pour tes explications! J'aurais besoin de connaître la fondamentale, en fait je voudrais faire un accordeur, qui prendrait soit l'entrée micro ou le built-in mic (en espérent que les interférences extérieures...). Bref, il faudrait trouver un moyen de retrouver la note ou en tout cas pouvoir afficher en temps réel la fréquence jouée. Il faut en fait simuler un petit accordeur! Ca devrait être possible avec la puissance des machinnes actuelles?


----------



## Didier Guillion (4 Juillet 2003)

oorbbb a dit:
			
		

> *  Il faut en fait simuler un petit accordeur! Ca devrait être possible avec la puissance des machinnes actuelles?     *



Oui, car je l'ai fait. Bon travail !
(En fait, pas personnellement mais quelqu'un qui travaille sur notre projet commun)

Cordialement


----------



## oorbbb (4 Juillet 2003)

Ah! Bonne nouvelle!
Pourrais-tu m'en dire un peu plus: quel langage de proggrammation, quelles technologies... Est-il possible d'obteinr les sources ou une version compilée pour voir ce que ça donne?
Merci d'avance


----------



## Didier Guillion (4 Juillet 2003)

Bonjour,

Bon, en gros,
peut importe le langage (nous c'est du C, mais en Logo cela peut marcher aussi)

La FFT te donne la repartition des fréquence sous forme de pics, le probleme est d'isoler le bon pic, qui te donnera la fondamentale (ce que tu cherche)

En général une note donne un pic en frequence assez fort pour la fondamentale, puis pour les harmoniques  un pic plus petit a deux fois la frequence, puis trois fois, puis quatre fois etc.

Le probleme est de reperer le bon pic.

Une astuce consiste a faire la FFT de la FFT qui mettra en évidence le fait qu'il ya des harmoniques regulierement espacés.
Le pic principal donnera (normalement) la frequence fondamentale recherchée.

Cordialement


----------



## oorbbb (4 Juillet 2003)

Ok, je vois... mais j'ai une petite question: sur le site d'apple, FFT semble être destiné aux G4 (Velocity Engine). Mais FFT, ce n'est pas avant tout un algorithme? Ou puis-je trouver une librairie qui l'implémente (aussi pour G3) et éventuellement quelques exemples de code?


----------



## Didier Guillion (4 Juillet 2003)

Bonjour,

Un conseil, évite de trop croire ce qu'il y a sur le site Apple 
	

	
	
		
		

		
		
	


	




Le FFT c'est un algo, tu le programme en ce que tu veux.

Voici le site de la mort qui tue, avec des sources C (le DFT à pied)

http://www.dspdimension.com/

Quand tu auras epluché ça, tu sera le FFT master...

Cordialement


----------



## oorbbb (4 Juillet 2003)

Ok, encore merci!!!
C'est le lien qui me manquais 
	

	
	
		
		

		
		
	


	



Avec ça j'ai de quoi m'amuser pour les vacances!
Je vais pouvoir en faire ma page d'acceuil 
	

	
	
		
		

		
		
	


	



Merci a tous pour vos conseils avisés.


----------



## jemeor (4 Juillet 2003)

Il y a plusieurs techniques pour détecter les fréquences, a peu près toutes doivent êtres basées sur des combinaisons de DFFT (d'ailleur, je me corrige, c'est pas Digital, c'est Discret). Peut être aussi également avec des wavelet ou des réseaux de filtres (ou de neurones, mais c'est peut être pas encore vraiment temps réel 
	

	
	
		
		

		
		
	


	




 )

Mais dans le cas d'un accordeur, tu t'attends à une fréquence particulère, et ça simplifie nettement le problème. Du coup, c'est peut être même possible avec un filtre résonnant.


----------



## oorbbb (7 Juillet 2003)

TylerOnZeWeb a dit:
			
		

> *
> ( si tu veux en savoir plus sur les FFT et surtout sur la fondamentale, je peux t'envoyer par e-mail notre projet , c'est relativement bien exliquer et pas compliqué !!)
> Voila !    *



Ca m'intéresserait de voir votre projet! Tu peux me l'envoyer à l'adresse suivante:
laurent_joye@yahoo.fr
(Si le fichier n'est pas trop gros (&lt;2,5M))


----------



## oorbbb (7 Juillet 2003)

jemeor a dit:
			
		

> * Mais dans le cas d'un accordeur, tu t'attends à une fréquence particulère, et ça simplifie nettement le problème. Du coup, c'est peut être même possible avec un filtre résonnant. *



En effet, je connais à l'avance la fréquence qui doit être atteinte, mais il faut en outre savoir afficher la fréquence jouée (affichage graphique d'une barre ou son centre représente la bonne note). Est-ce qu'un filtre résonnant me permet de le faire? Peut-être que ça pourrait fonctionner en utilisant une série de filtres résonnants autour de la fondamentale; a chaque filtre correspondrait une 'led' qui s'allumerait... Mais est-ce assez précis? Les harmoniques riquent peut-être de faire des interférences dans cette technique?


----------



## jemeor (8 Juillet 2003)

oorbbb a dit:
			
		

> *
> 
> En effet, je connais à l'avance la fréquence qui doit être atteinte, mais il faut en outre savoir afficher la fréquence jouée (affichage graphique d'une barre ou son centre représente la bonne note). Est-ce qu'un filtre résonnant me permet de le faire? Peut-être que ça pourrait fonctionner en utilisant une série de filtres résonnants autour de la fondamentale; a chaque filtre correspondrait une 'led' qui s'allumerait... Mais est-ce assez précis? Les harmoniques riquent peut-être de faire des interférences dans cette technique?
> *



C'est un problème très interressant, mais je n'ai pas assez de connaissances dans le domaine pour te donner une réponse tranchée. Mais a mon avis, des gens ont surement déja essayé le coup du filtre. Il faut chercher à savoir s'ils ont reussi 
	

	
	
		
		

		
		
	


	




Si j'etais a ta place, je commencerais par me demander si c'est vraiment utile de vouloir obtenir la fréquence. A mon avis, c'est très difficile de rivaliser avec l'oreille humaine. Peut être que ton logiciel devrait se contenter de faire diapason, et de laisser le musicien ecouter la déviation entre la fréquence théorique (que ton soft enverait sur la sortie audio), et la note qu'il joue. Je dis peut être une bêtise: je crois qu'un humain doit être capable d'entendre une différence de fréquence entre deux son, par exemple, deux cordes de guitare jouées à la même note, de l'ordre d'un ou deux dixièmes de Hertz. C'est a dire 5 secondes pour que les cordes reviennent en "phase". Il faudrait demander à un bon guitariste ou a un accordeur de piano 
	

	
	
		
		

		
		
	


	




Ensuite, effectivement, je partirai sur un filtre resonnant assez pointu. (Cela dit, le code source est plus difficile à trouver que celui des FFT, mais peut être plus facile à utiliser. Chercher dans les projets open-source musicaux sur sourceforge.net )

Pour éviter que les harmoniques ne perturbent ton filtre de "mesure", tu peux deja préparer le son: filtrer une première fois avec un simple passe-bas, et peut-être le corriger pour qu'il soit toujours a la même puissance (il est impossible de jouer deux notes avec exactement le même volume), mais ca n'a peut être pas d'importance dans notre cas. Ensuite, faire varier la fréquence de resonnance de ton filtre (ne pas confondre avec la fréquence de coupure) par petit "pas" de quelques dixièmes de Hz autour de la fréquence théorique, et de mesurer avec quel "pas" le gain de sortie est maximal (ou alors avoir plusieurs filtres en parallèle). Ensuite, la différence entre cette fréquence mesurée et la fréquence désirée te donne le résultat que tu veux. Ca revient exactement à ton idée de mettre des filtres résonnant autour de la fondamentale. D'ailleur, le fait d'avoir 4, 8, 12... filtres en parallèle est hautement optimisable Altivec. De plus, avec une telle methode, le calcul peut se faire sur très peu d'echantillons, et donc avoir un excellent temps de réponse. Reste a voir si ca peux marcher 
	

	
	
		
		

		
		
	


	




  Ce qui devient dur avec ce schéma, c'est la détéction des fréquences trop éloignée de la fréquence de référence.


----------



## oorbbb (18 Juillet 2003)

jemeor a dit:
			
		

> *
> 
> Si j'etais a ta place, je commencerais par me demander si c'est vraiment utile de vouloir obtenir la fréquence. A mon avis, c'est très difficile de rivaliser avec l'oreille humaine. Peut être que ton logiciel devrait se contenter de faire diapason, et de laisser le musicien ecouter la déviation entre la fréquence théorique (que ton soft enverait sur la sortie audio), et la note qu'il joue. Je dis peut être une bêtise: je crois qu'un humain doit être capable d'entendre une différence de fréquence entre deux son, par exemple, deux cordes de guitare jouées à la même note, de l'ordre d'un ou deux dixièmes de Hertz. C'est a dire 5 secondes pour que les cordes reviennent en "phase". Il faudrait demander à un bon guitariste ou a un accordeur de piano
> 
> ...



Je suis tout a fait d'accord, mais ce style d'accordeur existe déjà et exige un environnement silencieux. L'idée c'est de permettre également de brancher directement la guitare sur l'entrée son (comme un véritable accordeur) car dans un local de répèt ou avant un concert il y a toujours du bruit 
	

	
	
		
		

		
		
	


	




 !. Je pourrais éventuellement proposer a l'utilisateur de choisir sa méthode d'accordage (oreille ou visuelle).


----------

