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

DirectX Discussion :

problème de capture son avec Directshow


Sujet :

DirectX

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 2
    Points : 1
    Points
    1
    Par défaut problème de capture son avec Directshow
    Bonjour.

    Je cherche à capturer du son en DirectX9 (Visual C++6) et j'utilise un filtergraph de la forme suivante :



    C'est assez simple et mon problème concerne la configuration du Samplegrabber donc voici le détail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // Configuration du filtre SampleGrabber2
     
    	WAVEFORMATEX fluxAudio;
    	fluxAudio.wFormatTag = WAVE_FORMAT_PCM;
    	fluxAudio.nChannels = 1;
    	fluxAudio.nSamplesPerSec = 8000;
    	fluxAudio.nAvgBytesPerSec = 16000;
    	fluxAudio.nBlockAlign = 2;
    	fluxAudio.wBitsPerSample = 16;
    	fluxAudio.cbSize = 0;  // apparemment aucun effet
     
    	AM_MEDIA_TYPE mt2;
    	ZeroMemory(&mt2, sizeof(AM_MEDIA_TYPE));
    	mt2.majortype = MEDIATYPE_Audio;
    	mt2.subtype = MEDIASUBTYPE_PCM;
    	mt2.formattype = FORMAT_WaveFormatEx;
     
    	hr = pGrabber2->SetMediaType(&mt2);
    	if (FAILED(hr))
        {
            Msg(TEXT("Impossible de mettre à jour le type de média du sample grabber 2, hr=0x%x\r\n\r\n") 
                TEXT("Le programme va se terminer"), hr);
            pGrabberF2->Release();
            return hr;
        }
    J'utilise donc une structure WAVEFORMATEX qui devrait me capturer le son en 8000Hz 16bits mono or le son que j'obtiens (stocké dans un fichier avec le code ci-après) est en 44100Hz 16bits stéréo, et la moitié seulement est capturée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    long cbBufferAudio = 176400;
    char *pBufferAudio = new char[cbBufferAudio];
     
    while (!stopenvoi)
    {
            // On va chercher dans le buffer de capture la dernière trame son capturée.
    pGrabber2->GetCurrentBuffer(&cbBufferAudio,reinterpret_cast<long*>(pBufferAudio));
     
            // Ecriture d'une trame de son brut capturée pendant 1s dans "son_brut.raw"
    	// situé dans le même répertoire que applicap.exe
    	FILE *son_brut;
    	if ((son_brut=fopen("son_brut.raw","a"))!=NULL)
    	{
    		fwrite(pBufferAudio,176400,1,son_brut);
    		fclose(son_brut);
    	}
    	else
    	{
    		printf("Problem opening the file\n");
    	}
    ...
    Passons sur la gestion gourmande du fichier (que je vais corriger immédiatement !) ; d'après vous d'où pourrait provenir l'erreur ?

    Merci d'avance car après cette capture il faut que je traite le son pour le diffuser en mu-Law par sockets (d'où le while (!stopenvoi))...
    May the Force be with you.

  2. #2
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    C'est a ton code de faire les conversions de format necessaires. Les formats donnes aux filtres servent seulement a aider DShow a etablir les connections entre filtres et verifier qu'elles cont compatibles.
    Laurent -- http://jeux-directx.com/

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juin 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    OK merci je comprends mieux maintenant... il n'empêche que même sans définir le format je ne capture que la moitié du son par tranche d'une seconde (1/2 sec de son, 1/2 sec de "rien", 1/2 sec de son, 1/2 sec de "rien"...) en 44100-16-stereo. Le sampling reste donc cohérent avec ce que tu dis.
    May the Force be with you.

Discussions similaires

  1. [Audio]Problème de son avec carte TV Pinnacle
    Par arnaud_verlaine dans le forum Périphériques
    Réponses: 2
    Dernier message: 14/09/2006, 14h09
  2. Problème bizarre de son avec Linux et Fmod
    Par Drannor dans le forum Matériel
    Réponses: 1
    Dernier message: 30/07/2006, 14h25
  3. repetition de sons avec Directshow
    Par kouax dans le forum DirectX
    Réponses: 2
    Dernier message: 21/05/2006, 13h50
  4. Problème de son avec un TMediaplayer
    Par Jeannot Alpin dans le forum Composants VCL
    Réponses: 7
    Dernier message: 11/03/2006, 03h54
  5. Gros Problème avec DirectShow et la méthode RELEASE
    Par Olivier Delmotte dans le forum DirectX
    Réponses: 3
    Dernier message: 10/03/2003, 18h10

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