Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Il pannello di controllo

Metodi e proprietà dell'oggetto Sound.
Metodi e proprietà dell'oggetto Sound.
Link copiato negli appunti

L'oggetto Sound

Prima di passare allo sviluppo del controllo del suono, faccio un excursus sull'argomento "oggetto Sound". Dal momento che
inseriremo un sistema abbastanza avanzato per la regolazione del volume, è meglio aver chiaro il funzionamento dei metodi e delle proprietà
fin dall'inizio. Per questi esempi, essendo preferibile un un suono costante, e molto leggero, ho scelto un noiosissimo tono telefonico.
Inoltre, per non appesantire troppo la pagina, ho deciso di lasciare libera scelta su quali esempi caricare.

Spiegazione

Creiamo un nuovo documento flash, e importiamo un suono nella libreria. Clicchiamo con il tasto destro del mouse sul suono (nella libreria), e
dal menu contestuale scegliamo Linkage (Concatenamento).

Menu contestuale

Scegliamo adesso l'opzione Export this symbol, e nel campo Identifier (Identificatore), scriviamo loop. A questo punto premiamo OK.

Esportazione del simbolo

Andiamo al primo frame della timeline principale, e scriviamo:

suono = new Sound(_root);
suono.attachSound("loop");

Quello che abbiamo fatto, è stato creare un'istanza dell'oggetto Sound, associata alla _root, con il nome suono. Poi, a questa
istanza, abbiamo "attaccato" il suono linkato come loop nella libreria. Se il suono è impostato nel filmato principale, si
può omettere il _root tra le parentesi del new Sound: se invece viene impostato all'interno di un movieclip, o su un livello diverso dal
principale, tra parentesi bisogna indicare il target.
L'unica cosa che manca, ora, è il comando per riprodurre il suono:

suono.start(0,999);

dove 0 è l'offset (cioè dopo quanti secondi deve avvenire la riproduzione, rispetto all'inizio del suono), e 999 è il numero di cicli
(il suono viene ripetuto 999 volte di seguito). Per fermare il suono, il comando :

suono.stop();

Possiamo associare questi comandi ad un frame, ad un evento dei movieclip, o a un pulsante: noi scegliamo l'ultima opzione (anche se in
verità uso un movieclip che funge da pulsante, più avanti vedremo perché). Quello che otteniamo è il filmato seguente: una cosa da provare, è
quella di premere più volte il pulsante "play".

Come si nota, premendo più volte il pulsante "play", vengono riprodotte più istanze dello stesso suono, con uno spiacevole
accavallamento. E' preferibile allora porre un controllo, affinchè una volta inizializzata la riproduzione, non ne possa essere avviata
un'altra fino alla pressione del tasto "stop". Il comando per il "play", quindi, diventerà:

if(!riproduzione){
suono.start(0,999);
riproduzione = true;
}

e quello per lo stop:

if(riproduzione){
suono.stop();
riproduzione = false;
}

All'avvio del filmato, non essendo stata definita prima, la variabile riproduzione è falsa. Quando premiamo il pulsante
"play", il suono viene avviato e riproduzione diventa vera. Al quel punto, la condizione !riproduzione non è più
verificata, e le successive pressioni del pulsante non sortiranno alcun effetto. Per il tasto "stop", vale lo stesso ragionamento,
solo che il valore della variabile è invertito. Questo è quello che otteniamo:

Per regolare il volume del suono, si usa il metodo setVolume(valore), dove "valore" corrisponde ad un intero che va da 0 a 100. Per
cui, se scriviamo

suono.setVolume(50);

il volume del nostro suono sarà ridotto alla metà. Per poter aumentare il volume di una unità, però, dobbiamo sapere a quanto ammonta
attualmente il valore: si usa quindi il metodo getVolume() per ricavare il valore attuale, e si somma 1 per aumentare. Il comando sarà di
questo tipo:

suono.setVolume(suono.getVolume()+1);

D'altronde si può fare di meglio: sapendo che quando avviamo un suono, questo ha un volume di 100 (di default), possiamo anche settare una
variabile che interpreti e regoli per noi il volume. Nella timeline principale scriviamo:

i = 100;

e per abbassare il volume:

i--;
suono.setVolume(i)

Naturalmente, il valore di "i" potrebbe anche scendere sotto lo zero, mentre il volume si fermerebbe comunque lì. Quindi poniamo
delle condizioni sul valore della "i", per mantenerla tra 0 e 100. Per alzare il volume:

if(i < 100){
i++;
suono.setVolume(i);
}

e per abbassarlo:

>if(i > 0){
i--;
suono.setVolume(i);
}

Il vantaggio di tutto ciò, sta nel fatto che abbiamo una variabile, la "i", che ci indica il volume, e che possiamo utilizzare per
altri scopi. Ad esempio, se sullo stage posizioniamo un campo di testo dinamico a cui associamo la variabile volume, quando
modifichiamo il volume, possiamo modificare anche il contenuto del campo di testo basandoci sulla i, ottenendo un indicatore in cifre. Se poi
settiamo anche la larghezza di una barra su quel valore, come con:

if(i > 0){
i--;
volume = vol._xscale = i;
suono.setVolume(i);
}

otteniamo:

Possiamo fare ancora di più, e sfruttare gli eventi dei movieclip (ora vedremo perchè usare questi piuttosto che i pulsanti). Impostiamo una
variabile come vera alla pressione del tasto sinistro del mouse su un movieclip, e su falsa quando rilasciamo il tasto. Contemporaneamente,
sullo stesso movieclip, sottoponiamo ad un enterFrame la modifica del volume finchè la variabile è vera:

onClipEvent(mouseDown){
if(this.hitTest(_root._xmouse,_root._ymouse,true)){
modifica = true;
}
}
onClipEvent(mouseUp){
modifica = false;
}
onClipEvent(enterFrame){
if(modifica){
if(_root.i > 0){
_root.i--;
_root.volume = _root.vol._xscale =
_root.i;
_root.suono.setVolume(_root.i);
}
}
}

Spiegato riga per riga:

// alla pressione del tasto sinistro del mouse
onClipEvent(mouseDown){

// se il puntatore del mouse è sopra questo movieclip
if(this.hitTest(_root._xmouse,_root._ymouse,true)){
// setta la variabile "modifica" come vera
modifica = true;
}
}

// al rilascio del tasto sinistro del mouse
onClipEvent(mouseUp){

// setta la variabile "modifica" come falsa
modifica = false;
}

// ad ogni riproduzione del movieclip
onClipEvent(enterFrame){

// se la variabile "modifica" è vera
if(modifica){

// se "i" è maggiore di 0
if(i > 0){

// diminuisci il valore di "i" di una unità
i--;

// scrivi nel campo di testo "volume", il valore
// dell'_xscale della barra "vol", che è uguale a "i"
volume = vol._xscale = i;

// setta il volume su "i"
suono.setVolume(i);
}
}
}

Il risultato:

Ti consigliamo anche