Chargement d'un son
Article issu du forum, écrit par ekameleon le 4 jan 2003.
Merci de laisser là-bas toute question ou commentaire.
Voici un tutorial qui illustre une méthode simple pour constituer un préchargement d'un son chargé en tant que son d'évènement en utilisant la méthode loadSound() de l'objet Sound.
Il suffit de lire la source et les commentaires sur la frame principale du fla pour comprendre comment tout cela fonctionne.
Musique : reprise au piano de “C'est quand qu'on va où” (Renaud) par igouya (membre sur flashforum)
Principe
Nous allons réaliser un affichage qui permettra d'afficher la progression en % du chargement d'un son d'évènement.
Il faut comprendre tout d'abord que flash permet l'utilisation de getBytesTotal() et getBytesLoaded() sur un son uniquement dans ce cas de figure.
Donc si et seulement si on lance le son avec la fonction loadSound avec pour paramètre de flux : “false” comme vous le verrez plus bas.
En lançant en “true” et en utilisant la même méthode qu'ici, cela reviendra au même. Le son attendra d'être totalement chargé avant de se lancer.
Pour plus d'information sur l'objet Sound vous pouvez consulter les autres tutoriaux à ce sujet.
Nous mettons aussi en place un bouton btPlay et un bouton btPause qui permet de mettre en pause ou de relancer la lecture.
Je vous conseille de bien lire le script de ce tutorial pour le comprendre.
Méthode
Pour afficher correctement la progression du chargement du son, il faut passer par un clip qui servira en quelque sorte d'espion.
Dans notre exemple un clip nommé “clip” est créé (createEmptyMovieClip) sur une profondeur 20 sur la scène principal,
“clip” permet d'afficher l'avancée du chargement grace à un champ dynamique créé avec la fonction createTextField.
Je ne précise pas ici l'utilisation de ces objets, je vous conseille dont d'utiliser la référence de flash sur le code ci dessous pour en savoir plus.
Fichiers joints : preloadsound.fla , preloadsound.swf , index.html pour mettre en ligne l'animation , musique.mp3
Le script
/*---------------------------------------------------------------------------------------- Tutorial : Préchargement d'un son chargé sous la forme d'un son d'évènement . version : 1.5 auteur : ekameleon mail : ekameleon@flash-forum.net (il est préférable pour toute question d'utiliser la salle Gestion du Son du forum, merci). Musique : reprise au piano de "C'est quand qu'on va où" (Renaud) par igouya (membre sur flashforum) ----------------------------------------------------------------------------------------*/ // programme principal monSon = new Sound(); // on créer l'objet Son monSon.loadSound("musique.mp3" , false); // on lance le chargement du son d'évènement. // Evènement quand la musique est lue complètement monSon.onSoundComplete = function () { // quand le morceau à fini de se lire this.start(); // on relance la musique } _root.savePosition = 0; // initialisation de la position de lecture du son en cours _root.createEmptyMovieClip("clip", 20); // on crée un clip qui servira d'espion pour calculer la progression du chargement du son. _root.clip._x = 50 ; // on positionne le clip sur la scène selon x _root.clip._y = 120; // on positionne le clip sur la scène selon y _root.clip.createTextField("texte", 1, 0, 0, 250, 20); // on crée un champ dynamique qui permettra l'affichage du son _root.clip.texte.selectable = false; // on met à false l'option selectable du champ dynamique _root.btPause._visible = false; // on cache le bouton Pause _root.btPlay._visible = false; // on cache le bouton Play // Prototypes pour le bouton play et pause Button.prototype.play = function () { this.onRelease = function() { // quand le bouton est relaché _root.monSon.start(_root.savePosition/1000); // on lance le son au niveau de la position courante enregistrée } } Button.prototype.pause = function () { this.onRelease = function() { // quand le bouton est relaché _root.savePosition = _root.monSon.position; // on enregistre la position courante de la lecture du son _root.monSon.stop(); // on stoppe le son } } // préchargement avec l'utilisation d'une boucle infinie sur "clip" (onEnterFrame) _root.clip.onEnterFrame = function() { this.total = monSon.getBytesTotal(); // on détermine la taille totale en Bytes du son. this.lu = monSon.getBytesLoaded(); // on détermine le nombre de Bytes courant durant le chargement du son. this.rapport = this.lu / this.total; // création d'une variable qui détermine le rapport des 2 valeurs au dessus. this.pourcent = Math.floor(this.rapport*100); // création d'une variable qui permettra l'affichage en % du résultat this.texte.text = "chargement "+ _root.musique + " " + this.pourcent + " %"; // Mise à jour du champ de texte dynamique pendant le chargement if (this.rapport == 1) { // si le rapport est égal à 1, c'est à dire que (total == lu) delete this.onEnterFrame; // on détruit la boucle infinie appliquée sur "clip" pour libérer le CPU this.texte.text = "son chargé"; // on affiche un message dans le champ dynamique pour dire que le chargement est fini. _root.btPlay.play (); // on active le bouton Play _root.btPause.pause (); // on active le bouton False _root.btPause._visible = true; // on affiche le bouton Pause _root.btPlay._visible = true; // on affiche le bouton Play _root.monSon.start(_root.savePosition); } } // fin du programme principal
