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

API, COM et SDKs Delphi Discussion :

Delphi et PlaySound


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Par défaut Delphi et PlaySound
    Yep...

    Quelqu'un sait-il comment jouer deux .WAV en même temps dans des objets non fenetrés...

    Merci

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    à ma connaissance, il faut passer par DirectSound (ou mixer les deux wav à la main )

    j'ai traité la question dans mon player MP3
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Par défaut
    Thx...

    En fait le TMediaPlayer le fait, pour une question de portabilité, je compte l'utiliser....

    Le problème, c'est qu'il a besoin d'être "affecté' à un Parent (TWinControl)...

    Mais voilà : mes objets sont des TGraphicObject, que j'implémente ensuite comme propriétés dans un TPaintBox... Or je peux avoir des TPaintBox "libres", c'est-à-dire utilisés en tant que buffer temporaires...

    L'un de mes objets est un TAudioObject, qui se charge de jouer un son (alias system, fichier sur disque ou ressource en mémoire)...

    Comment faire pour utiliser le TMediaPlayer ?

    .Create(nil), .Create(self).. Parent = Application.MainForm....Mais dans l'IDE, pas de mainform....

    merci

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    un TPaintBox libre ?! mais ça n'a aucun intéret

    d'autre part, es tu bien certain d'avoir compris la notion d'Owner et de Parent ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Par défaut
    Si tu veux, j'ai un TPainBox, et quand je click dessus, un autre TPaintbox s'affiche, mais à une niveau de détail supérieur...

    Toute modification dans le nouveau TPaintBox est répercutée sur le premier...

    Le Owner se charge de la libération, et le Parent de l'affichage ... Non ?

    Donc, je peux placer self dans le owner, mais quoi dans le Parent...?

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par metanil Voir le message
    Si tu veux, j'ai un TPainBox, et quand je click dessus, un autre TPaintbox s'affiche, mais à une niveau de détail supérieur...

    Toute modification dans le nouveau TPaintBox est répercutée sur le premier...
    j'ai rien compris

    Citation Envoyé par metanil Voir le message
    Le Owner se charge de la libération, et le Parent de l'affichage ... Non ?
    on peut dire ça

    Citation Envoyé par metanil Voir le message
    Donc, je peux placer self dans le owner, mais quoi dans le Parent...?
    c'est qui Self ?

    dans Parent, on met le parent visuel Quand un bouton est sur une fiche, c'est la fiche son parent, s'il est sur un Panel, c'est le panel son parent
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Par défaut
    OK OK OK

    Prends un TPaintBox, dessine dessus...

    Maintenant, à chaque point dessiné, affectes un object TPaintbox... Chaque point est devenu l'image d'un autre TPaintBox...Tu doubles-click sur un point, et tu obtiens un autre TPaintBox...

    Si tu zoom sur le TPaintbox principal, les points grossissent... Dans mon prog, t peux te rendre compte que chaque point est l'image d'un sous-élément... Un peu comme une mosaïque d'écrans.... Chaque chaîne est un point...

    Ainsi, le Owner de la seconde TPaintBox est la première TPaintBox, et son Parent, la fiche en cours...seulement si j'ai une fiche en cours...!

    J'ai associé à quelques évènements (sélection de l'un des objets internes à la TPaintBox, entrée de la souris, sortie de la souris;...) des évènements sonores (jouer un wav, ou une ressource)... Si je veux utiliser le TMediaPlayer, il me faut une fiche en cours...

    Je n'en ai pas toujours !

    En effet, parfois, je ne fais que construire le graph de la TPaintBox, mais je ne l'affiche pas. Je n'en tire que le TBitmap associé, qui peut me servir à des comparaisons statistiques (cf : "la comparaison de deux images").

    Lors de la construction d'une telle image, je souhaite associer un son, que j'aurais aimé être joué par le TMediaPlayer...Mais la TPaintbox qui construit l'image n'a pas de Parent (elle a bien comme Owner la TPaintBox principale)...

    Comment faire...

  8. #8
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par metanil Voir le message
    OK OK OK

    Prends un TPaintBox, dessine dessus...
    NOK NOK NOK

    on ne dessine pas SUR un PaintBox, mais AVEC, la nuance est de taille !
    AVEC un PaintBox on dessin SUR son Parent !

    le paintbox n'est qu'une boite vide qui permet de délimiter une zone sur son parent, c'est tout.

    Citation Envoyé par metanil Voir le message
    Maintenant, à chaque point dessiné, affectes un object TPaintbox... Chaque point est devenu l'image d'un autre TPaintBox...Tu doubles-click sur un point, et tu obtiens un autre TPaintBox...

    Si tu zoom sur le TPaintbox principal, les points grossissent... Dans mon prog, t peux te rendre compte que chaque point est l'image d'un sous-élément... Un peu comme une mosaïque d'écrans.... Chaque chaîne est un point...

    Ainsi, le Owner de la seconde TPaintBox est la première TPaintBox, et son Parent, la fiche en cours...seulement si j'ai une fiche en cours...!
    je ne comprend pas bien ou tu veux en venir avec ça

    Citation Envoyé par metanil Voir le message
    J'ai associé à quelques évènements (sélection de l'un des objets internes à la TPaintBox, entrée de la souris, sortie de la souris;...) des évènements sonores (jouer un wav, ou une ressource)... Si je veux utiliser le TMediaPlayer, il me faut une fiche en cours...

    Je n'en ai pas toujours !
    euh...ta souris elle se balade ou exactement si tu n'as pas de fiche ?!

    Citation Envoyé par metanil Voir le message
    En effet, parfois, je ne fais que construire le graph de la TPaintBox, mais je ne l'affiche pas. Je n'en tire que le TBitmap associé, qui peut me servir à des comparaisons statistiques (cf : "la comparaison de deux images").
    Les PaintBox n'ont pas de bitmap associé ...

    Citation Envoyé par metanil Voir le message
    Lors de la construction d'une telle image, je souhaite associer un son, que j'aurais aimé être joué par le TMediaPlayer...Mais la TPaintbox qui construit l'image n'a pas de Parent (elle a bien comme Owner la TPaintBox principale)...
    Comment faire...
    ben le owner serait la PaintBox et le Parent la fiche principale...je vois pas où est ton problème
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Par défaut
    Dialogue de sourd s'il en est....

    * Le TpaintBox est pourvu d'un TCanvas....
    * On peut dessiner sur un TPaintbox sans l'afficher (ni utiliser Visible)...
    * L'utilisation de propriété me permets d'associer un TBitmap à une TPaintbox.. En fait il s'agit d'un TZCanvas, qui contient un TBitmap et une liste de descripteurs 3D (utilisation d'un ZBuffer) associé à chaque (x,y). Ce qui permets en un instant de savoir (x,y) <-> (x,y,z)...

    --> ceci permets d'avoir à sa disposition un écran graphique (tel que le propose InitGraph en Turbo Pascal ou Turbo C++), et de répondre aux différents messages de la souris...Ainsi seul les gestionnaires d'affichage et d'entrée souris sont dépendants...

    * Une application en Batch qui se veut portable DOIT pouvoir s'executer sans Fiche principale...

    * Les évènements que j'ai déclaré sont en effet, pour certains, tributaire du déplacement de la souris sur l'écran, mais pas forcément sur un TForm : l'affichage d'un TCanvas sur le bureau Windows est parfois plus efficace que l'instanciation d'une forme transparente maximized, sans border contenant un TPaintBox......

    Ceci dit la plupart des évènements sont de l'ordre : ObjectCreated, ObjectDestroyed, ObjectStateIs.. Certains de ces objets sont simplement des Threads...Et je souhaite les ponctuer de sons (comme le ping d'un radar, doublé par le bip bip de ses balises)....

    J'utilise très peu de spécificité Delphi - Windows, mais le gestionnaire multimédia l'est... ! Sauf le TMediaPlayer, qui est disponible sous Linux....et qui gère en natif l'overlay que permets DirectSound... Sauf que je dois avoir un TForm !

    Je tiens à ta disposition le source si ça te dit...

    Ma question subsiste... comment jouer plusieurs sons avec des TMediaPlayer, mais sans TForm, même invisible !?

  10. #10
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par metanil Voir le message
    Dialogue de sourd s'il en est....

    * Le TpaintBox est pourvu d'un TCanvas....
    * On peut dessiner sur un TPaintbox sans l'afficher (ni utiliser Visible)...
    on ne peux pas dessiner sur un TPaintBox qui n'a pas de parent pour les raisons que j'ai expliqué plus haut, la visibilité est secondaire.

    Citation Envoyé par metanil Voir le message
    * L'utilisation de propriété me permets d'associer un TBitmap à une TPaintbox.. En fait il s'agit d'un TZCanvas, qui contient un TBitmap et une liste de descripteurs 3D (utilisation d'un ZBuffer) associé à chaque (x,y). Ce qui permets en un instant de savoir (x,y) <-> (x,y,z)...
    je ne connais pas TZCanvas, mais TPaintBox a un TControlCanvas comme tous les dérivés de TGraphicControl, pas un TZCanvas

    Citation Envoyé par metanil Voir le message
    --> ceci permets d'avoir à sa disposition un écran graphique (tel que le propose InitGraph en Turbo Pascal ou Turbo C++), et de répondre aux différents messages de la souris...Ainsi seul les gestionnaires d'affichage et d'entrée souris sont dépendants...

    * Une application en Batch qui se veut portable DOIT pouvoir s'executer sans Fiche principale...

    * Les évènements que j'ai déclaré sont en effet, pour certains, tributaire du déplacement de la souris sur l'écran, mais pas forcément sur un TForm : l'affichage d'un TCanvas sur le bureau Windows est parfois plus efficace que l'instanciation d'une forme transparente maximized, sans border contenant un TPaintBox......
    c'est sur qu'on peut toujours programmer comme un cochon

    mais TCanvas ne permet que de donner des ordres graphiques à ce qui est derrière. Tu peux en effet coller un HDC du bureau dans le Handle d'un canevas pour dessiner sur l'écran...mais je vois pas le rapport avec le reste.

    Citation Envoyé par metanil Voir le message
    Ceci dit la plupart des évènements sont de l'ordre : ObjectCreated, ObjectDestroyed, ObjectStateIs.. Certains de ces objets sont simplement des Threads...Et je souhaite les ponctuer de sons (comme le ping d'un radar, doublé par le bip bip de ses balises)....
    l'idée d'associer des événements sonores à des événements non visibles est surprenante, mais pourquoi pas....hum..mais je commence à comprendre, c'est visible à l'écran parceque tu dessines directement sur le bureau non ?

    Citation Envoyé par metanil Voir le message
    J'utilise très peu de spécificité Delphi - Windows, mais le gestionnaire multimédia l'est... ! Sauf le TMediaPlayer, qui est disponible sous Linux....et qui gère en natif l'overlay que permets DirectSound... Sauf que je dois avoir un TForm !
    tu utilises quoi pour compiler sous Linux ?

    Citation Envoyé par metanil Voir le message
    Je tiens à ta disposition le source si ça te dit...

    Ma question subsiste... comment jouer plusieurs sons avec des TMediaPlayer, mais sans TForm, même invisible !?
    sous Windows, j'aurais tendance à proposer un CreateParented()
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Par défaut
    Cessez le feu, le problème est résolu :

    En effet, CreateParented est la solution.

    En le combinant avec GetDesktopWindow, on obtient bien un controle sans fenêtre, et pourtant utilisable... Ne pas oublier de se charger de sa libération avec Free :
    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
     
    constructor
    _player := TMEdiaplayer.Createparented(Getdesktopwindow())
     
    procedure
    with _player
           do begin
                       filename := ......WAV/.MP3/.WMA/.WMV/.MPEG....
                       open;
                       play;
                       wait := false;
               end;
     
    destructor :
    _player.close;
    _player.free;
    Maintenant, j'ai bien des waves/ mp3 "superposables"....en instanciant autant de TMediaplayer que de sons à jouer....et en positionnant Wait à False pour chacun d'entre eux...

    * La bibliothèque que j'écris se veut être une base pour de futures applications C++... L'utilisation de Kylix comme compilo Linux, est à prévoir...

    * Le TZCanvas est de mon cru, il se charge d'allouer un tableau dynamique [paintbox.height, paintbox.width] de TZPoint (record (x,y); (x,y,z); zobject:tobject), ce qui permets, via un habile changement de repère une visualisation de la projection d'un espace 3D sur un espace 2D... Intégré comme Property dans un TPaintBox, lié dans le Paint, on obtient (moyennant quelques subtilités), des temps d'affichage proches de DirectX...mais sans DirectX... Il est dans des environnement comme OpenGL nommé "World" si
    mes souvenirs sont bons... Je n'utilise en fait que la fonction Pixels[,] d'un TBitmap que je dessine dans le TPaintBox... Ainsi, seule ce tableau est spécifique à Windows (à la VCL pus exactement)... Son portage est aisé....

    * associer des évènements sonores peut être primordial lors d'un traitement de signal....

    *
    Turbo C++ et Turbo Pascal sont les deux plus beaux environnements que la micro informatique ait connu... Qui te permets de supposer que ses utilisateurs en sont les cochons des MSVC et autres Visual.... ?

    De part ton aide, et au vu de la résolution de ce problème, je me tiens à ta disposition pour en discuter (ou d'autres choses) via MSN ou mails

    metanil@hotmail.com

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Par défaut
    oups !

    en fait c'est un mauvais calcul que de jouer avec les Parent et autres Owner...

    Voici la bonne réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    _command := 'Open';
    _run := 'mplayer2';
    _parameters := '/play /close "' + self._diskfile.FileName + '"';
     
    ShellAPI.ShellExecute(Application.Handle, PAnsiChar(_command), PAnsiChar(_run), PAnsiChar(_parameters), PAnsiChar(''), SW_SHOWNOACTIVATE);
    notez le param 'CLOSE'


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

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 21h09
  2. Réponses: 1
    Dernier message: 13/05/2002, 10h19
  3. [Kylix] Migration delphi -> kylix
    Par Christian dans le forum EDI
    Réponses: 1
    Dernier message: 03/04/2002, 23h50
  4. Réponses: 4
    Dernier message: 27/03/2002, 12h03
  5. Réponses: 2
    Dernier message: 21/03/2002, 00h01

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