Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| amélioration de la commande sound | |
| | Auteur | Message |
---|
bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: amélioration de la commande sound Ven 5 Juin 2015 - 18:08 | |
| Bonjour à tous, Je sais, cela a déjà été demandé, mais une commande comme SOUND_STOP N serait utile et éviterait de faire un DELETE N pour stopper le SOUND qui PLAY! Mais je crois que cela obligerait peut-être Jack à changer la commande PLAY N en SOUND_PLAY N, car dans la même optique, je verrais bien aussi une commande du genre SOUND_LOOP N qui permettrait de lire le son en boucle. Bon, cela fait un bon moment que je suis dessus pour trouver une solution à ce problème en évitant de passer par la dll KGF de Klaus, mais en utilisant les dll internes à Windows. Enfin, bref, après avoir dégotté un petit programme qui ne fonctionnait pas du tout au fin fond du forum, impossible de me souvenir où cela était ( ), et des jours à parcourir des sites parlant de dll et d'api Windows, (plusieurs boites de doliprane y sont passées aussi! ) j'ai réussi à faire fonctionner tout ça, avec un petit programme qui permet d'avoir une commande play, une commande loop et un commande stop pour les sons. Le revers, c'est que ça ne fonctionne qu'avec des fichiers wav et pas tous; donc on oublie les mp3 . Mais le principe est là! - Code:
-
dim res%,ad%,fg%,son$ label ouvrir,stopper,jouer,boucler,quitter border_small 0:height 0,59 button 1:caption 1,"open":on_click 1,ouvrir button 2:caption 2,"stop":on_click 2,stopper:left 2,width(1)+5 button 3:caption 3,"play":on_click 3,jouer :left 3,left(2)+width(2)+5 button 4:caption 4,"loop":on_click 4,boucler:left 4,left(3)+width(3)+5 on_close 0,quitter end
sub adresse() if file_exists(son$)=0 then exit_sub dll_on "kernel32.dll" ad%=adr(son$):res%=DLL_CALL3("RtlMoveMemory",adr(ad%),ad%,4) dll_off dll_on "winmm.dll" end_sub
ouvrir: if ad%>0 then dll_off ad%=0 open_dialog 5 filter 5,"fichiers sons|*.wav" son$=file_name$(5) if son$<>"_" then adresse() delete 5 return
stopper: if ad%=0 then return caption 0,"":fg%=0:res%=DLL_CALL2("sndPlaySoundA",fg%,fg%):return
jouer: if ad%=0 then return caption 0,son$:fg%=131072+16+1:res%=DLL_CALL2("sndPlaySoundA",ad%,fg%):return
boucler: if ad%=0 then return caption 0,son$:fg%=131072+16+8+1:res%=DLL_CALL2("sndPlaySoundA",ad%,fg%):return
quitter: if ad%>0 then dll_off terminate D'abord on utilise open pour chercher un fichier wave et puis on fait play ou loop et on stop quand on veut! A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: amélioration de la commande sound Ven 5 Juin 2015 - 19:09 | |
| Génial Bignono. Très simple d'utilisation et ça marche super bien. Le seul truc dommage c'est que ce soit limité au wav. Si tu trouves aussi la solution pour pouvoir lire les mp3, pouvoir les passer en boucle ou les arréter, ce serait interessant aussi. Le lecteur lit-il d'autres formats que mp3 ? | |
| | | jimx78
Nombre de messages : 241 Age : 33 Localisation : Yvelines Date d'inscription : 24/05/2010
| Sujet: Re: amélioration de la commande sound Ven 5 Juin 2015 - 21:31 | |
| c'est génial ton truc ! Je prend direct ! Je trouve dommage de jack ne s'occuppe pas d'ajouter ces commandes, play / stop / pause / boucle pour du son (oui play existe déjà) y a t'il une fonction pause ? Félicitation ! Moi je ne trouve pas que la limitation au wav me dérange pour un jeux. Il suffi de convertir le fichier son. Pour ceux qui veulent l'utiliser pour autre chose par contre ... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: amélioration de la commande sound Ven 5 Juin 2015 - 21:43 | |
| @jimx78: tu peux regarder les fonctions "Gestion du Windows Media Player" dans KGF.dll. Là, tu as tout ce qu'il faut: pause, bien sûr, mais également la gestion du volume, muet, etc.
Le pari de Bignono était de faire tout cela sans KGF.dll. Mais il utilise une DLL de Windows... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: amélioration de la commande sound Ven 5 Juin 2015 - 21:46 | |
| Tu as raisons c'est génial pour les bruitages par exemple, mais bon si tu veux mettre une musique assez longue en wav, ça fait tout de suite de gros fichiers Là actuellement avec cette nouvelle possibilité, je dirais cette utilisation pour les wav et lancer un player par la DLL de Klaus pour la musique. | |
| | | jimx78
Nombre de messages : 241 Age : 33 Localisation : Yvelines Date d'inscription : 24/05/2010
| Sujet: Re: amélioration de la commande sound Ven 5 Juin 2015 - 22:32 | |
| j'ai utiliser ta dll pour la premiere fois Klaus, et c'est un petit code à rajouter, mais un grand pas pour développer ! Par contre le lien de ta signature vers KGF.dll ne fonctionne pas, Panoramic été incapable de load la dll. Depuis je les pris directement sur ton mydrive, ça marche niquel. Autre : J'ai au moment du terminate une erreur de panoramic qui a cessé de fonctionner.. Je vais tester avec la fonction pour détruire la form 0, je les vus, mais je sais plus ou. Je ne crois pas que KGF gère les sons en boucles par contre, je vais voir EDIT : res% = dll_call1("LoopPlayer",x%) Trouver ! EDIT 2 : res% = dll_call1("KillProcessByHandle",handle(0)) trouver aussi REMARQUE : - Code:
-
quitter_programme: timer_off_all ' dll_off : ' Si je le met ici, la commande suivante ne marche pas. res% = dll_call1("KillProcessByHandle",handle(0)) wait 100 terminate return Quand je quitte, j'ai une erreur si je met cela, je decharge comment la dll ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: amélioration de la commande sound Ven 5 Juin 2015 - 23:49 | |
| - Citation :
- Par contre le lien de ta signature vers KGF.dll ne fonctionne pas, Panoramic été incapable de load la dll.
Bizarre. Si je clique sur cette icône dans ma signature, le téléchargement se passe bien... Réessaie ! - Citation :
- Quand je quitte, j'ai une erreur si je met cela, je decharge comment la dll ?
Il faut que tu termines comme ceci: - Code:
-
quitter_programme: timer_off_all res% = dll_call1("KillProcessByHandle",handle(0)) ' on n'arrivera jamais ici ! ' a fonction KillProcessByHandle ne retourne jamais ' puisqu'elle tue le processus !
KGF.dll est déchargée automatiquement, par KillProcessByHandle. Par contre, il est prudent de décharger via la fonction UnloadDLL toutes les DLLs dynamiques chargées par LoadDLL. C'est juste une précaution, une règle générale. En réalité, la fonction KillProcessByHandle décharge tout, absolument tout ce qui a été chargé par le processus qu'elle tue. Le petit code ci-dessus, tu le places idéalement dans la routine évènement ON_CLOSE de la form 0. Comme ça, tu es certain que ce sera appelé dans tous les cas, que tu fermes la form par l'action d'un bouton ou par un clic sur la croix rouge. Et ainsi, le programme termine proprement. Donc, ça veut dire que le label quitter_programme doit être appelée comme évènement ON_CLOSE. S'il s'agit de l'évènement ON_CLICK d'un bouton, il faut faire ceci: - Code:
-
label Close0, quitter_programme on_close0,Close0 button 1 : caption 1,"Quitter" : on_click 1,quitter_programme ... dll_on "KGF.dll" end
Close0: timer_off_all res% = dll_call1("KillProcessByHandle",handle(0)) ' on n'arrivera jamais ici ! ' a fonction KillProcessByHandle ne retourne jamais ' puisqu'elle tue le processus !
quitter_programme: terminate ' on n'arrivera jamais ici ! ' la commande Terminate provoque l'appel de l'évènement Close0 !
| |
| | | Contenu sponsorisé
| Sujet: Re: amélioration de la commande sound | |
| |
| | | | amélioration de la commande sound | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |