Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Capture et analyse d'un son -> souffle SFML et c++  (Lu 6207 fois)

0 Membres et 1 Invité sur ce sujet

tiouil

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Capture et analyse d'un son -> souffle SFML et c++
« le: Septembre 24, 2012, 04:13:56 pm »
Bonjour, depuis quelques jours, je recherche activement (et dans l'urgence), comment analyser un son capture avec sf::SoundBufferRecorder.


En fait j'aimerais, pour un programme perso faire souffler l'utilisateur sur une bougie et donc récuperer le son en continue pour faire une action (musique, animation, ...) dès que ce son est un souffle.


D'après mes recherches, il faut que je me serve d'un sf::Int16* contenant le son pour l'analyser. Et aussi (mais ca j'en suis moins sûr) d'une fonction "Transformée de Fourier" pour détecter si le son est très aigu car apparemment cela correspond à la fréquence du son produit par un souffle.


Je ne sais donc pas du tout comment procéder pour l'analyse et en plus cela devient plus qu'urgent. Si une âme charitable passe par là et peut me donner la solution (et même plus si affinité.... un petit bout de code ...).


Merci par avance à tous.


ps : Je code en c++ sous windows (EDI -> CodeBlocks)
Le design, un peché mignon.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Capture et analyse d'un son -> souffle SFML et c++
« Réponse #1 le: Septembre 24, 2012, 04:25:59 pm »
Tu bloques sur quoi exactement ?
Laurent Gomila - SFML developer

tiouil

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Re : Re : Capture et analyse d'un son -> souffle SFML et c++
« Réponse #2 le: Septembre 24, 2012, 04:39:30 pm »
Tu bloques sur quoi exactement ?

Ben je sais récupérer le son mais je ne sais pas comment l'analyser.

De plus je ne sais pas comment le récuperer pour analyses en boucle.

Merci encore.
Le design, un peché mignon.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Capture et analyse d'un son -> souffle SFML et c++
« Réponse #3 le: Septembre 24, 2012, 05:07:47 pm »
Citer
je ne sais pas comment l'analyser
Oui mais plus précisément ? A quelle étape de l'analyse ? Tu as fait la transformée de Fourrier ? Tu as trouvé quelle plage de fréquences correspondent à un souffle ? Tu as déjà fait quelque chose ?

Si c'est un devoir, faut pas rêver on ne va pas le faire à ta place ;)
Laurent Gomila - SFML developer

tiouil

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Re : Capture et analyse d'un son -> souffle SFML et c++
« Réponse #4 le: Septembre 24, 2012, 05:25:41 pm »
Non, ce n'est pas un devoir. A vrai dire c'est pour l'anniversaire d'une personne et comme dit précedemment, je souhaite faire souffler la personne sur la bougie pour enchaîner une animation derrière. L'anniversaire c'est le 2 Octobre, j'aimerai bien l'avoir réussi ce jour là pour lui faire une surprise.

Je n'ai pas fait la transformée de fourrier car je ne sais pas comment l'utiliser : donc j'en suis un peu à zéro. Pour ma seconde question sur l'analyse en boucle, je trouverai bien en faisant 4 tests distinct :
- Je ne fait rien
- Je parle puis je souffle
- Je parle, je souffle et je reparle
- je souffle directement

Dans les 3 derniers car l'animation devra se déclencher.

Promis ce n'est pas du tout pour l'université étant donné que j'ai finit en Juin 2012 mes études.
« Modifié: Septembre 24, 2012, 05:34:36 pm par tiouil »
Le design, un peché mignon.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Capture et analyse d'un son -> souffle SFML et c++
« Réponse #5 le: Septembre 24, 2012, 06:07:38 pm »
D'accord, mais on ne va quand même pas le faire à ta place ;)

C'est un sujet assez compliqué, une semaine ça me paraît très ambitieux surtout si tu débarques dans le domaine de l'analyse audio.

La première chose est de faire fonctionner la transformée de Fourrier, qui va te décomposer le son en fréquences (c'est ce qui te permettra de voir si le son est "proche" de la fréquence type d'un souffle humain). Pour ça il te faut utiliser une bibliothèque dédiée, la plus connue étant FFTW. Fais déjà ça, une fois que c'est intégré à ton code fais des tests avec un micro, et vois si tu arrives à avoir des résultats significatifs.

Note que je ne suis pas un expert en analyse audio non plus, il y a des chances pour que l'analyse soit plus compliquée que simplement comparer des fréquences, et que tu n'arrives donc pas à faire ce que tu veux.
Laurent Gomila - SFML developer

lezebulon

  • Full Member
  • ***
  • Messages: 235
    • Voir le profil
Re : Capture et analyse d'un son -> souffle SFML et c++
« Réponse #6 le: Septembre 24, 2012, 06:39:22 pm »
lol
désolé mais ça me fait marrer ton truc, c'est clairement pas trivial du tout...
en gros ça correspond à ce que j'ai fait l'an dernier en M2 en traitement du signal (enfin en bcp

plus simple, mais pour te donner une idée)


bref :
- tu commences par définir une fenêtre de temps de genre ~15 ms, tu récupères un tableau de valeurs

qui correspondent à autant de samples que ce que tu peux récupérer en 15 ms (je ne sais pas à quelle

fréquence le son est samplé)

- tu fais une transformé de fourrier sur cet échantillon, ça te donne un tableau d'autant de points

qui te montre la répartition en fréquence. Je pense pas que tu ais besoin d'une lib pour faire ça, au

final le calcul est assez basique. (bon ton truc sera plus lent mais là je pense pas que le

traitement soit intensif)

- à partir de là tu affiches la transformé de fourier sur SFML tu va jamais t'en sortir

- tu t'enregistres en train de souffler et tu répères où sont les pics en fréquence. Avec du bol tu auras un truc qui sera relativement distinct des autres sons

- une fois que tu as défini à quoi ressemblait ton souffle "de référence" tu peux stocker sa transformé de fourrier dans ton programme et puis comparer chaque transformé captée via le micro avec ton truc de référence, si c'est suffisament proche -> c'est bon!

- là où ça devient encore plus complexe ton truc c'est qu'il faut détecter aussi le début / arrêt du souffle, donc une fois que tu as détecté le souffle sur une période d'échantillonage, tu dois dire à la prochaine on s'est arrété ou pas


bref y'a de quoi faire un bon sujet de stage...