Yep...
Quelqu'un sait-il comment jouer deux .WAV en même temps dans des objets non fenetrés...
Merci
Version imprimable
Yep...
Quelqu'un sait-il comment jouer deux .WAV en même temps dans des objets non fenetrés...
Merci
à ma connaissance, il faut passer par DirectSound (ou mixer les deux wav à la main :D)
j'ai traité la question dans mon player MP3
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
un TPaintBox libre ?! mais ça n'a aucun intéret :D
d'autre part, es tu bien certain d'avoir compris la notion d'Owner et de Parent ?
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...?
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...
NOK NOK NOK :D
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.
je ne comprend pas bien ou tu veux en venir avec ça
euh...ta souris elle se balade ou exactement si tu n'as pas de fiche ?!
Les PaintBox n'ont pas de bitmap associé ...
ben le owner serait la PaintBox et le Parent la fiche principale...je vois pas où est ton problème :D
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 !?
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.
je ne connais pas TZCanvas, mais TPaintBox a un TControlCanvas comme tous les dérivés de TGraphicControl, pas un TZCanvas :)
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.
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 ?
tu utilises quoi pour compiler sous Linux ?
sous Windows, j'aurais tendance à proposer un CreateParented() :D
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 :
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...Code:
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;
* 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....
* :arf:
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:salut:
oups !
en fait c'est un mauvais calcul que de jouer avec les Parent et autres Owner...
Voici la bonne réponse :
notez le param 'CLOSE'Code:
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);
:yaisse2: