IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques C++ Discussion :

Analyser flux audio du micro.


Sujet :

Bibliothèques C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Analyser flux audio du micro.
    Bonjour,

    Dans le cadre d'un projet, je cherche à analyser le volume sonore enregistré par un microphone, et de déclencher une alerte en fonction de ce même volume.
    Auriez vous des pistes de codes déjà réalisées ou de recherches ? Je développe sous Visual Studio 2005.

    Je vous remercie, et je continue mes propres recherches.

    @+

  2. #2
    Membre à l'essai
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    15
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2009
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Le son que tu enregistre avec un micro est tout simplement une donnee qui change avec le temp. Lorsque tu veux declencher une alerte en fonction du volume du son enregistre, il y a des choses qu'il faut savoir.

    Le son est en fait une vibration, (donc tu auras ton signal qui va varier un peu a la maniere d'une sinuosidal). Il faut donc que tu saches sur quelfrequence tu veux analyser : pour nos petites oreille humaine ca va de 4 a 15 Hz si je me souviens bien. Ensuite il ne faut pas oublier que la valeur du son est en decibel donc pas lineaire par rapport a la variation du signal (de memoire encore ca doit varier en logarithmique).

    Pour l'algorithme que tu veux develloper, je te conseille d'implementer un FFT qui va te donner le spectre du signal (que l'on peut parfois voir sur lecteur audio)

    Voila pour toi l'algorithm Cooley-Tukey pour faire une fft, ca marche niquel, et le code est bien commenter:
    http://www.christian-lambert.de/Mult...pp-source.html

    Bon courage

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Un point de vue plus "technique":
    en c++ la notion de "son" ou "audio" n'existe pas. Il va donc te falloir passer par une bibliothèque qui s'occupe de ça. Puisque tu es sous windows, tu peux utiliser directX, bien que je ne le conseille pas car c'est une énorme API. En revanche, il existe tout un tas de bibliothèques pour ça. OpenAL par exemple. Pourquoi pas la SFML?

    Ensuite, je ne suis pas certain qu'une fft soit nécessaire pour ce que tu veux faire. J'aurais même plutôt tendance à penser l'inverse: une fft fournit le spectre d'un son, qui donne l'intensité de chaque fréquence dans ce son. On n'a pas besoin de cette information. En revanche, la simple courbe temporelle "classique" devrait suffire, puisqu'elle nous donne directement l'intensité globale du son à un instant t.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    J'ai déjà entendu parler de SFML, je vais chercher dans ce sens.

    L'histoire de la FFT me semble bien compliqué par rapport au traitement minimaliste que je compte faire.

    Merci pour vos réponses.

    Au revoir.

  5. #5
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut
    Non le modele psychoacoutstique de l'oreille dit de 20hz à 15 Khz et non 15 hz.
    Ce que je ferais, je prendrais le son. Tu as alors des échantillons (numérique).
    Tu fais un DCT et non FFT (En effet la FFT pose le problème de la partie imaginaire, tu vas dnc perdre une partie de l'information dans tes calculs relatifs notemment à la phase de ton signal ).Une DCT te permets donc de palier à ce problème. Ensuite tu seras dans le domaine fréquentiel. Tu auras pour etre plus precis l'amplitude en fonction de la fréquence. Ensuite tu fais un seuil en fonction de ton amplitude.

    Ne te laisse pas impressionner par une DCT, surtout qu'il doit y avoir des li en C++ qui te font déjà le travail. Si tu ne peux vraiment pas faire une DCT, fait une FFT je pense que cela suffira dans ton cas. Ou sinon code toi même la FFT, c'est une intégrale d'exponentielle sur tes échantillons.

  6. #6
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut
    C'était une première piste, mais je pense que tu dois faire du temps reel avec tout ca. Or avec une FFT tu perds la dimension temporelle. Donc il ne faut pas regarder de ce cote.
    En revanche il faut que tu puisses calculer la puissance de ton son en temps réel.
    Niveau de bruit en pression
    Lp = 10 log( p/p_0)^2
    Ton capteur, (micro), va te donner une certaine tension qui va dependre d'une presstion. Tu recupere donc cette tension que tu injectes dans la formule et cette fois tu fais ton seuil.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Alors, je me suis mis à la librairie SFML.
    Il y a les méthodes suivantes qui permettent de récupérer dans un Int16 un tableau d'échantillons sonores :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sf::SoundBuffer Buffer;
    const sf::Int16* volume;
    size_t taille;
     
    volume = Buffer.GetSamples();
    taille = Buffer.GetSamplesCount();
    Mais je ne sais pas comment avancer, comment puis je exploiter ses données ? Avez vous une marche à suivre ?

    Merci d'avance !

Discussions similaires

  1. [OpenAL / Micro] Capture et écoute du flux audio
    Par walkixx dans le forum Multimédia
    Réponses: 0
    Dernier message: 09/12/2012, 10h26
  2. Flux audio WMP
    Par hiko-seijuro dans le forum MFC
    Réponses: 18
    Dernier message: 05/05/2006, 10h07
  3. Flux Audio
    Par getthematrix dans le forum MFC
    Réponses: 3
    Dernier message: 03/11/2005, 21h01
  4. Envoi d'un flux audio entre 2 PC
    Par TheDarkLewis dans le forum Windows
    Réponses: 2
    Dernier message: 30/08/2004, 02h02
  5. Acquerir un flux audio
    Par The Cyber Lewis dans le forum DirectX
    Réponses: 1
    Dernier message: 05/04/2004, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo