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

Windows Discussion :

Capture du microphone


Sujet :

Windows

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Capture du microphone
    Bonjour à tous!

    Voilà, j'aimerais savoir si DirectSound ou une autre API DirectX permettait de capturer un signal microphonique?
    En effet, je souhaiterais pouvoir traiter dans une application ce que dit l'utilisateur dans un micro.
    Sinon, est-ce qu'il existe une fonction de l'API Win32 qui permette cela ou une bibliothèque permettant la capture sous Windows autre que OpenAL?

    Merci d'avance.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    En Win32 il y a la vieille API multimedia (waveInOpen...):
    http://www.borg.com/~jglatt/tech/lowaud.htm
    http://www.codeproject.com/audio
    Mais a ta place j'essayerais de me tourner vers autre chose, genre DirectSound ou plutot une bibliotheque portable (de mémoire, y'en a des pas trop mal).

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    salut!

    merci pour ta réponse et tes liens. Je voulais savoir ce que tu entendais par "vieille" ? Obsolète en termes de performances, non compatible avec les nouvelles cartes sons ou juste implémentée il ya longtemps? Je suppose que cette API ne fait pas appel à l'accélération matérielle, cela est-il pénalisant pour mon application qui récupère un échantillon microphonique et qui lui applique différentes techniques de traitement du signal (annalyse spectrale, cepstrale, filtre ...) et n'a pas pour but de créer des effets, même pas de rejouer l'échantillon ?

    J'ai enfin trouvé une phrase me laissant penser qu'à l'aide de DirectSound, je pourrais effectuer une capture microphonique. Si tel est le cas, quelles peuvent être les limites pour un passage éventuel et futur sous Vista alors que j'implémente actuellement sous XP?

  4. #4
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    salut,

    elle marche très bien chez moi en tout cas, pour faire de la lecture de samples blocs / blocs en tout cas.

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    Elle est vieille car elle existe depuis le début de Windows, mais ca marche oui
    Dans Vista ils ont tout changé au niveau du son, mais concretement j'en sais pas plus. Mais ca devrait fonctionner sous Vista aussi je pense.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    salut!

    Petite question pour NiamorH qui utilise l'API Windows, comment gères-tu l'appel aux fonctions de capture ou de lecteur selon ton application? à l'aide de threads, de la liste des messages ou indépendamment de ces méthodes auquel cas pourrais-tu me montrer un exemple de code?
    Deuxièmement, quelle taille de buffer utilises-tu?
    Car dans mon programme de test de l'API je capture ma voix et je la rejoue avec des buffers de capture de taille 44100 qui est aussi la fréquence d'échantillonage de ma structure WAVEFORMATEX. Mais lorsque je change cette taille pour une taille plus petite, le son joué devient du bruit blanc??

    Bien sûr si quelqu'un d'autre peut aussi me renseigner qu'il n'hésite pas.

    Voilà, merci.

  7. #7
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    salut,

    tout d'abord je tiens a dire que j'ai seulement utilisé waveout et non wavein donc je n'ai pas vraiment réfléchi à une implementation pour la capture mais seulement pour la lecture.

    Pour la lecture, en gros, j'ai une class Sound Manager qui tourne dans un thread séparé. Je lui envoie regulierement un message "joue moi 10 buffers".

    Je fais comme ça car j'ai besoin de synchroniser mon son avec un affichage video. Si tu dois lire tout un morceau de musique jusqu'a la fin tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while (continuer)
    {
      ... 
      if (!encoreDesSamples())
        break;
      
      writeabuffer(nextBuffer());
    }
    et si tu as besoin de faire un stop tu n'as qu'à mettre le booleen continuer a false depuis un autre thread.

    Pour la taille d'un buffer, ça depend de ton implementation, mais il faut que celui-ci soit une puissance de deux je crois. Plus ton buffer est grand moins il y a de chances pour que le son soit coupé, haché. Le mieux est d'envoyer plusieurs buffers les uns après les autres sans attendre leur traitement par le systeme.

    A l'ouverture de waveoutopen, tu peux preciser l'action à faire en fin de traitement par le systeme de chaque buffer. Par exemple tu peux lui passer un handle vers un Event et le systeme fera un SetEvent des qu'il aura joué un buffer. Mais ce n'est pas l'idéal pour jouer un long morceau, il faut mieux alors demander l'appel d'une callback ou tu gere le nombre de buffers.

    Avant d'envoyer tes buffers tu dois faire appel a waveoutprepareheader et apres leur gestion de dois appeller waveoutunprepareheader.

    Essaye de trouver une source sur le net qui s'appelle rawaudio.c

    Si tu veux me montrer le code qui pose probleme n'hesite pas

  8. #8
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Voila un lien vers un tut.
    Je ne l'ai pas lu mais la source a télécharger est bien.

    http://www.insomniavisions.com/docum...rials/wave.php

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    merci beaucoup NiarmoH pour ta réponse, ton lien et ton temps!


    en fait, je suis surtout intéressé par la capture. mais bien sûr, quel meilleur test que la lecture des échantillons capturés. j'ai donc récupéré plusieurs sources que j'ai mixé pour tester l'API.
    Notamment deux, l'une d'un enregistreur avec interface graphique qui enregistre la capture dans un fichier .wav et une source qui joue la capture directement avec un petit temps de retard. Tout fonctionne bien jusqu'au moment où je veux changer la taille des buffers pour me ramener à l'application qui m'intéresse vraiment.
    J'essaierai de récupérer le code si tu penses pouvoir localiser le problème ou si un tel code t'intéresse tout simplement.
    En tout cas, j'ai pu voir que le performances sont moins bonne qu'OpenAL et surement que DirectSound que je n'arrive pas à tester complètement. L'application finale étant intégrée à un système critique, je n'utiliserai, à priori, pas cette API mais on pourra toujours échanger sur le sujet.

    encore merci.

  10. #10
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Bien sur, ça m'interresse. Et si tu as de l'experience avec OpenAL et DirectSound dis moi ce que tu en pense.

  11. #11
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Il semble que OpenAL utilise en fait mmsystem et core audio sous Mac :
    http://www.openal.org/platforms.html

    Donc ce n'est qu'une surcouche des APIs systeme à la différence d'OpenGL pour la video qui est plus bas niveau.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    effectivement, c'est une surcouche des APIs systèmes.
    Tout comme DirectSound est une surcouche de l'API windows que tu utilises, enfin je pense.
    L'amélioration notable est que les deux utilisent l'accélération matérielle. Une question que je me pose est : l'accélération matérielle intervient-elle au niveau de la manipulation basique (copie, calculs, etc) des buffers de capture et de lecture ou juste pour le calcul d'effets complexes etde gestion du son 3D?
    Deuxième point positif, la gestion de la capture ou de la lecture ne nécessite plus la gestion de threads ou de la file des messages Windows. Cette gestion est prise en charge par les fonctions des deux interfaces que sont OpenAL et DirectSound. Ce qui conduit à une grande clarté syntaxique et une prise en main très simplifiée pour OpenAL. Malheureusement je ne peux pas en dire autant pour DirectSound qui a une syntaxe lourde pouvant amener une certaine confusion :
    déclaration d'un objet, attribution d'une interface sur cet objet, manipulation de l'objet.
    Tu appliques cette séquence pour un objet de lecture ou de capture puis sur un objet buffer de lecture ou de capture.
    L'architecture d'OpenAL reposant sur trois concepts : le buffer, la source et l'écouteur, est je pense plus abordable. Il y a d'ailleurs un très bon tutoriel sur ce site.
    En tout cas je n'ai pas réussi pour l'instant à capturer ma voix et à la rejouer avec DirectSound. Bon il faut dire que je n'ai plus essayé depuis mon dernier message car j'ai une autre priorité en ce moment mais je vais devoir très vite y revenir.
    Le problème d'OpenAL est bien sur qu'elle n'est pas supportée par toutes les cartes.

  13. #13
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Voilà, c'est justement à ce tutoriel que je faisais référence. Vraiment bien fait et accessible.
    Bien joué lol.

  15. #15
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    salut, ça à l'air interressant cette lib, mais pour mon projet c'est trop tard j'ai déjà développé ma propre lib portable
    Elle me permet déjà de faire une synchronisation entre image et son, lire a l'envers, accéléré, depuis plusieurs sources différentes pas forcement au même taux d'échantillonage ni avec le même codage initial (décodage à la volée), réglage du volume, bref pas mal de trucs.

    A terme, d'autres formats que le wav seront supportés avec possibilité d'aller lire les fichiers directement sur disque, sans les charger en mémoire avant.

    Egalement des effets peuvent très facilement être ajoutés en sortie.

Discussions similaires

  1. Capture Microphone UNIQUEMENT
    Par dtcSearch dans le forum Ubuntu
    Réponses: 1
    Dernier message: 18/11/2010, 13h58
  2. [SDL] capture audio microphone
    Par grabriel dans le forum SDL
    Réponses: 0
    Dernier message: 01/09/2008, 11h59
  3. Réponses: 10
    Dernier message: 10/10/2003, 14h25
  4. Capture d image par webcam
    Par moimoimoi3x dans le forum C++Builder
    Réponses: 7
    Dernier message: 03/07/2003, 08h48
  5. Réponses: 3
    Dernier message: 01/11/2002, 14h30

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