- 0) Présentation rapide des bases de Flash
- I) Création d’un nouveau projet (pour les débutant)
- a) Création du projet
- b) Importation du design Photoshop
- II) Avant d’attaquer le codage
- a) Présentation des MovieClip
- b) Organisons-nous
- III) Partie Codage =)
- a) Un Pré-Chargement
- b) Les boutons (normal / top / cliqué)
- c) Réglage du volume
- IV) Des modifs pour un lecteur MP3!
Ce que nous allons créer:
Version Webradio: [kml_flashembed movie="http://webiswell.fr/contents/tuto/webradio.swf" height="145" width="465" /]
Version Lecteur MP3: [kml_flashembed movie="http://webiswell.fr/contents/tuto/lecteur_mp3.swf" height="145" width="465" /]
-
0) Présentation rapide des bases de Flash
Si c’est la toute première fois que vous utilisez Flash, veuillez télécharger la petite vidéo de présentation que j’ai réalisée:
-
I) Création d’un nouveau projet (pour les débutant)
-
a) Création du projet
-
Premièrement, téléchargez la version PSD (design photoshop) de la radio.
Après avoir téléchargé et installé Adobe Flash CS4, nous allons créer un nouveau projet. Faites Fichier > Nouveau > Fichier Flash avec ActionScript 3.
Vous devez ensuite définir les dimensions de votre fichier Flash ainsi que sa vitesse de lecture. A droite, mettez une taille légèrement supérieure à votre fichier .PSD (+10px en largeur et en longueur). Et mettez 20fps environ. Pas la peine de mettre plus!

Vous pourrez à tout moment changer les dimensions et la vitesse de lecture du document flash. Pour cela cliquez sur l’arrière de la scène, allez dans Propriétés à droite (si ce n’est pas affiché: Fenêtres > Propriétés (ou CTRL + F3) )
-
-
b) Importation du design Photoshop
-
Après avoir fini le design de votre lecteur Webradio sous Photoshop, il faudra l’importer sous Adobe Flash Cs4.
Pour cela faites Fichier > Importer > Importer sur la scène et importez le fichier PSD de votre design.Sélectionnez les images du design (et pas les textes), puis Cochez « Image bitmap avec style de calque modifiables », et mettez une compression sans perte.

Vous aurez alors plusieurs calques disposés sur la keyframe n°1 (image-clé n°1) de la timeline.
Effacez alors sur la scène: tous les éléments dynamiques, c’est à dire les boutons, le curseur, et le fond rouge (que l’on animera par la suite). Vous obtenez alors quelque chose de semblable à ça:

Si par un quelconque hasard vous voudriez changer l’image d’un calque en particulier, allez dans la bibliothèque (ou librairie) sur la gauche (Fenêtre > Bibliothèque). Dans la Biliothèque, allez dans le dossier de votre psd, puis dans le dossier « Elements », faites un clic droit sur l’élément à changer en question, « Propriétés », et « Mise à jour », puis choisissez l’image à remplacer.
-
II) Avant d’attaquer le codage
-
a) Présentation des MovieClip
-
Nous allons directement passer au codage, puis nous passerons aux quelques animations visuelles, pour rendre votre player plus « design ».
Pour ceux qui utilisent pour LA PREMIERE FOIS le logiciel Flash d’Adobe, veuillez regarder la vidéo qui montre les principales fonctions, et présente les symboles: Movie Clip, Boutons, et Graphique.
Les Movie Clip ne sont ni des films, ni des clips musicaux…
^^
Pour résumer tout ça, un symbole peut avoir plusieurs « Instance Names » ou « Occurences », mais pas la contraire! Les occurences sont UNIQUES.

C’est très important pour les fonctions d’ActionScript. D’ailleurs en ActionScript 2, il était possible d’assigner du code directement sur les Boutons ou Movie Clip. En AS3, ce n’est hélas plus possible, et nous devons obligatoirement utiliser des fonctions pour chaque évènement.
Dans ce tutoriel, nous n’utiliserons que des Movie Clip, car ils peuvent être à la fois des boutons et des graphiques.
-
b) Organisons-nous
Commençons à nous organiser.
Sélectionnez tous les calques qui restent (directement via la scène), puis faites Clic Droit > Convertir en Symbole > Cochez Movie Clip et appelez le « Fond ». Tous les calques sont ainsi empacketés dans le Movie Clip. Lorsque vous double-cliquez sur le Movie Clip, vous verrez tous les calques du fond du player.

Et pour éviter de quelconques erreurs, vous pouvez aussi effacer tous les calques de la Timeline. (Un carré représente une « frame » ou une « image » pour les frenchies. Si vous connaissez After Effects, c’est exactement le même principe, nous avons des KeyFrames ou Images-clées. Une image-clée est représentée par un rond noir rempli. Un rond blanc signifie qu’il n’y a aucun élément sur cette image.
Cette notion est très importante pour pouvoir continuer, je ne vais pas m’étaler dessus…
Effacez donc tous les calques VIDES de la timeline, c’est à dire les calques avec un rond blanc dans l’image. Voilà le résultat:

-
III) Partie Codage =)
-
a) Un Pré-Chargement
-
Afin d’éviter un gros « Blanc » lors du téléchargement du fichier flash dans un navigateur pendant quelques secondes, il est important de faire une chargement personnalisé, avec une barre qui défile et un pourcentage représentant l’avancement du téléchargement.
Le fichier SWF final sera d’environ 80ko à 120ko, si un ordinateur possède une mauvaise connexion, le fichier SWF restera tout blanc jusqu’à ce qu’il soit téléchargé entièrement. Nous allons donc créer un chargement personnalisé.
Voilà comment nous allons procéder:
- Nous allons mettre le module de chargement en position 1 sur la timeline. Lorsque le fichier sera entièrement chargé, la « tête de lecture » passera directement en position 2.
- Nous mettrons donc tout notre player en position 2.
Mais tout ceci n’est pas automatique, il faut le coder! =)
Sélectionnez l’image clée n°1, puis faites un Glisser/Déposer sur l’image clée n°2.
Vous n’avez plus rien en position 1, c’est une image-clée vide. Le Movie Clip « Fond » créé précédemment est alors en position 2.

Re-Sélectionnez l’image-vide n°1, et créez un Texte (l’outil « T » dans la colonne de droite for the noobs ^^) n’importe où sur la scène.
Dans les Propriétés, choisissez Texte Dynamique, et juste au dessus mettez lui une occurence « chargement ». Ce texte nous affichera le pourcentage de téléchargement.

Créez maintenant un rectangle sur la scène ayant la forme d’une barre de chargement (outil Rectangle sur la gauche), allez dans Propriétés en bas et changez les couleurs à votre envie.
Sélectionnez le rectangle (et pas le texte), Clic-Droit > Convertir en Movie Clip. Mettez lui une occurence « chargement_barre », et j’INSISTE bien sur l’occurence et non pas le nom du Movie Clip !!!
Re-re-sélectionnez l’image-clé n°1, puis appuyez sur F9 pour afficher la fenêtre des Actions. C’est ici que nous mettrons le code du chargement, en ActionScript 3. Voilà le code que vous pouvez Copier/Coller:
// On arrête la tête de lecture en position n°1 de la timeline
stop();
// On définit la fonction "chargement_progress". Grâce à ProgressEvent, la fonction fera une boucle tant que des packets d'octets seront reçus.
function chargement_progress(event:ProgressEvent):void {
// On définit la variable "pourcentage" en tant que Nombre Entier (int), bytesLoaded représente le nombre d'octets reçus, bytesTotal le nombre total d'octets
var pourcentage:int = Math.round(event.bytesLoaded / event.bytesTotal * 100);
// On affiche le pourcentage dans le texte dynamique ayant l'occurence "chargement"
chargement.text = pourcentage + "%";
// La barre de chargement est redimensionnée en fonction du ratio octets-reçus / nb-d'octets-total
chargement_barre.scaleX = event.bytesLoaded / event.bytesTotal;
}
// On définit la fonction chargement_termine
function chargement_termine(event:Event):void {
loaderInfo.removeEventListener(ProgressEvent.PROGRESS, chargement_progress);
loaderInfo.removeEventListener(Event.COMPLETE, chargement_termine);
// gotoAndStop comme son nom l'indique, déplace la tête de lecture en position n°2 puis s'arrête.
gotoAndStop(2);
}
// On exécute les fonctions définies
loaderInfo.addEventListener(ProgressEvent.PROGRESS, chargement_progress);
loaderInfo.addEventListener(Event.COMPLETE, chargement_termine);
Pour vérifier si ça marche, rien de plus simple: faites Ctrl + Entrée pour compiler le document, faites Affichage > Simuler un téléchargement (ou encore Ctrl + Entrée). WOAAW trop bien =)

A vous d’améliorer le design de votre chargement, avec les couleurs que vous désirez, etc…
On a donc un petit « a » sur l’image-clé n°1, ça veut dire qu’elle comporte des Actions.
Passons maintenant aux choses un peu plus sérieuses !! Les boutons !!
-
-
b) Les boutons (normal / top / cliqué)
-
Les boutons ont 4 états: bouton normal, bouton « top » lorsque la souris passe dessus, bouton appuyé (pendant le clic) et bouton cliqué après le clic. Nous allons considérer que bouton appuyé = bouton cliqué. Nous avons donc 3 états de boutons, et pour chaqu’un d’eux on va utiliser une fonction.
Sélectionnez l’image-clé n°2 et double-cliquez sur le Movie Clip « Fond » créé précédemment. Afin que l’on puisse animer notre player plus tard, sélectionnez tout puis re-convertissez en Movie Clip (appelez le « Fond_2″).
On a donc le Movie Clip « Fond_2″ intégré dans le Movie Clip « Fond ».
Placez vous dans le Movie Clip « Fond_2″. Allez dans la Bibliothèque à droite, et glissez/déposez sur la scène l’élément bouton play normal (ALLEZ DANS LE DOSSIER Element de la bibliothèque).
Et tout de suite, donnez lui l’occurence « play1″, notez bien le « 1″.
Double-cliquez sur le Movie Clip « bouton play », et insérez une image-clé vide. (Clic droit > Insérer une image clé vide).
Cliquez sur « Pelure d’Onion », ou Onion Skin (regardez le screenshot ci-dessous). Placez-vous en position 2, vous verrez donc un bouton translucide, qui représente l’image-clé n°1.

Insérez le bouton « top » sur la scène, depuis la bibliothèque, et ajustez le pour que ça coïncide avec l’image précédente (oui c’est fastidieux…).
Puis ré-insérez une image-clé vide, puis faites de même avec le bouton « cliqué ».
Attention : Il faut sélectionner l’image-clé n°1 du Movie Clip play1, puis ajouter l’action stop(); en appuyant sur F9. Cela évitera que le bouton loop sur lui même.
Il ne vous reste plus qu’à nommer ces 3 images-clés. Pour cela, cliquez sur les images-clés et attribuez leur (dans Propriétés > Etiquette) les noms suivants: normal, top, clique.
Passons au bouton Stop. Placez-vous dans le Movie Clip Fond_2 et créez un nouveau calque dans la Timeline. Placez le bouton stop normal dans ce calque (occurence: « stop1″) de façon à ce qu’il soit au dessus du bouton Play. N’oubliez pas de mettre son occurence, et faite la même chose que pour le bouton Play. Mettez les mêmes noms aux images-clés (normal, top, clique).
Passons maintenant à la partie codage.
Remettez vous dans le Movie Clip « Fond_2″, et créez un nouveau calque où l’on placera le code, cliquez sur la première image-clé, appuyez sur F9, et copiez-collez le code ci-dessous:
// Code C1
stop();
// On importe les packages nécessaires
import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundLoaderContext;
import flash.net.URLRequest;
this.play1.buttonMode=true;
this.stop1.buttonMode=true;
// Lorsque le curseur est en dehors du bouton
this.play1.addEventListener(MouseEvent.MOUSE_OUT, playMouseOut);
// Lorsque le curseur est sur le bouton
this.play1.addEventListener(MouseEvent.MOUSE_OVER, playMouseOver);
// Lorsque le curseur appuie sur le bouton
this.play1.addEventListener(MouseEvent.MOUSE_DOWN, playMouseDown);
this.stop1.addEventListener(MouseEvent.MOUSE_OUT, stopMouseOut);
this.stop1.addEventListener(MouseEvent.MOUSE_OVER, stopMouseOver);
this.stop1.addEventListener(MouseEvent.MOUSE_DOWN, stopMouseDown);
// Et maintenant, les fonctions.
function playMouseOver(event:MouseEvent):void {
this.play1.gotoAndStop("top");
}
function playMouseOut(event:MouseEvent):void {
this.play1.gotoAndStop("normal");
}
function playMouseDown(event:MouseEvent):void {
this.play1.gotoAndStop("clique");
}
function stopMouseOver(event:MouseEvent):void {
this.stop1.gotoAndStop("top");
}
function stopMouseOut(event:MouseEvent):void {
this.stop1.gotoAndStop("normal");
}
function stopMouseDown(event:MouseEvent):void {
this.stop1.gotoAndStop("clique");
}
Maintenant on attaque les choses vraiment sérieuse: le son! Vous pourrez ainsi écouter Chimène Badi via votre navigateur, c’est pas beau tout ça??
On a donc deux solutions pour loader le son:
1- Soit le son est chargé dès le chargement du Flash, puis il est joué quand on clique sur Play. (On utilisera ça pour le Lecteur MP3)
2- Soit le son est chargé et joué quand on clique sur Play. (Pour la Webradio)
De toute évidence, j’ai réalisé plusieurs tests, et pour le streaming d’un flux continu, il est préférable d’opter pour l’option 2. Après, tout dépend de vos envies…
Lorsque l’on cliquera sur Play, celui-ci disparaîtra, laissant place au bouton Stop.
Résumons donc en quelques mots. Quand on cliquera sur Play:
- La musique se charge
- La musique se joue après que le buffer soit « rempli »
- Le bouton Play disparaît, pour laisser place au bouton Stop
Ah oui mais c’est quoi le Buffer, c’est important ce truc??
Très important. C’est grâce à lui que la radio ne « laguera » pas. Il existe déjà un buffer intégré à la fonction load(); le problème c’est qu’il ne dure que 1000 millisecondes. Pour une webradio, il est préférable d’augmenter cette valeur à 6000 ou 7000. mis 6500, et ça marche très bien! Mais tout dépend de votre serveur et de votre bande-passante.
C’est grâce à SoundLoaderContext(); que nous allons augmenter le temps de Buffer (BufferTime).
Avant de coder, il faut savoir d’où viennent les éventuelles erreurs. Créez donc un Texte Dynamique sur la scène, et mettez lui une occurence « infos ».
Trêve de plaisanteries. Voilà le code, que vous pouvez mettre à la suite du code C2.
var bouton_play_alpha:Number;
// Le son n'est pas encore joué, la variable "played" contient 0
var played:Number = 0;
var son:Sound = new Sound();
// La radio Fréquence Jazz, pour tester
var stream:URLRequest = new URLRequest("http://broadcast.infomaniak.net/frequencejazz-high.mp3");
// 6,5 secondes de Buffer.
var bufferTime:int = 6500;
// ATTENTION IMPORTANT! Si le son est situé sur le même serveur que le fichier Flash, mettez False, dans la plupart des cas on met true. ATTENTION, il faut alors créer un fichier crossdomain.xml (voir en-dessous de ce code).
var context:SoundLoaderContext = new SoundLoaderContext(bufferTime, true);
var canal:SoundChannel = new SoundChannel(); // Objet indispensable pour le canal son
var soundVol:SoundTransform = new SoundTransform();
// Pour être sûr de ne pas voir le bouton Stop à l'arrière, on lui applique la valeur alpha = 0, il devient invisible.
stop1.alpha = 0;
this.play1.addEventListener(MouseEvent.CLICK, clickPlay);
function clickPlay(event:MouseEvent):void {
if (played == 0) { // Si le son n'est pas encore joué.
// S'il y a un problème de chargement, on exécute la fct erreur_lecture.
son.addEventListener(IOErrorEvent.IO_ERROR, erreur_lecture);
// Pendant le chargement, on affichera un pourcentage.
son.addEventListener(ProgressEvent.PROGRESS, chargement);
// On load le son
son.load(stream,context);
// On joue le son...
canal = son.play();
// Le son est joué, la variable "played" prend la valeur 1, vous verrez pourquoi après
played = 1;
// On affiche le bouton Stop
stop1.alpha = 1;
// On change la largeur du bouton Play à 0, il est donc... inexistant.
play1.width = 0;
}
else {
// Si le son n'est pas joué avant d'avoir appuyé sur Play, c'est qu'il y a une erreur donc on l'affiche dans le texte dynamique "infos"
infos.text = "Erreur.";
}
}
function erreur_lecture(event:Event):void {
// Si le flux n'est pas accessible
infos.text = "Radio Eteinte";
}
// Pour les webradios =>
function chargement(event:ProgressEvent):void {
// J'ai mis 120000 octets, c'est à peu près ce qu'on doit charger pour 6,5 secondes de Buffer (trouvé un peu au pif... donc si quelqu'un connait une fonction plus précise en tenant compte du BufferTime je suis preneur ^^)
var pourcent:Number = Math.round(event.bytesLoaded / 120000 * 100);
if (pourcent < 100) {
// On affiche le pourcentage de chargement dans le texte dynamique "infos"
infos.text = pourcent + "%";
}
else if (pourcent > 100) {
infos.text = "Live!";
// on supprime l'évènement de chargement.
son.removeEventListener(ProgressEvent.PROGRESS, chargement);
}
} // <= Pour les Webradios
Comme spécifié dans le code ci-dessus (pour ceux qui l’ont lu…), il faut créer un fichier , que vous placerez à la racine du FTP de votre serveur (celui qui ENVOIE le flux audio), je précise bien car on a vite fait de se tromper ^^ . Si vous ne le faites pas, le flux restera bloqué à 4%… Voilà son contenu:
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy> <cross-domain-policy> <allow-access-from domain="*" secure="true" /> </cross-domain-policy>
De plus, il faudra rajouter quelques lignes dans le code Embed pour l’afficher dans une page HTML. Regardez en bas de page !!
Voilà, contrôlez votre flash: appuyez sur Ctrl + Entrée. Cliquez sur Play…… Suspense…. WAOUUW TROP FORT DU JAZZZZZ !!
Mais il reste encore plein de choses à faire: la barre de volume, les actions du bouton Stop (quand même…); et pour les lecteurs MP3 (only), rajoutez: les titres de musiques (tags ID3), et la barre d’avancement. iOuff…
Passons au bouton Stop. Il existe deux cas pour le bouton Stop:
- Pour le lecteur MP3, le bouton Stop servira de bouton pause: la lecture s’arrête, le chargement continue.
- Pour la webradio, on arrête tout, le chargement aussi. (ça évite de bouffer la bande passante du serveur)
Of course, voici le code, à mettre après les codes C1 et C2.
this.stop1.addEventListener(MouseEvent.CLICK, clickStop);
function clickStop(event:MouseEvent):void {
if (played == 1) { // si le son est joué
// on rétablit la taille du bouton Play pour le faire réapparaître
play1.width = 65;
infos.text = "Stop !";
}
}
Alors? Le bouton stop fonctionne bien? Il n’arrête pas la musique, mais il bascule sur Play quand on clique dessus, c’est déjà ça.
-
-
c) Réglage du volume
-
On continue avec le réglage du volume.
Remettez vous dans le Movie Clip « Fond_2″ là où le fond et les boutons se trouvent. Créez un rectangle très fin là où le curseur de volume se déplacera. Sélectionnez-le, et convertissez-le en Movie Clip. Mettez lui une occurence « reg_volume ».
Double cliquez sur ce Movie Clip, puis placez le petit curseur en mode normal sous forme de Movie Clip avec une occurence « curseur », que vous aurez préalablement transformé en bouton (voir le chapitre sur les boutons). Vous avez donc un Movie Clip « curseur » avec 2 frames (normal, top) dans un Movie Clip d’occurence « reg_volume ». (Pour ceux qui sont perdus allez voir le fichier source .fla en bas de page).
Appliquons le code, celui-ci regroupe les codes C1, C2 et C3 avec quelques modifications!
stop();
// On importe les packages nécessaires
import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundLoaderContext;
import flash.net.URLRequest;
this.play1.buttonMode=true;
this.stop1.buttonMode=true;
// Lorsque le curseur est en dehors du bouton
this.play1.addEventListener(MouseEvent.MOUSE_OUT, playMouseOut);
// Lorsque le curseur est sur le bouton
this.play1.addEventListener(MouseEvent.MOUSE_OVER, playMouseOver);
// Lorsque le curseur appuie sur le bouton
this.play1.addEventListener(MouseEvent.MOUSE_DOWN, playMouseDown);
this.stop1.addEventListener(MouseEvent.MOUSE_OUT, stopMouseOut);
this.stop1.addEventListener(MouseEvent.MOUSE_OVER, stopMouseOver);
this.stop1.addEventListener(MouseEvent.MOUSE_DOWN, stopMouseDown);
// Et maintenant, les fonctions.
function playMouseOver(event:MouseEvent):void {
this.play1.gotoAndStop("top");
}
function playMouseOut(event:MouseEvent):void {
this.play1.gotoAndStop("normal");
}
function playMouseDown(event:MouseEvent):void {
this.play1.gotoAndStop("clique");
}
function stopMouseOver(event:MouseEvent):void {
this.stop1.gotoAndStop("top");
}
function stopMouseOut(event:MouseEvent):void {
this.stop1.gotoAndStop("normal");
}
function stopMouseDown(event:MouseEvent):void {
this.stop1.gotoAndStop("clique");
}
var bouton_play_alpha:Number;
// Le son n'est pas encore joué, la variable "played" contient 0
var played:Number = 0;
var son:Sound = new Sound();
var stream:URLRequest = new URLRequest("http://broadcast.infomaniak.net/frequencejazz-high.mp3");
// 6,5 secondes de Buffer.
var bufferTime:int = 6500;
// ATTENTION IMPORTANT! Si le son est situé sur le même serveur que le fichier Flash, mettez False, dans la plupart des cas on met true. ATTENTION, il faut alors créer un fichier crossdomain.xml (voir en-dessous de ce code).
var context:SoundLoaderContext = new SoundLoaderContext(bufferTime, true);
var canal:SoundChannel = new SoundChannel();
var soundVol:SoundTransform = new SoundTransform();
// Pour être sûr de ne pas voir le bouton Stop à l'arrière, on lui applique la valeur alpha = 0, il devient invisible.
stop1.alpha = 0;
this.play1.addEventListener(MouseEvent.CLICK, clickPlay);
function clickPlay(event:MouseEvent):void {
if (played == 0) { // Si le son n'est pas encore joué.
// S'il y a un problème de chargement, on exécute la fct erreur_lecture.
son.addEventListener(IOErrorEvent.IO_ERROR, erreur_lecture);
// Pendant le chargement, on affichera un pourcentage.
son.addEventListener(ProgressEvent.PROGRESS, chargement);
// On load le son
son.load(stream,context);
// On joue le son...
canal = son.play();
// Le son est joué, la variable "played" prend la valeur 1, vous verrez pourquoi après.
played = 1;
// On affiche le bouton Stop
stop1.alpha = 1;
// On change la largeur du bouton Play à 0, il est donc... inexistant.
play1.width = 0;
// on met le curseur de volume au maximum
reg_volume.curseur.x = widthPos;
}
else if (played == 0.5) { // si le son a déjà été joué, mais qu'il est arrêté
// il est rejoué, on le notifie dans la variable "played"
played = 1;
addEventListener(Event.ENTER_FRAME,regVolume);
stop1.alpha = 1;
play1.width = 0;
infos.text = "Live !";
}
else {
// Si le son n'est pas joué avant d'avoir appuyé sur Play, c'est qu'il y a une erreur donc on l'affiche dans le texte dynamique "infos"
infos.text = "Erreur.";
}
}
function erreur_lecture(event:Event):void {
// Si le flux n'est pas accessible
infos.text = "Radio Eteinte";
}
// Pour les webradios ==>
function chargement(event:ProgressEvent):void {
// J'ai mis 120000 octets, c'est à peu près ce qu'on doit charger pour 6,5 secondes de Buffer (trouvé un peu au pif... donc si quelqu'un connait une fonction plus précise en tenant compte du BufferTime je suis preneur ^^)
var pourcent:Number = Math.round(event.bytesLoaded / 120000 * 100);
if (pourcent < 100) {
// On affiche le pourcentage de chargement dans le texte dynamique "infos"
infos.text = pourcent + "%";
}
else if (pourcent > 100) {
infos.text = "Live!";
// on supprime l'évènement de chargement.
son.removeEventListener(ProgressEvent.PROGRESS, chargement);
}
} // <== Pour les webradios
this.stop1.addEventListener(MouseEvent.CLICK, clickStop);
function clickStop(event:MouseEvent):void {
if (played == 1) {
played = 0.5;
addEventListener(Event.ENTER_FRAME,regVolume);
play1.width = 65;
infos.text = "Stop !";
}
}
reg_volume.curseur.addEventListener(MouseEvent.MOUSE_OUT, curseurMouseOut);
reg_volume.curseur.addEventListener(MouseEvent.MOUSE_OVER, curseurMouseOver);
function curseurMouseOver(event:MouseEvent):void {
reg_volume.curseur.gotoAndStop("top");
}
function curseurMouseOut(event:MouseEvent):void {
reg_volume.curseur.gotoAndStop("normal");
}
var ratio_volume:Number;
var trackBounds:Rectangle = reg_volume.getBounds(reg_volume);
var xPos:Number = trackBounds.x;
var yPos:Number = trackBounds.y;
var widthPos:Number = trackBounds.width-reg_volume.curseur.width;
var heightPos:Number = 0;
var bounds:Rectangle = new Rectangle(xPos,yPos,widthPos,heightPos);
reg_volume.curseur.x = widthPos;
reg_volume.mouseEnabled = false;
reg_volume.curseur.buttonMode = true;
reg_volume.curseur.addEventListener(MouseEvent.MOUSE_DOWN,Slider);
stage.addEventListener(MouseEvent.MOUSE_UP,Slider_Stop);
function Slider(event:MouseEvent):void {
event.target.startDrag(false,bounds);
addEventListener(Event.ENTER_FRAME,regVolume);
}
function Slider_Stop(event:MouseEvent):void {
reg_volume.curseur.stopDrag();
}
function regVolume(event:Event):void {
if (played == 1) {
ratio_volume = reg_volume.curseur.x/widthPos;
soundVol.volume = ratio_volume;
canal.soundTransform = soundVol;
}
else if (played == 0.5) {
soundVol.volume = 0;
canal.soundTransform = soundVol;
}
}
La fonction Slider s’exécute lorsque la souris clique sur le curseur grâce à l’évènement MOUSE_DOWN. Dans la fonction Slider, j’ai rajouté un évènement ENTER_FRAME, qui agira sur le volume en appelant la fonction regVolume. La fonction regVolume est LA fonction qui appliquera le résultat à l’objet SoundTransform ce qui modifiera les propriétés du canal son. Do you understand?
De ce fait, en résumé:
- On clique sur le curseur pour le slider (le bouger)
=> Exécution de la fonction Slider
=> Exécution de la fonction regVolume
- si le son est déjà joué
=> On règle le ratio du volume (de 0 à 1) suivant le ratio [position du curseur] / [largeur de la barre "reg_volume"]
- si le son a déjà été joué, et que l’on appuie sur Stop
=>
On met le volume à 0
La fonction Slider_Stop s’exécute lorsque l’on « déclique » du curseur, grâce à l’évènement MOUSE_UP, ce qui provoquera l’arrêt du slider.
On applique le résultat à l’objet SoundTransform ce qui modifira les propriétés du canal son.
Voilà c’est fini pour la partie Webradio! Si vous voulez des fonctionnalités supplémentaires faites le moi savoir ;) Par contre, sachez qu’on ne peut pas récupérer les tags ID3 d’un flux continu, en tout cas pas directement avec ActionScript.
-
IV) Des modifs pour un lecteur MP3!
Pour le lecteur MP3 il manque l’affichage des tags ID3, et la barre de progression. Je ne vais pas vous expliquer en détails car ce n’est pas le but principal de ce tuto; veuillez voir le code ci-dessous, et regardez dans la source (en bas de page).
var stream:URLRequest = new URLRequest("test.mp3"); // A changer
stop();
// On importe les packages nécessaires
import flash.events.Event;
import flash.media.ID3Info;
import flash.media.Sound;
import flash.media.SoundLoaderContext;
import flash.net.URLRequest;
this.play1.buttonMode=true;
this.stop1.buttonMode=true;
// Lorsque le curseur est en dehors du bouton
this.play1.addEventListener(MouseEvent.MOUSE_OUT, playMouseOut);
// Lorsque le curseur est sur le bouton
this.play1.addEventListener(MouseEvent.MOUSE_OVER, playMouseOver);
// Lorsque le curseur appuie sur le bouton
this.play1.addEventListener(MouseEvent.MOUSE_DOWN, playMouseDown);
this.stop1.addEventListener(MouseEvent.MOUSE_OUT, stopMouseOut);
this.stop1.addEventListener(MouseEvent.MOUSE_OVER, stopMouseOver);
this.stop1.addEventListener(MouseEvent.MOUSE_DOWN, stopMouseDown);
// Et maintenant, les fonctions.
function playMouseOver(event:MouseEvent):void {
this.play1.gotoAndStop("top");
}
function playMouseOut(event:MouseEvent):void {
this.play1.gotoAndStop("normal");
}
function playMouseDown(event:MouseEvent):void {
this.play1.gotoAndStop("clique");
}
function stopMouseOver(event:MouseEvent):void {
this.stop1.gotoAndStop("top");
}
function stopMouseOut(event:MouseEvent):void {
this.stop1.gotoAndStop("normal");
}
function stopMouseDown(event:MouseEvent):void {
this.stop1.gotoAndStop("clique");
}
var finie:Number = 0;
var bouton_play_alpha:Number;
// Le son n'est pas encore joué, la variable "played" contient 0
var played:Number = 0;
var son:Sound = new Sound();
// 6,5 secondes de Buffer.
var bufferTime:int = 6500;
var canal:SoundChannel = new SoundChannel();
var soundVol:SoundTransform = new SoundTransform();
// On load le son
son.load(stream);
// Longueur du masque "masque" situé dans le MC "barre"
var posMasque:Number = barre.masque.width;
// Longueur du masque "masqueChargement" situé dans le MC "barre"
var posMasqueChargement:Number = barre.masqueChargement.width;
// On fixe la longueur du "masque" à 0
barre.masque.width = 0;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
son.addEventListener(Event.ID3, id3Handler);
function id3Handler(event:Event):void {
// Récupération des infos ID3 de la musique
var id3:ID3Info = son.id3;
var artiste = id3.artist;
var track = id3.songname;
// Affichage de l'auteur et du titre
titre.text = artiste + " - " + track;
}
function onEnterFrame(event:Event):void {
// Position de lecture
var position:Number = canal.position;
var chargementSon:Number = son.bytesLoaded / son.bytesTotal;
var longueurEstimee:int = Math.ceil(son.length / chargementSon);
var longueurSon:Number = son.length;
var scale:Number = position / longueurEstimee;
barre.masqueChargement.width = posMasqueChargement*chargementSon;
barre.masque.width = posMasque*(scale);
this.play1.addEventListener(MouseEvent.CLICK, clickPlay);
this.stop1.addEventListener(MouseEvent.CLICK, clickStop);
}
// S'il y a un problème de chargement, on exécute la fct erreur_lecture.
son.addEventListener(IOErrorEvent.IO_ERROR, erreur_lecture);
// Pendant le chargement, on affichera un pourcentage.
son.addEventListener(ProgressEvent.PROGRESS, chargement);
// Pour être sûr de ne pas voir le bouton Stop à l'arrière, on lui applique la valeur alpha = 0, il devient invisible.
stop1.alpha = 0;
function clickPlay(event:MouseEvent):void {
if (played == 0) { // Si le son n'est pas encore joué.
function onComplete(event:Event):void {
titre.text = "La musique est finie";
play1.width = 65;
played = 0;
finie = 1;
position = 0;
}
// On obtient la position de lecture
var position:Number = canal.position;
if (finie == 0) {
// On joue le son en fonction de la position
canal = son.play(position);
}
else if (finie == 1) {
canal = son.play(0);
}
canal.addEventListener(Event.SOUND_COMPLETE, onComplete);
// Le son est joué, la variable "played" prend la valeur 1, vous verrez pourquoi après.
played = 1;
// On affiche le bouton Stop
stop1.alpha = 1;
// On change la largeur du bouton Play à 0, il est donc... inexistant.
play1.width = 0;
// on met le curseur de volume au maximum
reg_volume.curseur.x = widthPos;
// Affiche Play !
infos.text = "Play !";
}
else {
// Si le son n'est pas joué avant d'avoir appuyé sur Play, c'est qu'il y a une erreur donc on l'affiche dans le texte dynamique "infos"
infos.text = "Erreur.";
}
}
function erreur_lecture(event:Event):void {
// Si la musique n'existe pas
infos.text = "Music absente";
}
// Pour les lecteurs MP3 simple ==>
function chargement(event:ProgressEvent):void {
var ratio:Number = event.bytesLoaded / event.bytesTotal;
var pourcent:int = Math.round(ratio * 100);
if (pourcent < 100) {
// On affiche le pourcentage de chargement dans le texte dynamique "infos"
infos.text = pourcent + "%";
}
else if (pourcent == 100) {
// on supprime l'évènement de chargement.
son.removeEventListener(ProgressEvent.PROGRESS, chargement);
infos.text = "Chargé !";
}
}
// <== Pour les lecteurs MP3 simple
function clickStop(event:MouseEvent):void {
if (played == 1) {
played = 0;
son.removeEventListener(IOErrorEvent.IO_ERROR, erreur_lecture);
son.removeEventListener(ProgressEvent.PROGRESS, chargement);
canal.stop();
play1.width = 65;
infos.text = "Stop !";
}
}
reg_volume.curseur.addEventListener(MouseEvent.MOUSE_OUT, curseurMouseOut);
reg_volume.curseur.addEventListener(MouseEvent.MOUSE_OVER, curseurMouseOver);
function curseurMouseOver(event:MouseEvent):void {
reg_volume.curseur.gotoAndStop("top");
}
function curseurMouseOut(event:MouseEvent):void {
reg_volume.curseur.gotoAndStop("normal");
}
var ratio_volume:Number;
var trackBounds:Rectangle = reg_volume.getBounds(reg_volume);
var xPos:Number = trackBounds.x;
var yPos:Number = trackBounds.y;
var widthPos:Number = trackBounds.width-reg_volume.curseur.width;
var heightPos:Number = 0;
var bounds:Rectangle = new Rectangle(xPos,yPos,widthPos,heightPos);
reg_volume.curseur.x = widthPos;
reg_volume.mouseEnabled = false;
reg_volume.curseur.buttonMode = true;
reg_volume.curseur.addEventListener(MouseEvent.MOUSE_DOWN,Slider);
stage.addEventListener(MouseEvent.MOUSE_UP,Slider_Stop);
function Slider(event:MouseEvent):void {
event.target.startDrag(false,bounds);
addEventListener(Event.ENTER_FRAME,regVolume);
}
function Slider_Stop(event:MouseEvent):void {
reg_volume.curseur.stopDrag();
}
function regVolume(event:Event):void {
if (played == 1) {
ratio_volume = reg_volume.curseur.x/widthPos;
soundVol.volume = ratio_volume;
canal.soundTransform = soundVol;
}
else if (played == 0) {
soundVol.volume = 0;
canal.soundTransform = soundVol;
}
}
PISTES pour améliorer le lecteur MP3:
- ajouter une playlist XML
- barre de progression cliquable pour avancer dans la musique
A vous de jouer !
Pour intégrer votre radio dans une page Html, utilisez le code ci-dessous !
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="465" height="145" align="middle"> <param name="wmode" value="transparent" /> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="nom_du_fichier.swf" /> <param name="quality" value="high" /> <embed src="nom_du_fichier.swf" quality="high" width="465" height="145" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></object>
Si vous avez une question, un problème, écrivez un commentaire en bas de page, je suis à tout moment à votre disposition.
Téléchargez:
Le fichier source du tuto, pour la Webradio
Le fichier source du tuto, pour le lecteur MP3
Design de la radio, version PSD Photoshop
NB: Etant donné la gratuité et la longue durée de notre travail, il serait aimable de mettre un petit lien sur votre page web, lorsque vous utiliserez l’un des player ci-dessus. Ce n’est pas obligatoire mais ce serait vraiment apprécié =)
Si vous voulez un player webradio en flash, visitez également notre partenaire Seetweb.

![scoopeo:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/scoopeo.png)
![fuzz:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/fuzz.png)
![tapemoi:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/tapemoi.png)
![nuouz:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/nuouz.png)
![blogmemes:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/blogmemes.png)
![bookeet:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/bookeet.png)
![pioche:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/pioche.png)
![digg:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/digg.png)
![del.icio.us:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/delicious.png)
![spurl:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/spurl.png)
![wists:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/wists.png)
![simpy:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/simpy.png)
![newsvine:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/newsvine.png)
![blinklist:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/blinklist.png)
![furl:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/furl.png)
![reddit:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/reddit.png)
![fark:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/fark.png)
![blogmarks:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/blogmarks.png)
![Y!:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/yahoo.png)
![smarking:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/smarking.png)
![magnolia:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/magnolia.png)
![segnalo:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3.](http://webiswell.fr/wp-content/plugins/wp-bling-this/segnalo.png)





















C'est à vous de commenter !
113 Commentaires pour "[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3."
Enorme !! bravoo
C’est pas mal dutout comme tuto !
Qu’en est-il de la gestion de la fuite mémoire de Flash avec le stream d’une WebRadio ?
Si on laisse trop longtemps le flash allumé sur une webradio, ca charge la mémoire de l’ordinateur jusqu’à ce qu’il n’y en ai plus.
Comment faire pour y remédier ?
Merci
@MisterG: Oui tu as raison, c’est ce qu’on appelle le memory leak.
J’ai 2 solutions, on peut ajouter un ByteArray:
var bytes:ByteArray = new ByteArray();
readBytes(bytes, 0, bytesAvailable);
bytes = null;
ou alors couper et relancer la radio pour vider le buffer avec setInterval() , mais ça je déconseille fortement.
Je vais me pencher dessus, et je l’ajouterai à la source ;)
Super tutot, bon taff !!!!!
Petite question, est ‘il possible de récupérer les titres des morceaux de la webradio
Je diffuse via icecast 2 et j’aimerai voir les tracks s’ afficher
@Paradox: C’est possible mais il faut utiliser une technologie autre que Flash, car la méthode ID3info ne permet pas d’afficher les tags d’un flux streaming…
Voilà le seul lien exploitable que j’ai trouvé: http://www.sheer.us/code/flex/wshr.mxml
voila, je trouve ce lecteur tres beau et tres simpa.
Seulement, sur Adobe flash cs3, tout vas bien, le flux est recu et fonctionne mais une fois exporter en swf, le lecteur plante a 4% de chargement et cela que je mette le crossdomain.wml a la racine du site ou pas.
je cherche a pouvoir avoir le flux :
http://sv0.minisite.vestaradio.com:9360 ou
http://sv0.vestaradio.com:9360
sachant que le site utiliser est generer par xoops.
Voila, si vous pouviez me depannez, cela m’arangerai pas mal.
Merci encore pour votre lecteur, il a l’air genial.
Je me suis trompé dans le tutoriel, le crossdomain.xml doit être placé sur le serveur qui envoie le flux (et non sur le serveur qui héberge le flash…).
C’est pour ça que certains flux restaient bloqués à 4% !!
Bonjour à tous, j’aimerais savoir si pour les webradios le flux pls est acceptable car lorsque je met mon adresse stream le player reste bloqué a 4 % pourriez vous m’aider ? D’avance merci
Oui ce bloquage est dû au crossdomain.xml je t’invite à voir cette partie:
http://webiswell.fr/09/12/2008/tuto-creer-le-flash-de-votre-lecteur-audio-avec-flash-cs4-et-actionscript-3-785/#crossdomain
Tu dois mettre le fichier sur le serveur qui envoie le flux. =)
Dis moi si ça marche!
Merci de ta réponse. Si je comprends bien si on a un hebergeur web il ne faut pas mettre le fichier sur celui ci mais plutot sur le serveur shoutcast que l’on a commandé par exemple chez wanastream ?
Exactement! Le problème c’est que les services webradio de ce genre n’acceptent pas le crossdomain. Demande-leur pour être sûr =)
bonjour comme modifier le ip+port du webradio.fla avec cs3 je veux prendre votre player default et metre que mon shoutcast et merci
voila j’ais trouvé et si j’ais un stream .pls exemple
http://87.98.155.4:8000/listen.pls
une otre erreur j’ais mis http://87.98.155.4:8000 sa se stop a 4%
http://angereasrt.olympe-network.com/yu2.swf
Okay ahmed, ça fonctionne ? (N’oublie pas le crossdomain…)
bonjour j’ais mon propre streaming mais ou dans la racine du Dossier shoutcast
@ahmed: c’est normal pour les 4%, met le fichier crossdomain.xml à la racine de ton serveur (87.98.155.4:8000)
je le mais ou le crossdomain.xml ou dans mon server ?
je c’est pas elle est ou la racine de 87.98.155.4:8000 :s le shoutcast et installer dans c:\SHOUTcast c’est tout
Mets le là oui, le problème vient de Shoutcast.
Nous avons utilisé IceCast et tout fonctionne bien. Tous ceux qui utilisent Shoutcast ont un problème de Loader Policy.
Essaye de chercher sur google « crossdomain shoutcast », personnellement j’ai trouvé ça:
http://www.developpez.net/forums/d220561/webmasters-developpement-web/flash-flex/flash/streaming-audio-shoutcast/
ok merci je vais voir
il disent que sa marche pas avec shoutcast mais j’ais vue des players flash sous shoutcast
j’ais fais le crossdomain et sa blok tjr
http://forums.winamp.com/printthread.php?s=799480f2c2a5ca3a2e587a6954a94ecc&threadid=287887
Essaye de mettre ce flux dans Shoutcast:
http://87.98.155.4:8000/;stream.nsv
et non pas http://87.98.155.4:8000 !
oui sa marche a merveille YEah Yah
le son se joue un peux aigue sur firefox
Un peu aigüe?
Je crois que tu as fait des réglages dans ton lecteur audio (Windows Media Play ou Winamp), mais forcément dans le flash tes réglages ne sont pas pris en compte…
heu regarde
http://webvipradio.olympe-network.com/webradio_CS3.swf
Bah chez moi ça marche bien ^^
Ok merci pour se jolie tuto en attend d’otre tuto etc ! :p merci webisdev trop cool aussi
je suis entrin de devloper le player je viens d’att le titre en ecoute
Bravo pour le lecteur et ce tuto ;-)
Qui as une piste pour intégrer dans le player (webradio) les titres (ID3Tag).
Je suis également à la recherche d’un script afin d’intégrer dans mon player la pochette du morceau en cours et un système de vote !
Merci
Salut pierre, pour les tags id3 c’est tout a fait possible avec shoutcast et un script php. Envoie moi un mail je te l’enverrai ce soir.
le probleme du memory leak pour la version webradio est réglé, quelle solution adopté sinon ?
merci d’avance
Bonsoir,
Tout d’abord bravo pou votre tutoriel si poussé et détaillé… c’est une mine d’or. Cela dit, j’ai pour ma part un problème d’intégration je pense. Car lorsque je tente d’intégrer le flash fourni dans une page HTML, une fois mis en ligne, rien… le flash se charge parfaitement, mais lorsque je veux lancer en cliquant sur le BTN play, rien ne se lance… j’ai intégrer de la manière dont vous le recommandez. Je suis sous CS3… si vous aviez une petite idée ça serait cool ^^MERCI à vous
Hello Juju,
c’est parce que notre serveur est éteint, change l’adresse du flux, et enjoy ;)
Salut ludo, merci de ta réponse.
Je faisai des tests avec mon propre fulx pourtant. MAIS en trifouillant un peu et en lisant bien en détail, maintenant ça bloque à 4% alors que j’ai placé le crossdomain.xml à la racine du serveur émettant le flux audio…
Faut il mettre quelque chose à la place de l’étoile dans le fichier crossdomaine ??
Désolé je suis une buse lol
ça veut dire que tu as Shoutcast, et que tu dois mettre ;stream.nsv à la fin. Exemple: http://127.0.0.0:8000/;stream.nsv
Ah merci ça marche ^^ t’es un géni lol
J’ai cherché longtemps moi aussi :D
Arf moi ca marche pas du tout, mais je crois que c’est parceque mon adresse fini par m3u et non MP3.
http://srvrecc2.univ-mlv.fr:8000/recc.m3u
c’est cette adresse que je voudrais lire.
Essaye juste http://srvrecc2.univ-mlv.fr:8000/
alors ca ma fait loader a 3% au lieu de rester figé a 0.
Cependant ya aussi un flux ogg a la meme adresse http://radio-recc.org:8000/live.ogg
http://srvrecc2.univ-mlv.fr:8000/recc.m3u
Je crois avoir compris. Le flux est en OGG et non MP3, or le lecteur ne lis que les MP3.
Regarde bien le tuto de Nelson sur comment installer son serveur, il y a une manip’ pour mettre le flux en MP3.
bin en faite j’ai bien 2 flux généré en même temps, un ogg et un m3u. c’est le m3u que je pensai pouvoir lire.
OGG est un format audio, M3U est une liste de lecture pour lire son flux avec VLC, Winamp, etc…
Il faut que tu rajoutes un flux MP3.
Mille merci ! j’ai été piégé par le nom du format, m3u étant proche de mp3 j’ai cru que forcément cetait du mp3 dedans. En effet mon client avais du ogg dedans ! Merci de l’aide cetait une fuate un peu bête lol
Bonsoir, c’est encore moi lol.
Je me suis apperçu d’un « bug », alors que je voulais changer les boutons PLAY et STOP pour faire mon propre lecteur… je e suis apperçu que lorsque je clik une fois sur le bouton play, il lance bien la radio, mais quand je clique sur STOP juste après, mon bouton PLAY est écrasé automatiquement… j’ai pourtant remplacer les boutons dans la bibliothèque, c’est super curieux !
Auriez-vous une idée ?
Tu as changé le design des boutons?
Je sais pourquoi: tu dois aller dans le code source, et regarde au niveau des « play1.width » ou « stop1.width ».
Envoie moi ton fla par email sinon =)
Encore bien vu lol affaire réglée MERCI
Génial, je suis également sur le développement d’un lecteur mais toujours le meme probleme : comment régler cette question de mémory leak qui crash le navigateur ??
Si vous avez une réponse…..car j’en peux plus
Merci
Finalement on peut se dire que la memory leak n’est pas si grave que ça. Ca dépend de la taille de la ram de son ordinateur, mais de nos jours les PC ont minimum 1go voire 512mo à la limite. Ce qui leur permet de tenir environs 30min-1h, quant à ceux qui ont + de 1go ils peuvent tenir 1h30-2h.
Mais bien sûr, la ram se remplie et si vous faites quelques chose à côté comme Photoshop ou After Effects, ça devient plus gênant.
le paradoxe est qu’une webradio diffuse 24h/24 donc si au bout d’une Heure ça plante, ça le fait pas trop….
à croire que flash n’est définitivement pas le langage adéquat pour gérer un flux continu (sans bidouiller)….et c’est bien dommage.
Finalement est-ce que la seule solution n’est pas de passer par flash media server qui lui gère le streaming en rmtp ?
Oui mais le paradoxe c’est aussi qu’un auditeur ne reste pas 24h/24 connecté à la radio!
Pour une radio professionnelle ce n’est pas du tout l’idéal, mais pour des webradio amateurs ou semi-pro ça ne les dérangera pas!
Quant à Flash Media Server je n’ai pas trop regardé!
ok merci quand meme.
Sinon à part ça super boulot pour le reste.
Merci et bravo pour ton tuto.
De rien, mais si de ton côté tu trouves un moyen efficace pour le memory leak (en AS3) je suis preneur ;)
Bonjour,
Voilà j’effectue un stage qui doit consister en la réalisation d’une webradio.
En fait cette webradio devrait être disponible et accessible part n’importe qu’elle personne voulant l’utiliser MAIS pas seulement pour l’écouter mais aussi pour la GERER !
Je m’explique : quant je parle de la gérer en fait il faudrait que de n’importe quel endroit, une personne participant aux activités de cette radio voudrai diffuser son info ou sa musique de son PC via un nom d’utilisateur ou autre bien sûr mais assez facilement (pas avec winamp et icecast tout sa) ou alors il faudrait une petite formation à chaque fois pour chaque personne qui voudrait diffuser mais ce n’est pas ce que l’on me demande pour cette partie de la Webradio, bien sûr il y aurait toujours une partie gérée avec icecast sur le serveur mais qu’une seule personne gérerait.
J’ai donc suivi vos tuto qui m’ont déjà bien aider et j’ai donc réalisé cette webradio mais j’aurai plutôt voulu savoir comment faire ce Lien entre la webradio créée et le fait de diffuser ??
Donc voilà j’espère m’être fait comprendre ???
Et si vous avez des infos n’hésitez pas ;)
Encore merci pour ces tutos ;)
J’aimerais bien te répondre mais je ne sais pas du tout comment faire ce « lien » désolé…
Salut Ludo,
A Priori, le lecteur fonctionne sur Firefox, Safari et Opéra… mais comme par hasard sous Explorer ça merde. D’ailleurs à l’intégration dans Dreamweaver, grâce au code fourni ici, le soft nous demande de le convertir autrement les dernières versions d’Explorer ne le prendront pas en compte, et le flux ne démarrera pas… Et effectivement, sous ma version Explorer, le lecteur tourne nikel tandis qu’un ami a voulu lancer la radio et … que dalle.
As- tu déjà rencontré ce problème ?
Bonjour Ludo
Ton tuto est très bien fait, et le player efficace. Le seul véritable problème est le leak memory qui fait planter rapidement les machines qui souhaitent écoutez la webradio plus d’une heure …
Je ne sais pas comment pallier à ce problème, par contre j’ai trouvé un site qui édite un player qui lui arrive à supprimer ce défault de fabrication de flash player. Il y propose un player gratuit mais aussi une source payante. http://www.draftlight.net/dnex/mp3player/minicaster/pro/ De plus la version payante propose d’afficher les metadata de icecast2 ce qui est très utile. Voilà pour l’info, je vais me procurer la version payante pour le site de la webradio mais ne connaissant rien en AS3 je ne pourrais pas te dire comment ils ont réussi à contourner le problème.
En tout cas bravo pour ton tuto !
Salut,
Je rencontre un problème avec un player que j’essaye de développer en AS3 avec CS3. Lorsque je lance la lecture du flux (shoutcast ou icecast) il arrive parfois que le son est joué trop lentement ou trop vite. J’ai donc essayé avec votre player et je rencontre exactement le même problème. Il semble que le problème se produise avec Flash Player 9 et pas avec Flash 10. Est-ce que vous avez le même problème? Pour mettre cela en évidence, je recharge le swf et appuie sur le bouton play jusqu’à ce que le problème se produise. Est-ce que cela ne viendrait pas des paramètres de publication du swf?
Bonjour les amis, bientôt sur webiswell.fr : le nouveau Player Webradio Flash AS3, Gratuit !
Bientôt sur http://webiswell.fr/wellradio/
Salut ralawa, j’ai déjà rencontré ce problème (une musique qui ralentissait), ça arrive très rarement, et je ne sais pas pourquoi ça fais ça désolé…
Bonjour ludo,
je n’arrive pas à comprendre pourquoi créer un fond_2 dans fond ?
à quoi cela sert-il, vu que fond n’a pas de code ?
merci.
J’ai fais ça pour pouvoir faire un effet de fondu. Il y a donc un seul clip sur la scène principale, et ce clip contient un autre clip (fond_2) auquel on applique une interpolation.
bonjour, j’utilise flash cs3 mais sous mac os x, et il y a certaines fonctions que je n’arrive pas a faire, soit parce que la commande ne se trouve pas sur le bouton droit ou soit parce le raccourci claviers ne sont pas totalement les memes… je commence a bloquer ou il faut tester la barre de chargement, g réussi a la faire a priori mais y il y une erreur et sa ne marche pas correctement, sa ne charge pas.. enfin je trouve pas « simuler le chargement »…
help please !
Désolé Jim je ne peux pas te répondre « comme ça » ^^ Peux-tu m’envoyer ton fichier source par email? (voir dans la section Contact)
Bonjour,
déjà merci pour ce tuto très explicite. J’aurai une question par contre: Est-il possible d’utiliser cette source pour lire le flux de cette radio:
http://streaming.radionomy.com:8000/MxLive.m3u
A vrai dire j’ai déjà testé mais sans succès… donc est-ce qu’il y a une solution? merci d’avance.
Bonjour copy,
essaye avec cette adresse: http://streaming.radionomy.com:8000/MxLive
;)
Waow sa c’est de la réponse rapide et sa marche très bien comme sa merci Ludo ;)
Il me reste plus qu’à récupérer les titres des morceaux. Encore merci
Bonjour les collègues,
Actuelment je suis vos messages .
Bon alors J’ai besoin savoir Si c’est compatible avec les téléphones
mobile. Et aussi Si c’est possible de me contacté par email ( En Urgence ).
Je ne sais pas il faut tester, mais généralement les téléphones mobiles sont compatibles avec FlashLite uniquement, donc ça équivaut à Flash 4 ou 5. Ce qui réduit les performances!
Il faudrait essayer avec un N95, un iPhone, et un mobile sous Windows Mobile 6.
bonjour,
je voudrais savoir pour le code de chargement barre , est ce qu’il faud copier coler sans modifier ou le modifier? et qu’elles sont les composants que je dois modifier? merci d’avance
stp j’ai du mal a telecharger les videos d’aide au tuto, stp peut tu me les faire parvenir par mail ou messenger?
bonjour je fait comme il falé pour les boutons (normalement),
je ajouter le code et en suite je le testé mais sa ne marche pas il marque en ba de la page dans le sorti
TypeError: Error #1010: Un terme n’est pas défini et n’a pas de propriété.
at Sansnom_fla::boutonstop1_9/frame1()
at flash.display::MovieClip/gotoAndStop()
at Sansnom_fla::MainTimeline/chargement_termine()
perssone peu m’expliqué ou exactement les ereurs?
merci d’avance
Bonjour,
Je dois réussir a lire sur mon player l’adresse d’un straeming provenant d’un serveur, ce stream fonctionne très avec un autre player genre WMP sur une page web, Mais moi lorsque j’entre l’adresse de ce streaming dans mon flash => var stream:URLRequest = new URLRequest(« http://alanturing.all2all.org:8000/MOC_HC.m3u »);
comme sa, juste copié l’adresse car avant sa allai avec une autre mais elle étai en mp3 et ici en M3U …. Avez vous une idée du soucis car en fait le player reste bloqué à O% !!
Merci d’avance
Benoît
Hello Benoit, essaye tout simplement avec http://alanturing.all2all.org:8000
:D
C’est bien gentil mais cela ne change rien du tout…
moi je pas servi le lecteur flash je pri un autre simple en html voila le script:
et va voir ici http://www.radiostadegabesien.com
chez moi il marche tres bien, mais la probleme j’ai des contacts dans des autres pays ils mon dis que sa marche pas chez es , perssonne peut m’expliqué pour quoi merci d’avance
slt voila j’ai un gros probleme tout marche avec dreamweaver ms quand je transfere le tot sur ifrance mon lecteur n’apparait plus que fairesvp???
j’ai reussi ms maintenant le pb c’est que chez moi sa marche et chez les autre non help me svp !!
bonjour a tous, bon voila j ai l intentention de mettre sur mon site ce playeur en flash.Merci aussi pour le tuto.Cependant, j ‘ai une question a 1 euros (lol) ou dois je mettre l’adresse de mon flux audio dans ce playeur?
merci a +
On voit ceux qui suivent le tuto et ceux qui le suivent pas :D
Bon tu vas sur la deuxième image de l’animation, tu ouvres le Movie Clip sur la scène en double cliquant dessus, tu vas sur la dernière image, tu ouvres le Movie Clip de la scène, et tu cherches le calque contenant les actions.
heu bah merci pour la reponse mais je suis novice en flash !!sorry!! en programmation radio et juridique no soucis :)mais le flash pour moi c du javanais :(
donc je fais comment ? j importe fichier ou je l ouvre et lequel?
Pas de problème, va dans la section « Contact » et envoie moi un mail avec l’adresse du flux et le fichier .fla, je te le mettrai.
Excellent, c’est en plein ce que je cherchais!
Je me demande seulement comment je vais faire pour le faire jouer automatiquement, une fois que mon url est chargé. En avez-vous une idée?
Bonjour Ludo,
j’ai le même problème que Brock et je ne suis pas très familier avec le actionscript. Qu’est-ce que je dois faire pour que le player démarre automatiquement (comme si play était actionner).
Merci pour ce tuto et @+
Ah oui, pour le memory leak, je prévois mettre une minuterie qui demandera à l’utilisateur de re-démarrer la musique après x minutes. s’il ne clique pas, ça arrêtera automatiquement. je crois que ceci empêcheras le memory leak.
@+
Pour démarrer automatiquement, il y a quelques passages à modifier si je me rappelle bien.
Déjà il faut copier toute la partie load du son qui se trouve dans la fonction clickPlay, en dehors de la fonction. Mais laissez le son.play()
Et en suite il faut initialiser la variable played à 0.5 et non 0.
Puis changez stop1.width = 0 en play1.width = 0
Lu Ludo j’aimerai savoir si sa serait possible que tu fasse un lecteur pour ma webradio contacter moi yann-camilleri@live.fr merci d’avance
Ouhouh c nickel sa fonctionne :p Je diffuse le propre so qui sort de mon pc vers l’extérieur ;)
Excellent ce tutorial !!! merci ;)
Bonjour,
Il y a un probléme quand on change les boutons play et pause comment peut t’on résoudre ce probléme ?
Est t-il possible de récupérer le titrage d’un icecast?
Merci
Il y a un problème de redimensionnement donc il faut modifier les valeurs stop1.width ou play1.width :)
Oui il est tout à fait possible de mettre le titrage (IceCast et ShoutCast), mais cette fonction est disponible uniquement dans la 2ème version du player que je n’ai pas encore mise en ligne.
Merci ,
Ou faut t-il modifié play1.width ou stop1.width dans le code ? je ne voit pas de taille
Quand sort la prochaine version du player?
Merci
Envoyez moi un e-mail (disponible dans Contact), je vous enverrai la nouvelle version :)
C’est envoyé
Merci
C’est envoyé
Merci
j’aimer avoir la dérniére version!merci
SALUT, (je fais un grand salut parce-que vous le mérité grave !!! ;) )
Bref ca y est j’ai fini mon lecteur grâce à vos précieux conseils, voici l’adresse ou il est pour l’instant « http://www.radio.rap2rue.net ». Cependant j’aimerai savoir si vous saviez comment procédé pour mettre les infos streaming des chansons joué sur la radio ??? En effet actuellement je doit payé pour un truc pas beau et qui doit se rajouté indépendamment du player radio ( c’est moche, j’ai recherché un code, mais sans suite toutes mes tentative ont été vaine lol. Merci encore pour le boulot altruiste que vous avez fourni c’est formidable :)
Salut ludo serait-il possible que tu m’envoie la nouvelle version de la webradio? Même si ce n’est que le .swf ça m’arrangerai énormément merci d’avance :).
copy@mxlive.fr
Bonjour, je ne comprend pas très bien comment introduire la radio sur mon site. et pouvez vous me dire ce qu’est le FTP merci davance au revoir.
Débutant dans l’aprentissage de l’Action Script, j’admire ce que tutoriel !
Comme je suis entrain d’apprendre, je voudrais juste savoir combien d’années d’expérience vous avez en Action Script ?
Combien de temps par jour avez vous consacrez pour apprendre a faire de super truc comme sa ?
Et est ce normal qu’au départ sa semble quasi impossible pour un débutant, Rappelez nous vos souvenir de débutant en Action Sript !
En tout cas Bravo pour ce Tuto, le Résultat est SUPERBE !
g un souci je n’entends pas le son de la radio de jazz quand je controle mon flash et pourtant il n’y a pas d’érreur mon serveur c icecast pouvez vous m’expliqué svp
Si vous avez une question à poser, postez là ici, je ne réponds plus par mail :)
Bonjour d’abord felicitation pour ton merveilleux tutoriel , j’ai une question j’ai choisi avec edcast mp3 lame , tout fonctionne à merveille , quand je donne à mes contacts pour le test l’url :
http://pnkumu.no-ip.org:8000 tout fonctionne bien , la page icecast s’ouvre correctement et en cliquant sur m3u la lecture se passe correctement mais pour passer outre la page icecast en voulant que mes contacts ouvre directement en lien en envoyant l’url http://pnkumu.no-ip.org:8000/stream.ogg.m3u ou en mettant à la fin ../stream.mp3 ou ../stream.mp3.m3u tout se passe bien avec mozilla mais avec IE7 ou IE8 j’ai toujour la page : impossible d’afficher la page ou page not found , y a til un probleme de compatibilité avec internet explorer ?
Bonjour,
Pouvez-vous m’envoyer les cauridas de la v2 svp ? je les est perdu.
Merci
Bonjour Ludo excusez moi de vous déranger, d’abord je tiens à vous féliciter pour ce tutoriel comme toutes les autres personnes. Et comme vous devez vous en douter j’ai un soucis avec mes boutons play et stop:
Quand je place mon curseur sur le bouton play celui ci se met à devenir chaque bouton play: btn_top,btn_normal, btn_clique et cela continue de plus quand je clique rien ne se passe et le bouton arrêt ne remplace pas le bouton play.
Pourriez vous m’aider s’il vous plais?
Salut,
Juste un petit mot pour te dire que j’utilise ton player pour ma Webradio…
Il est super mais comment on fait pour afficher le titre de la musique en Cours ??
Bonjour,
En premier lieu Merci et bravo de proposer un tuto comme celui-ci c’est vraiment génial pour ceux qui débutent.
J’en viens à mon problème j’ai créé la barre de chargement mais lorsque que je veux voir ce que ça donne la barre de chargement et le player clignote l’un sur l’autre et l’erreur de compilation suivante apparaît :
Séquence 1, Calque’Calque 6′, Image 1, ligne 3
1087: Erreur de syntaxe : caractères excédentaires détectés après la fin du programme.
Que dois-je faire pour remédier à cela ?
De plus ce player est-il apte pour le streaming en live d’une radio ?
D’avance merci pour votre aide.
:)
Bonjour se tuto est excellent mais comme pour les autre j’ai un problème j’ai installe ma web radio sur le site sa fonctionne bien sauf qu’il me faut actualise plusieurs foi avant d’avoir acce a ma radio il a fiche un trait rouge quand sa fonctionne pas surement une petite erreur de rien du tout mais la je vois pas quoi.
merci de votre aide.
Salut à tous,
J’ai un petit problème avec le lecteur quand je coupe mon serveur pour prendre l’antenne, je suis obliger d’actualiser la page pour réécouter sinon ça coupe toute les secondes…
Que puis-je faire pour régler ce problème ??
Bonjour,
je veut être un peut casse-pied mais j’ai ajoute le fichier crossdomain.xml j’ai également modifier l’URL http://87.98.155.4:8000/;stream.nsv. Mais les chargement bloque toujours a 4%.
coucou
j’ai vu on peut faire défilé les titre des musique qui défile comment faire? merci d’avance
Bonjour.
Je pense que jhe suis un gros boulet, ou alors encore pas bien réveillé….
j’ai essayé de metrrre des codes ds ma page mais rien n’y fait….
j’envoi un flux, et ça marche avec un lecteur windows…
mais j’ai des potes qui n’arrivent pas avec ce lecteur d’ou l’idee du flash (ps y a il des chos pour iphone…oui g des copains sympa mais qui sont pas comme tt le monde.)
du coup ça rame au demarrage
et j’ai pas de lecteur flash qui s’affiche.
J’ai mi le lecteur webradio.swf a la bonne adresse et ds le meme repertoire que le fichier crossdomain.xml…
si vos lanternes pouvaient m’eclairer…
merci
1 Trackback
[...] Bonne lecture et bon visionnage à tous. AKPC_IDS += "791,"; Wikio Wikio Abonnez-vous aux RSS ! Partager cet article sur Facebook! Articles Similaires:[Tuto n°3] Créer le flash de votre web-radio avec Flash CS3/CS4 et ActionScript 3. [...]