Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Chargement d'un son

Compatible ActionScript 1 et 2. Utilise des techniques dépréciées. Cliquer pour en savoir plus sur les compatibilités.Compatible Flash MX 2004. Cliquer pour en savoir plus sur les compatibilités.Par ekameleon (Marc Alcaraz)

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.

L"extension Adobe Flash Plugin est nécessaire pour afficher ce contenu.

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