|
| Ajouter un délais sur une loop Ambient Sound | |
| | Auteur | Message |
---|
CookiewooD Adepte de la Grande Tasse Bleue
Nombre de messages : 54
Age : 35
Localisation : Gard
Date d'inscription : 18/09/2018
| Sujet: Ajouter un délais sur une loop Ambient Sound Ven 2 Nov 2018 - 15:22 | |
| Bonjour Ça y est, je passe à l'habillage sonore ! Je suis allée lire le Tuto de Crazy legs pour commencer, il est top Cependant, je ne suis pas bien sur de bien comprendre encore le système des Audio Channels. J'ai l'impression que c'est un moyen efficace de jouer plusieurs ambient sound en même temps, avec différents niveau de priorité et même de pouvoir, par exemple, donner des coordonnées X et Y au son pour qu'on ait l'impression que le son émane d'un coin en particulier. Comme ceci qui marche très bien : - Code:
-
AudioChannel* chann1 = aFlag.Play(eAudioPriorityNormal, eRepeat); chann1.SetRoomLocation(400, 60); Mon problème: J'ai un ambient sound de "mouettes" qui piaillent, afin d'optimiser le poids j'ai pris un extrait assez court (4 sec) que je fait boucler, aucun soucis la dedans. Ce pendant, je trouve que les boucle s'enchaine trop vite, immédiatement les unes après les autres. J'aimerai donner au son "mouette" un "délais" de quelques secondes avant que la loop n’enchaîne avec la suivante, parceque là, les mouettes me cassent les oreilles. - Code:
-
AudioChannel* chann1 = aMouettes.Play(eAudioPriorityNormal, eRepeat); chann1.???? ; Je retourne le manuel dans tout les sens mais je bloque... Si vous avez connaissance d'un autre tuto complet sur les Audio Channel qui m'aurait échappé, je prends Merci d'avance |
| | | valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Ajouter un délais sur une loop Ambient Sound Ven 2 Nov 2018 - 15:56 | |
| Bonjour, @CookiewooD. Je vois que tu avances bien ! Voici un exemple de ce que tu peux faire. Dans le script de ta room : - Code:
-
function room_Load() { SetTimer(1, 400); }
function room_RepExec() { if (IsTimerExpired(1)){ aMouettes.Play(); SetTimer(1, 400); } }
Cela aura pour effet de lancer un chronomètre d'une durée de 10 secondes au chargement de la pièce, puis une fois les 10 secondes écoulées, cela jouera le son aMouettes et relancera le chronomètre pour recommencer la boucle. Tu peux bien sûr modifier le délai à ta guise, mais aussi le faire varier pour éviter un effet de régularité pas très naturel, par exemple en alternant entre deux valeurs différentes à chaque cycle, ou mieux, on définissant la durée au hasard parmi plusieurs valeurs. Comme d'habitude si tu as besoin de plus d'indications, n'hésite pas. Edit : - CookiewooD a écrit:
- Je retourne le manuel dans tout les sens mais je bloque...
Si vous avez connaissance d'un autre tuto complet sur les Audio Channel qui m'aurait échappé, je prends Es-tu allée voir cette page ? Sinon il y a les pages répertoriant les fonctions et propriétés des AudioClips et des AudioChannels mais si tu as retourné le manuel dans tous les sens tu dois connaître ces deux dernières par cœur. Sinon tu peux essayer de nous expliquer ce que tu ne comprends pas bien, si c'est quelque chose qui manque je ne serais pas contre en faire un tuto vidéo. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
| | | CookiewooD Adepte de la Grande Tasse Bleue
Nombre de messages : 54
Age : 35
Localisation : Gard
Date d'inscription : 18/09/2018
| Sujet: Re: Ajouter un délais sur une loop Ambient Sound Ven 2 Nov 2018 - 17:37 | |
| Hello Valoulef ! merci ! J'avais déjà programmé un timer dans cette room en plus... pour qu'un perso prononce des phrases aléatoires... la solution était donc sous mon nez. Un grand merci. Autre question toujours concernant les Audio Channels, ç'est tout con mais je n'arrive pas à stop l'audio channel d'une room sur l'autre ? Je m'explique, lorsque je set un audiochannel dans une room et que je quitte cette room, le son ne s'arrête pas dans la room suivante et je n'arrive pas a trouver la méthode pour la stopper proprement. Déjà, je place mon Audiochannel dans le room load ou selon besoin room after _FadeIn, mais j'ai vu plusieurs personnes le mettre dans le _repexec de la room. Quelle est la meilleure option ? Le tuto video serait top mais ne t'embête pas trop non plus hein Encore merci^^ |
| | | valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Ajouter un délais sur une loop Ambient Sound Ven 2 Nov 2018 - 19:38 | |
| D'abord il faut bien faire la distinction entre AudioClip et AudioChannel (canal) où AudioClip concerne les fichiers audio qui seront lus, et AudioChannel concerne les pistes audio gérées par AGS. C'est un peu comme si tu disposais d'une collection de CD et que tu avais plusieurs chaînes hi-fi pour les lire. Tu peux mettre plusieurs CD en même temps (un par chaîne hi-fi), et si tu veux par exemple modifier le volume, tu agiras sur le bouton de volume de la chaîne hi-fi concernée et pas directement sur le CD qui se trouve à l'intérieur. Le CD correspond au clip, et la chaîne hi-fi correspond au canal. Désolé si jamais j'enfonce des portes ouvertes, je ne sais pas si cette précision était nécessaire mais si je la fait c'est que je m'étais un peu emmêlé les pinceaux avec ça au début, on ne sait jamais si ça peut permettre d'y voir plus clair...
Lorsque tu veux simplement lancer ou stopper un clip audio, et si tu n'as pas de modification à faire sur l'audio par ailleurs, tu n'as pas nécessairement besoin d'agir sur le canal. Tu peux simplement utiliser les commande aClip.Play() ou aClip.Stop(). Ça ne change pas grand chose, c'est juste un poil plus économique en code.
En ce qui concerne ta question, tu as juste à créer un event room_leave() dans ta room, et dans la fonction correspondante tu stoppe le clip ou le canal, selon tes besoins (en l'occurrence plutôt le clip, je pense), et le son s'arrêtera quand le joueur quittera la pièce. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
| | | CookiewooD Adepte de la Grande Tasse Bleue
Nombre de messages : 54
Age : 35
Localisation : Gard
Date d'inscription : 18/09/2018
| Sujet: Re: Ajouter un délais sur une loop Ambient Sound Sam 3 Nov 2018 - 10:44 | |
| Crystal clear tout ça Je viens de terminer l'habillage sonore de la partie 1 en moins d'une heure grâce à toi <3 Par contre, c'est étrange, mais quand je met certains sons dans le room_repexe, le son est déformé et bizarre, en le mettant dans room afterfade in, le son redevient normal^^ Cette alternative me convient bien mais je trouve ça étrange quand même Milles mercis Valou |
| | | CookiewooD Adepte de la Grande Tasse Bleue
Nombre de messages : 54
Age : 35
Localisation : Gard
Date d'inscription : 18/09/2018
| Sujet: Re: Ajouter un délais sur une loop Ambient Sound Sam 3 Nov 2018 - 12:36 | |
| Une dernière petite question... Si je veux que la musique soit la même dans 3 rooms sans qu'elle ne reprenne du début à chaque fois (dans mon cas, la 2,3,4) je dois faire quelque chose qui ressemble à ça dans le global script ou je fais complètement fausse route ? - Code:
-
function repeatedly_execute() { if (player.Room > = 2 && player.Room < = 4) { AudioChannel* chann1 = aExte_part_1.Play(eAudioPriorityHigh, eRepeat); } |
| | | valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Ajouter un délais sur une loop Ambient Sound Sam 3 Nov 2018 - 21:44 | |
| - CookiewooD a écrit:
Par contre, c'est étrange, mais quand je met certains sons dans le room_repexe, le son est déformé et bizarre, en le mettant dans room afterfade in, le son redevient normal^^ Attention, la commande aClip.play() démarre le morceau depuis le début, donc si elle est appelée 40 fois par seconde, le morceau recommencera en boucle et tu devrais obtenir une espèce de bruit de tronçonneuse (enfin en plus régulier). Dans mon exemple avec les mouettes, ça ne pose pas de problème s'il s'agit d'un bref son, car la commande n'est appelée que toutes les 10 secondes. Mais avec un morceau de musique, il faut s'assurer que le morceau n'est pas déjà en train d'être joué. Ce n'est pas le cas dans le bout de code que tu donnes ici. Le problème c'est qu'il n'y a pas de fonction prédéfinie dans AGS pour vérifier si un clip précis est en train d'être joué sur n'importe quel canal. J'avais oublié ça et j'ai retrouvé la solution en remettant le nez dans le script de mon jeu (maintenant je me souviens que c'est là dessus que je m'étais emmêlé les pinceaux). Bref, s'il n'y a pas de fonction, il n'y a plus qu'à la créer soi-même. Dans le Global_Script.asc : - Code:
-
AudioChannel* IsPlaying(this AudioClip*) { AudioChannel* channel; int i = 0; while (i < System.AudioChannelCount) { channel = System.AudioChannels[i]; if (channel.PlayingClip != null && channel.PlayingClip == this) return channel; i++; } return null; } Donc en gros, avec ce code, quand la fonction est appelée, on vérifie sur chacun des canaux si le clip audio voulu est joué, si c'est le cas, alors la fonction renvoie le numéro du canal en question, sinon, elle renvoie null. Quand tu crées une nouvelle fonction dans ton Global_Script.asc, il faut l'importer dans le Global_Script.ash ("Edit Header") afin de pouvoir l'utiliser dans tous les scripts, comme ceci : - Code:
-
import AudioChannel* IsPlaying(this AudioClip*); Maintenant qu'on a fait ça, la fonction est utilisable sous la forme aClip.IsPlaying(). On peut donc mettre à jour le code du repeatedly_execute : - Code:
-
function repeatedly_execute() { if (player.Room >= 2 && player.Room <= 4){ //Attention, pas d'espace dans les opérateurs : ">=" et non "> =" if aExte_part_1.IsPlaying() == null){ //Si le clip n'est actuellement joué sur aucun des canaux... AudioChannel* chann1 = aExte_part_1.Play(eAudioPriorityHigh, eRepeat); //...alors on le lance } } else if (aExte_part_1.IsPlaying() != null) aExte_part_1.Stop(); //Si on n'est pas dans une de ces pièces et que le clip est joué, alors on l'arrête. } Si tu applique ça, alors normalement la musique se lancera au moment d'entrer dans une des 3 pièces, ne s’interrompra pas tant que tu circuleras entre ces 3 pièces, et elle se coupera au moment ou tu entreras dans une autre pièce que celles-ci (après le fondu). Si jamais tu souhaite que la musique s'arrête avant le fondu, tu devras placer la la dernière ligne dans la fonction room_load de toutes les pièces adjacentes. Par contre, quand tu retourneras dans une de ces 3 pièces après les avoir quitté, la musique reprendra depuis le début. Ça correspond à ce que tu veux ? PS : Personnellement j'avais aussi mis un système de fade out parce que ça ne me plaisait pas que les musiques s'arrêtent brutalement. Ma solution n'était pas forcément optimale mais si tu as besoin je pourrai t'indiquer comment faire. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Ajouter un délais sur une loop Ambient Sound Dim 4 Nov 2018 - 16:03 | |
| S'il est question d'exécuter du script à l'entrée dans n'importe quelle pièce il est peut-être judicieux d'utiliser on_event plutôt que repeatedly_execute, comme ça : - Code:
-
function on_event (EventType evenement, int donnees) { if (evenement == eEventEnterRoomBeforeFadein) { if (donnees >= 2 && donnees <= 4){ if (aExte_part_1.IsPlaying() == null) //Si le clip n'est actuellement joué sur aucun des canaux... aExte_part_1.Play(eAudioPriorityHigh, eRepeat); //...alors on le lance } else if (aExte_part_1.IsPlaying() != null) aExte_part_1.Stop(); //Si on n'est pas dans une de ces pièces et que le clip est joué, alors on l'arrête. } } (Notez que j'ai ajouté une parenthèse ouvrante qui s'était fait la belle dans le code de valoulef, et omis la définition de chann1 qui était superflue puisque la variable n'était pas manipulée plus loin dans le if) _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
| | | valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Ajouter un délais sur une loop Ambient Sound Dim 4 Nov 2018 - 17:23 | |
| Merci pour cette relecture attentive, je ne connaissais pas bien la fonction on_event qui peut être vraiment utile. Et en effet, je n'avais pas pensé au fait qu'on ne pourrait pas récupérer la valeur du pointeur chann1 ailleurs, donc si @CookiewooD a besoin de modifier quelque chose dans la musique en cours de route (par exemple pour changer le volume) il faudra faire quelque chose comme ça à l'endroit voulu : - Code:
-
if (aExte_part_1.Isplaying() != null){ AudioChannel* chann1 = aExte_part_1.IsPlaying(); chann1.Volume = 50; } _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
| | | CookiewooD Adepte de la Grande Tasse Bleue
Nombre de messages : 54
Age : 35
Localisation : Gard
Date d'inscription : 18/09/2018
| Sujet: Re: Ajouter un délais sur une loop Ambient Sound Lun 5 Nov 2018 - 7:47 | |
| Hello all ! Merci, vous êtes vraiment super efficace ! Merci pour les petites corrections et précisions Kitai et Valou Je suis super contente du résultat, c'est vraiment top <3 En plus, j'ai tout compris et pas juste recopié bêtement vos lignes. Si ce fofo n'existait pas, mon petit jeu n'aurait pas vu le jour aussi vite, je vous dois beaucoup ! |
| | | Contenu sponsorisé
| Sujet: Re: Ajouter un délais sur une loop Ambient Sound | |
| |
| | | | Ajouter un délais sur une loop Ambient Sound | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |