Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -40%
Tefal Ingenio Emotion – Batterie de cuisine 10 ...
Voir le deal
59.99 €

 

 Faire un fade out sur une musique

Aller en bas 
2 participants
AuteurMessage
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Faire un fade out sur une musique Empty
MessageSujet: Faire un fade out sur une musique   Faire un fade out sur une musique EmptyMer 5 Juil 2023 - 8:14

Hello ! Quelqu'un saurait comment baisser le volume progressivement d'une musique pour la faire disparaitre ? J'ai trouvé quelques réponses en anglais, mais je n'ai pas réussi à le faire.
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique EmptyMer 5 Juil 2023 - 20:51

Voici la fonction que j'avais faite pour mon jeu. Elle a comme inconvénient principal d'être bloquante, donc il faudra attendre que la musique soit coupée pour exécuter d'autre code. Mais ça fonctionne bien par exemple pour couper la musique en transition de pièce. On peut sans doute faire mieux, mais je te la propose en l'état pour le moment :

Code:
function StopFadeOut(this AudioClip*, int VitesseFadeOut, int VolumeStop){
  AudioChannel *canal = this.IsPlaying();
  if (canal != null){
    while (canal.PlayingClip == this){
      if (canal.Volume > VitesseFadeOut) canal.Volume -= VitesseFadeOut;
      Wait(1);
      if ((canal.Volume <= VitesseFadeOut) || (canal.Volume <= VolumeStop)) canal.Stop();
    }
  }
}
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique EmptyMer 5 Juil 2023 - 21:15

Hello, merci pour ta réponse. Même si ça bloque, ça peut être déjà bien. Par contre, ce sont des codes que je ne connais pas, pourrais tu être plus précis sur ce que dois mettre ou pas. Pourquoi y a t-il des mots en bleu ? "This audioclip", j'imagine que je mets le nom de mon audio. "Int vitessefadeout", int VolumeStop" par exemple, je mets quoi précisément ?
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique EmptyVen 7 Juil 2023 - 22:07

Il s'agit d'une fonction personnalisée que tu pourras utiliser ensuite comme n'importe quelle fonction dans ton script.

Il faut d'abord que tu copie tel quel le code que je t'ai donné dans le GlobalScript (.asc), puis que tu importe la fonction ainsi créée dans le header du GlobalScript (.ash) de la manière suivante :
Code:
import function StopFadeOut(this AudioClip*, int VitesseFadeOut, int VolumeStop = 0);

Ensuite, à l'endroit où tu veux couper la musique avec un Fade Out, tu entre la fonction, avec les paramètres, comme ici :
Code:
aMonClip.StopFadeOut(3, 0);

À la place de aMonClip, tu rentre le nom du clip audio que tu veux couper. Ensuite tu rentre la valeur des paramètres VitesseFadeOut et VolumeStop (qui correspondent respectivement à 3 et 0 dans l'exemple ci-dessus). Exactement comme tu utiliserais une autre fonction telle que cEgo.Walk(x,y) par exemple (si tu as bien fait tout comme il faut tu auras l'autocomplétion de la même manière).

VitesseFadeOut correspond à la valeur qui sera soustraite au volume à chaque cycle, donc plus cette valeur est élevée, plus le fade out sera rapide.
VolumeStop correspond au volume final juste avant que le clip soit coupé. Comme on a défini sa valeur à 0 dans le header, ce paramètre est optionnel (dans l'exemple ci-dessus, on aurait pu se passer de le rentrer).

Tu peux trouver plus d'informations sur les fonctions personnalisées ici ou (à noter que dans ce dernier lien, la fonction proposée par Billbis est là à titre d'exemple, car il me semble qu'elle a depuis été implémentée nativement dans AGS).

J'espère avoir été assez clair, sinon n'hésite pas à me demander d'autres précisions, notamment sur le fonctionnement de la fonction en elle-même que je n'ai pas détaillé ici (même si tu dois pouvoir t'en servir en l'état).
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique EmptySam 8 Juil 2023 - 7:14

Hello, je mets le code dans GlobalScript, mais il ne prend pas "IsPlaying".

Je ne sais pas trop ce que sont .asc et .ash, j'imagine que c'est Edit Script et Edit Header ?
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique EmptySam 8 Juil 2023 - 9:00

Gob a écrit:
Je ne sais pas trop ce que sont .asc et .ash, j'imagine que c'est Edit Script et Edit Header ?
Tout à fait !

Tu as un message d'erreur ? Si oui peux-tu mettre la capture ? Et me dire quelle version d'AGS tu utilises.
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique EmptySam 8 Juil 2023 - 13:47

Hello, c'est la version 3.5.1.17.
Maintenant c'est différent, il ne passe pas la première ligne.


https://servimg.com/view/20509723/3
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique EmptySam 8 Juil 2023 - 22:38

Il manque l'astérisque après AudioClip ici :
Code:
function StopFadeOut(this AudioClip*, int VitesseFadeOut, int VolumeStop){
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique EmptyDim 9 Juil 2023 - 7:12

Le IsPlaying ne passe pas.

https://servimg.com/view/20509723/4

Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique EmptyDim 9 Juil 2023 - 9:18

Autant pour moi, j'avais aussi ajouté cette fonction, au dessus :
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;
}
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique EmptyDim 9 Juil 2023 - 13:08

Hello !

Oui, ça marche très bien. Je le met plutôt à la fin d'une room, plutôt qu'au début, sinon il attend que ce soit fini pour afficher le fond. Super, apparemment tu fabriques tes propres formules. Si tu peux utiliser ça pour fondre l'apparition et la disparition d'un objet (voire un character), dis le moi.

Merci Valoulef.
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique EmptyDim 9 Juil 2023 - 22:04

Gob a écrit:
Si tu peux utiliser ça pour fondre l'apparition et la disparition d'un objet (voire un character), dis le moi.

Oui, bien-sûr ! Tu peux faire à peu près ce que tu veux. Mais si tu veux te pencher plus sur le sujet, je vais commencer par essayer de t'expliquer plus en détail le fonctionnement de la fonction que je t'ai donnée, parce que c'est toujours mieux de comprendre ce qu'on fait. Je vais essayer surtout de rendre les choses le plus clair possible mais il se peut que je n'utilise pas toujours les termes exacts, je ne suis pas non plus un pro de la programmation.
Comme je ne connais pas du tout tes connaissances je détaille le plus possible, mais je me rends bien compte que ça peut rester un peu obscure si tu ne maîtrise pas du tout certaines notions qui vont suivre. C'est pas grave, prend ce que tu veux, ce sera toujours mieux que rien.

Prenons les choses dans l'ordre dans lequel le programme interprète le code. D'abord, il va tomber sur cette ligne là, quelque part :
Code:
aMonClip.StopFadeOut(3, 0);

Là, il voit qu'il doit appliquer une fonction nommée "StopFadeOut" à l'élément "aMonClip" qu'on sait être un AudioClip. Il va alors rechercher les instructions qu'il doit appliquer lorsqu'il tombe sur cette fonction, et va donc rechercher cette ligne là :

Code:
function StopFadeOut(this AudioClip*, int VitesseFadeOut, int VolumeStop){

Le mot-clé "function" permet de déclarer une fonction que j'ai nommée arbitrairement StopFadeOut. Dans les parenthèses, on note le type d'élément auquel s'applique la fonction (le cas échéant, mais une fonction peut aussi ne pas s'appliquer à un élément en particulier), précédé du mot-clé this. L'astérisque permet d'identifier qu'il s'agit d'un pointeur (une variable d'un type particulier, dans AGS ça peut être par exemple Character, Room, Hotspot, etc., ou ici, AudioClip). Pour faire simple c'est ce qui s'affiche en bleu ciel dans l'éditeur. Ensuite on entre les paramètres dont on aura besoin plus tard, en l'occurrence deux entiers (int) respectivement nommés VitesseFadeOut et VolumeStop.

Le programme exécute ensuite le code entre les accolades.

AGS utilise un système de canaux audio (de pistes) et c'est le volume du canal et non directement du clip que l'on peut intervenir. Il faut donc récupérer le canal sur le quel le clip qui nous intéresse est actuellement joué (si c'est bien le cas, car il peut bien-sûr aussi ne pas être joué). C'est le rôle de la ligne suivante, qui crée un pointeur "canal" contenant le canal où le clip est éventuellement joué :
Code:
AudioChannel *canal = this.IsPlaying();

Là on fait appel à l'autre fonction (qui est en fait un pointeur sous la forme d'une fonction) IsPlaying que je t'ai donnée après. Je détaille pas, il faut surtout noter que this correspond à l'AudioClip sur lequel on travaille actuellement et qu'on lui applique cette autre fonction qui renvoie le canal sur lequel il est joué, ou null s'il n'est joué nulle part.

Si le clip audio n'est joué nulle part, alors il n'y a rien à faire, c'est pour cela qu'on va appliquer la suite uniquement dans le cas contraire, d'où le :
Code:
if (canal != null){

Ce qu'on veut pour finir, c'est baisser le volume à chaque cycle de jeu (40 fois par seconde par défaut), jusqu'à ce qu'il arrive à 0. On va donc pour cela utiliser une boucle while qui exécute les instructions en boucle tant que sa condition est vérifiée :

Code:
while (canal.PlayingClip == this){

Ce qui peut se traduire grosso modo par "tant que le clip joué sur le canal canal est celui qui nous intéresse (this)".

... alors on applique en boucle ce qui suit entre les accolades :
Code:
if (canal.Volume > VitesseFadeOut) canal.Volume -= VitesseFadeOut;
Wait(1);
if ((canal.Volume <= VitesseFadeOut) || (canal.Volume <= VolumeStop)) canal.Stop();

Autrement dit, si le volume de canal est supérieur au paramètre VitesseFadeOut alors on retire autant de points à sa valeur (3 dans notre exemple).
Le Wait(1); permet d'attendre un cycle de jeu avant de continuer, sinon tout se ferait d'un coup et on aurait pas l'effet progressif recherché.
Et ensuite, si le volume a atteint la valeur d'un des deux paramètres, alors on arrête d'y jouer le clip audio.
On recommence ensuite en haut de la boucle while si le clip n'a pas encore été interrompu.

Voilà.
Pour faire disparaître un objet ou personnage en fondu, ce sera un peu le même principe, mais appliqué sur Object ou Character au lieu de AudioClip, et sans avoir à s'embêter avec cette histoire de canal, spécifique à l'audio. À noter qu'au lieu du volume, on cherchera ici à faire varier la valeur Transparency de l'élément.

Est-ce que tu peux commencer à voir comment faire ? Si c'est pas le cas, pas d'inquiétude je reviens vite t'aiguiller. ^^
En espérant ne pas t'avoir embrouillé plus qu'autre chose.
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique EmptyVen 14 Juil 2023 - 11:45

Hello, merci pour les explications, ça reste complexe pour moi, simple graphiste. Il faudrait que je reprogramme ça point par point, pour capter mieux. A+ PG
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique EmptySam 29 Juil 2023 - 15:46

Est-ce que tu veux la solution pour faire disparaître et apparaître un objet en fondu ?
Revenir en haut Aller en bas
Gob
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Gob


Nombre de messages : 108

Date d'inscription : 08/10/2021


Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique EmptySam 29 Juil 2023 - 16:31

Oui, volontiers.
Revenir en haut Aller en bas
Contenu sponsorisé





Faire un fade out sur une musique Empty
MessageSujet: Re: Faire un fade out sur une musique   Faire un fade out sur une musique Empty

Revenir en haut Aller en bas
 
Faire un fade out sur une musique
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: