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

Langage Delphi Discussion :

[D6] Comment utiliser l'activeX TMediaPlayer dans un thread ?


Sujet :

Langage Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 667
    Points : 6 998
    Points
    6 998
    Par défaut [D6] Comment utiliser l'activeX TMediaPlayer dans un thread ?
    Comment utiliser l'activeX TMediaPlayer dans un thread ?
    Je cherche à lire des fichiers son (wav pour l'instant, mais ça pourait être n'importe quoi) en parallèle.

    J'ai donc écrit un petit thread :
    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
    procedure TThreadMediaPlayer.Execute;
    begin
       CoInitialize(nil);
       _WMP:= TWindowsMediaPlayer.Create(nil);
       _WMP.OnStatusChange := WMPStatusChange;
       _WMP.settings.volume := _nVolume;
       _WMP.URL := _szSon;
    //   _WMP.controls.play;
     
       while not Terminated do
          ;
     
       _WMP.OnStatusChange := nil;
       _WMP.controls.stop;
       _WMP.Free;
       _WMP := nil;
    end;
     
    procedure TThreadMediaPlayer.WMPStatusChange(Sender: TObject);
    begin
       // Si fin du fichier.
       if _WMP.ControlInterface.playState = wmppsMediaEnded then
          Terminate;
    end;
    Que j'appelle avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       _ThreadMediaPlayer := TThreadMediaPlayer.Create(True);
       _ThreadMediaPlayer._szSon := 'E:\blabla\MonFichier.wav';
       _ThreadMediaPlayer._nVolume := 30;
       _ThreadMediaPlayer.Resume;
    En pas à pas dans le thread, j'arrive bien jusqu'à la ligne d'affectation de _WMP.URL, mais le son n'est pas joué.

    Bien sûr, j'ai testé à part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       _WMP:= TWindowsMediaPlayer.Create(nil);
       try
          _WMP.settings.volume := 90;
          _WMP.URL := 'E:\blabla\MonFichier.wav';
    Et ca fonctionne bien.

    Qu'est ce que j'ai oublié ?

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 519
    Points : 25 037
    Points
    25 037
    Par défaut
    un peu brutal pour le proc !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       while not Terminated do
          ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       while not Terminated do
          sleep(0);
    tu as enlevé le Play ?
    En fait, as-tu besoin du boucle ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 667
    Points : 6 998
    Points
    6 998
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    un peu brutal pour le proc !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       while not Terminated do
          ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       while not Terminated do
          sleep(0);
    Ah bon ?
    Je vais tester ça ...

    Citation Envoyé par ShaiLeTroll Voir le message
    tu as enlevé le Play ?
    Oui. C'est l'affectation de le propriété URL qui déclenche la lecture. Je l'ai vérifié à part.

    Citation Envoyé par ShaiLeTroll Voir le message
    En fait, as-tu besoin du boucle ?
    Bin, pour savoir quand détruire proprement le MediaPlayer, non ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 519
    Points : 25 037
    Points
    25 037
    Par défaut
    Pourquoi tu n'utilises PlaySound directement (avec peut-être un download du fichier manuellement)

    Sinon, TWindowsMediaPlayer est-il lui-même asynchrone ?
    Voir si tu as aussi Wait et Notify dans TWindowsMediaPlayer comme dans TMediaPlayer
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 667
    Points : 6 998
    Points
    6 998
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Pourquoi tu n'utilises PlaySound directement (avec peut-être un download du fichier manuellement)
    C'est ce que je faisais justement. Mais, dès que je lui donne un nouveau wav, il coupe le précédent.

    Citation Envoyé par ShaiLeTroll Voir le message
    Sinon, TWindowsMediaPlayer est-il lui-même asynchrone ?
    Voir si tu as aussi Wait et Notify dans TWindowsMediaPlayer comme dans TMediaPlayer
    Je vais regarder ça ce soir aussi.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  6. #6
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 667
    Points : 6 998
    Points
    6 998
    Par défaut
    Bon j'ai testé le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while not Terminated do
          sleep(0);
    Ca ne change rien.

    Citation Envoyé par ShaiLeTroll Voir le message
    Pourquoi tu n'utilises PlaySound
    J'ai aussi testé de mettre PlaySound dans le thread (je faisais pas comme ça, jusqu'à présent): pas de son non plus.

    Citation Envoyé par ShaiLeTroll Voir le message
    Sinon, TWindowsMediaPlayer est-il lui-même asynchrone ?
    Si ta question c'est si on peut lancer deux MediaPlayer en même temps, la réponse est oui. Hors thread, j'ai lancé un wav de longue durée, et un autre court avec un deuxième MediaPlayer sans problème.

    Citation Envoyé par ShaiLeTroll Voir le message
    Voir si tu as aussi Wait et Notify dans TWindowsMediaPlayer comme dans TMediaPlayer
    C'est pas l'évènement WMPStatusChange que j'essais d'utiliser ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  7. #7
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 667
    Points : 6 998
    Points
    6 998
    Par défaut
    Bon, j'ai fini par laisser tomber les threads.
    J'ai contourné le problème en faisant une liste de TWindowsMediaPlayer, avec chacun un son. Et j'y fais appel quand j'en ai besoin.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/05/2006, 14h34
  2. [Langage]Comment utiliser une dll .NET dans VB6?
    Par BouB dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/04/2006, 14h20
  3. Comment utiliser le compte SYSTEM dans un fichier .bat
    Par DiabloZizi dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 02/03/2006, 14h45
  4. Comment utiliser des instructions SSE2 dans un code c++?
    Par alexIsBack dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 22/02/2006, 19h10

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