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 :

callback avec CALLBACK_WINDOW, waveOutOpen


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut callback avec CALLBACK_WINDOW, waveOutOpen
    Bonjour,

    Je suis en pleine réalisation d'un petit projet pour manipuler les fichiers wave. J'ai réussi à faire les fonctions nécessaires pour ouvrir le fichier et le lire avec les fonction waveOut... de l'API windows. J'ai maintenant un nouveau problème : j'ai mis en place une fonction de callback, mais elle ne s'exécute pas (le code me semble bon en comparant aux diverses sources que j'ai et la doc ne contredit pas ce code).

    in the class (into .h file) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public:		// User declarations
            __fastcall TForm1(TComponent* Owner);
            BEGIN_MESSAGE_MAP
                    MESSAGE_HANDLER(MM_WOM_DONE, TMessage, onWaveDone)
            END_MESSAGE_MAP(TForm)
    in the .cpp file :
    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
    void TForm1::onWaveDone(TMessage& msg)  // as a waveClose() function
    {
      // We only care about the WOM_DONE message.
      // When we get this message we know that the
      // sound has finished playing. We can then
      // unprepare the header and close the device.
    
      if (msg.Msg == WOM_DONE) {
        int Res = waveOutUnprepareHeader(projectWaveHandle, &projectWaveHeader, sizeof(WAVEHDR));
        Memo1->Lines->Add("Playback finished : header unprepared");
        CheckWaveError(Res);
        Res = waveOutClose(projectWaveHandle);
        Memo1->Lines->Add("Wave closed");
        CheckWaveError(Res);      
      }
    }
    Quand je lance waveOutOpen :
    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
    bool TForm1::openWave()
    {
    
            // Query the device and see if it can play
            // this wave format. If so, open the device.
            int Res = waveOutOpen(&projectWaveHandle, WAVE_MAPPER, &projectFormat,  0, 0, WAVE_FORMAT_QUERY);       
            Memo1->Lines->Add("Device checked");            
            CheckWaveError(Res);
            
            // we have to use a callback function when we play, to detect the end
            // CALLBACK_WINDOW tells Windows that we want any wave-out messages sent to our form's window procedure
            // so the form will treat this callback with onWaveDone()
            
            if(waveOutOpen(&projectWaveHandle, WAVE_MAPPER, &projectFormat, 0, 0, CALLBACK_WINDOW)!= MMSYSERR_NOERROR)
            {
                                                  return false;
            }
            return true;
    }
    enfin, la fonction waveOutWrite est exécutée juste après l'appel de la fonction openWave(). Je ne vois pas d'où ne viens pas l'exécution ??

    Des idées ??

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu ne passes pas le HWND de ta fenêtre à la fonction waveOutOpen().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Oui, c'est surement cela la réponse, mais comment je récupère le Handle de ma fenêtre principale ? Dans les codes sources dont je m'inspire, j'ai pour ce paramètre (le 4e de la fonction waveOutOpen) : MAKELONG(Handle, 0)
    Mais pas de trace de "Handle" dans le reste du fichier...

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu utilises une form Borland, donc ce n'est pas à moi qu'il faut demander cela.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    Réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    waveOutOpen(&projectWaveHandle, WAVE_MAPPER, &projectFormat, MAKELONG(GetActiveWindow(), 0), 0, CALLBACK_WINDOW)

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    J'en doute.

    Es-tu sûr que tu n'as pas une fonction (ou une propriété) Handle ou Hwnd dans la classe TForm1 ou sa classe mère?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fonction callback avec arguments
    Par YuGiOhJCJ dans le forum GTK+ avec C & C++
    Réponses: 12
    Dernier message: 12/04/2013, 08h42
  2. libsigc++ : attaché une callback avec argument
    Par tinram dans le forum Linux
    Réponses: 0
    Dernier message: 16/01/2009, 18h30
  3. Exécution simultanée de deux callback avec pause
    Par laurent.bras dans le forum MATLAB
    Réponses: 11
    Dernier message: 13/10/2008, 14h28
  4. callback avec plusieurs arguments
    Par Claiw dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 23/12/2006, 18h46
  5. Fonction callback avec arguments ?
    Par sorry60 dans le forum GTK+ avec C & C++
    Réponses: 39
    Dernier message: 07/11/2005, 10h41

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