Interface de base
Nous avons déjà vu la majeure partie dans le tutoriel précédent,
Musique !, auquel je vous invite à vous reporter si vous souhaitez comprendre quelque chose à la suite.
On va en effet passer sur les explications déjà données quant au chargement de la musique et à l'approximation effectuée sur sa durée totale.
Voilà notre code de départ, celui qu'on peut reprendre de plus haut :
Code : Actionscript 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | var tduration:Number = 0; // Variable stockant la durée approximée totale de la musique
var largeur:Number = selecteur._width; // Largeur de la barre de navigation
var musique:Sound = new Sound(); // Notre objet son
arret.onRelease = function() {
musique.start(0); // On remet la musique à zéro
musique.stop(); // Pour l'arrêter tout de suite après
};
pause.onRelease = function() {
musique.stop();
};
lecture.onRelease = function() {
musique.start(musique.position/1000); // "position" donnée en millisecondes
};
curseur.onEnterFrame = function() {
this._xscale = (musique.position/tduration)*100;
};
selecteur.onRelease = function() {
musique.stop();
musique.start((this._xmouse*musique.duration)/(largeur*1000));
};
selecteur.onEnterFrame = function() {
this._xscale = (musique.getBytesLoaded()/musique.getBytesTotal())*100;
tduration = (musique.getBytesTotal()*musique.duration)/musique.getBytesLoaded();
};
|
Comme vous le constatez, on n'a aucune ligne qui s'occupe du chargement de la chanson : c'est normal.

On a dit en effet que nous allions construire une fonction
chargeur() qui s'en occuperait. Cette fonction prend pour argument la variable
id que chaque
ligne lui transmet :
Code : Actionscript | chargeur = function (id) {
musique.start(0); // On remet la musique à zéro
// Le code
};
|
On a le numéro de la ligne, et on connaît la structure du nom des clips
ligne que nous avons créés : ligne_X.
On utilisera donc la même syntaxe que d'habitude pour aller chercher nos petites infos :
Code : Actionscript | chargeur = function (id) {
musique.start(0);
musique.loadSound(this['ligne_'+id].lien, true);
info.text = this['ligne_'+id].infos.text;
};
|
On pouvait aussi bien écrire
_root['ligne_'+id] à chaque fois, ça n'aurait rien changé.
Maintenant, le petit fignolage de dernière minute : on va faire disparaître la petite flèche
lecture de la ligne qui n'est plus lue, et la rajouter à celle qui est lue.
Comment je connais l'id de la ligne qui n'est plus lue ?
Bah, il suffit de faire intervenir une nouvelle variable :
var id_encours = 0;
Ensuite, dans notre fonction, on va rendre invisible la flèche du clip correspondant à
id_encours, afficher celle de
id, et mettre à jour la valeur de
id_encours avec la nouvelle musique. (Et bien sûr dans cet ordre-là, sinon, il y aurait un petit problème .;) )
Code : Actionscript | chargeur = function (id) {
this['ligne_'+id_encours].lecture._visible = false; // On la fait disparaître
this['ligne_'+id].lecture._visible = true; // On la fait apparaître
id_encours = id; // Et on met à jour l'id du nouveau titre
musique.start(0);
musique.loadSound(this['ligne_'+id].lien, true);
info.text = this['ligne_'+id].infos.text;
};
|
Petit récapitulatif de cette première partie :
Code : Actionscript 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
31
32
33 | var tduration:Number = 0;
var id_encours = 0;
var largeur:Number = selecteur._width;
var musique:Sound = new Sound();
chargeur = function (id) {
this['ligne_'+id_encours].lecture._visible = false;
this['ligne_'+id].lecture._visible = true;
id_encours = id;
musique.start(0);
musique.loadSound(this['ligne_'+id].lien, true);
info.text = this['ligne_'+id].infos.text;
};
arret.onRelease = function() {
musique.start(0);
musique.stop();
};
pause.onRelease = function() {
musique.stop();
};
lecture.onRelease = function() {
musique.start(musique.position/1000);
};
curseur.onEnterFrame = function() {
this._xscale = (musique.position/tduration)*100;
};
selecteur.onRelease = function() {
musique.stop();
musique.start((this._xmouse*musique.duration)/(largeur*1000));
};
selecteur.onEnterFrame = function() {
this._xscale = (musique.getBytesLoaded()/musique.getBytesTotal())*100;
tduration = (musique.getBytesTotal()*musique.duration)/musique.getBytesLoaded();
};
|
Vous pouvez exécuter votre animation, et miracle, la plupart des fonctions sont déjà opérationnelles

!
Précédent, suivant et passage automatique
Il manque les nouvelles fonctions inhérentes à l'utilisation d'une
playlist : les boutons "précédent", "suivant" et le passage automatique à la chanson suivante, à la fin de celle en cours.
Pour les boutons "précédent" et "suivant", ça pourrait paraître facile ; il y a cependant un petit piège : arrivé à la dernière chanson, il faut revenir au début ! De même, si on est à la première chanson, et que l'utilisateur fait "précédent", il faudra aller à la dernière !
Bon, je vous laisse créer le code (les boutons ont pour nom d'occurrence
precedent et
suivant).
Correction possible :
Secret (cliquez pour afficher)Code : Actionscript 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | precedent.onRelease = function() {
if (id_encours>0) {
chargeur(id_encours-1);
} else {
chargeur(total-1);
}
};
suivant.onRelease = function() {
if (id_encours<total-1) {
chargeur(id_encours+1);
} else {
chargeur(0);
}
};
|
Maintenant, je vais vous présenter un événement pratique dans notre cas de la classe
Sound :
onSoundComplete.
Cet événement se déclenche, comme son nom l'indique, quand une musique arrive à sa fin.
On aura donc :
Code : Actionscript | musique.onSoundComplete = function() {
if (id_encours<total-1) {
chargeur(id_encours+1);
} else {
chargeur(0);
}
};
|
Maintenant, on peut constater que le code est le même que pour le bouton
suivant, on peut donc lier les deux pour gagner un peu de place :
Code : Actionscript | suivant.onRelease = musique.onSoundComplete =function() {
if (id_encours<total-1) {
chargeur(id_encours+1);
} else {
chargeur(0);
}
};
|
Allez, courage, on a déjà fait plus de la moitié.