Come faccio a creare un effetto fade su un suono?

Utente HTML.it
chiede

Come faccio a creare un effetto fade su un suono?

Redazione HTML.it
risponde

Un cambio di volume reale, si può ottenere solo con filmati creati con una versione del Flash superiore alla 4 (Flash5 e FlashMX). Infatti, abbiamo bisogno di sfruttare i metodi dell’oggetto Sound.

Ammettiamo di aver già importato il suono nel nostro filmato, e di averlo linkato nella libreria con l’identificatore “loop”. Creiamo un movieclip vuoto, al quale associamo:

onClipEvent (load) {
  m = new Sound (this);
  m.attachSound("loop");
  vol = 100;
  m.start(0, 999);
}

onClipEvent (enterFrame)
{
  s = m.getVolume ();
  if (s == vol) return
  m.setVolume (s-((vol<s) ? 1 : -1));
}

Con questo script, creiamo un’istanza, chiamata “m”, dell’oggetto Sound, associata al movieclip (this). A questa istanza, “attacchiamo” il suono identificato nella libreria con il nome “loop”, quindi ne avviamo la riproduzione con il metodo start. Inoltre, assegniamo alla variabile “vol”, il valore 100.

Sottoposto all’enterFrame, abbiamo un controllo sul volume attuale del nostro suono. Se il valore attuale del volume è uguale al valore di vol (all’inizio è vero, essendo entrambi uguali a 100), il returninterrompe il ciclo e rimanda ad un nuovo controllo.

Se invece vol e il volume (racchiuso nella variabile “s”), non sono uguali, allora il volume viene settato sottraendo ad “s” (appunto il volume attuale), o il valore 1, nel caso il volume sia inferiore ad “s”, o il valore -1, nel caso sia superiore.

Più semplicemente, se il volume è inferiore a vol, aggiungiamo 1, se superiore, togliamo 1. Quindi, vol diventa il valore finale da raggiungere, che una volta raggiunto (volume = vol), interrompe il ciclo, innescando nuovamente il return.

// al caricamento del movieclip
onClipEvent (load)
{
// crea un’istanza dell’oggetto Sound, associata a questo movieclip
m = new Sound (this)
// associa all’istanza, chiamata “m”, il suono linkato come “loop”
m.attachSound (“loop”);
// assegna alla variabile “vol” il valore 100
vol = 100;
// inizia a riprodurre il suono
    m.start (0, 999);
}
// ad ogni riproduzione del movieclip
onClipEvent (enterFrame)
{
// associa alla variabile “s” il valore del volume attuale di “m”
s = m.getVolume ();
// se “s” e “vol” sono uguali, reinizia il ciclo
if (s == vol) return
// se non sono uguali, setta il volume di “m” con il valore attuale
// del volume meno 1, se “vol” è minore di “s”, e più 1 se il
contrario

m.setVolume(s-((vol<s) ? 1 : -1));

}

Se adesso impostiamo il valore della variabile “vol”, associata al movieclip, il suono sfumerà gradualmente verso quel valore. Se impostiamo vol = 0; , il suono sfumerà verso il silenzio, se impostiamo vol = 50, sfumerà verso la metà del volume. Allo stesso modo, se all’inizio del filmato impostiamo il volume del suono uguale a 0, avremo un effetto fadein.

onClipEvent (load) {
m = new Sound (this);
m.attachSound (“loop”);
vol = 100;
// impostiamo il volume uguale a 0
m.setVolume (0);

m.start(0, 999);
}
onClipEvent (enterFrame)
{
s = m.getVolume ();
if (s == vol) return
m.setVolume (s-((vol<s) ? 1 : -1));
}