Le son de mon anim (simple) saccade sous FF et Opera

Le son de mon anim (simple) saccade sous FF et Opera - Flash/ActionScript - Programmation

Marsh Posté le 04-12-2006 à 09:42:07    

Salut,
 
Avant tout, voici le contexte de mon post:
 
Dans l'une de mes pages web, je dois avoir 17 instances d'un petit player, m e permettant de jouer un MP3 lorsque l'utilisateur clique sur un bouton.
 
Tout celà est créé, et fonctionne a priori très bien....sous IE.
 
Le problème, c'est que lorsque je clique sur l'un de mes boutons, que ce soit sous Firefox ou sous Opera, le son saccade énormément.
 
Je n'arrive pas à comprendre pourquoi.
Et le pire, c'est que lorsque je n'ai que 16 instances de mon player dans ma page (au lieu de 17), ça marche très bien.
 
Pour vous aide rà y voir plus clair et faire éventuellement un test, j'ai réduit mon problème à sa plus simple expression.
 
Si vous accédez à la page http://martin.lionel.free.fr/verysimple.html, vous pouvez voir une version ultra simplifiée, mais bugggant néanmoins:
 
Il y a dans cette page 17 swf.
Le premier (playme.swf) correspond à ce que pourrait être mon player. Un bouton à gauche permet de charger le son (à l'aide d'un loadSound) et le bouton  droite de jouer ce son, une fois qu'il est chargé.
 
Les 16 autres swf sont des swf ultra simples....un simple disque. (sous le fichier simple.swf).  
J'ai vraimet réduit le problème à l'extrême.
 
Pour info, les sources de mes 2 fichiers flash utilisés se trouvent là: http://martin.lionel.free.fr/playme.fla et http://martin.lionel.free.fr/simple.fla .
 
Pour info, j'ai testé avec Flash Player 8 et Flash Player 9.
 
Ce serait cool si l'un d'entre vous pouvait isoler le problème ou alors me dire si c'est une fatalité, car il y a trop de player dans la même page... (pourtant, les swf sont extrêmement légers)
 
Merci :hello:


Message édité par Yoyo@ le 04-12-2006 à 16:15:25
Reply

Marsh Posté le 04-12-2006 à 09:42:07   

Reply

Marsh Posté le 04-12-2006 à 10:27:49    

Mais c'est quoi l'interêt d'avoir 17 players sur la même page ?   :??:


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 04-12-2006 à 10:31:37    

Bah le but pour moi est de pouvoir jouer 17 sons, à 17 endroits différetns dans ma page HTML (je précise bien que ma page est HTML, car je ne veux pas avoir par exemple une page en Flash, avec 17 boutons....)
 
Le fait que les boutons soient localisés à 17 endroits différents m'impose bien d'avoir 17 objets swf, n'est ce pas?
 
Ceux ci sont très légers (moins de 1kb), et surtout, vu que le code source est unique, il est téléchargé une fois pour toute...

Reply

Marsh Posté le 04-12-2006 à 14:17:50    

Bon, voici au cas où le code de la première frame de mon composant.
 

var txtLoad:TextField;
var txtPlay:TextField;
var sndTrack:Sound = new Sound();
var my_fmt:TextFormat = new TextFormat();  
_root.createTextField("txtLoad", _root.getNextHighestDepth(), 10, 25, 80, 80);
txtLoad.selectable = false;
_root.createTextField("txtPlay", _root.getNextHighestDepth(), 100, 25, 80, 80);
txtPlay.selectable = false;
my_fmt.bold = true;  
my_fmt.size = 20;
my_fmt.align = "center";
txtLoad.setNewTextFormat(my_fmt);
txtPlay.setNewTextFormat(my_fmt);
var isLoaded:Boolean;
txtLoad.text = "Load\nSound";
 
sndTrack.onLoad = function(bSuccess:Boolean):Void {
 if(bSuccess){
  txtLoad.text = "Sound\nLoaded";
  txtPlay.text = "Play\nSound!";
  isLoaded = true;
  btnplay.onRelease = function(){
  if(isLoaded){
   sndTrack.start();
  }
}
 }else{
  isLoaded = false;
 }
};
 
btnload.onRelease = function(){
 sndTrack.loadSound("28_1_1.mp3",false);
}


 
Ce composant ne dispose que d'une frame, contenant mes deux rectangles servant de boutons.
Strictement rien d'autre...
 
Je me demande quand même s'il n'y a pas une erreur logique dans ce code.
Je n'arrive pas à m'expliquer le comportement très bizarre que j'observe avec Firefox ou Opera.

Reply

Marsh Posté le 04-12-2006 à 15:32:29    

Citation :

l y a dans cette page 17 swf.


 
c'est uniquement de là que ça vient, et c'est vraiment une idée à la con.
 

Citation :

us FF et Opera - Experts Needed


 
évite ce genre de choses dans l'intitulé, à moins que ton topic porte sur les pageable recordset sous Remoting. Ca fait pétard mouillé.

Message cité 1 fois
Message édité par craps_youpla le 04-12-2006 à 15:34:52
Reply

Marsh Posté le 04-12-2006 à 16:23:43    

craps_youpla a écrit :

Citation :

l y a dans cette page 17 swf.


 
c'est uniquement de là que ça vient, et c'est vraiment une idée à la con.[/quote]


Je veux bien (quoique je n'arive pas vraiment à comprendre pourquoi, je suppose que le plugin Flash ne reste chargé qu'une fois en mémoire), mais tu suggèrerais quoi?
Mon besoin est le suivant:
Dans ma page HTML, j'ai 17 endroits où j'ai besoin de pouvoir, à la demande de l'utilisateur, de jouer un son. J'ai donc besoin de 17boutons de lecture...
 
 

craps_youpla a écrit :


Citation :

us FF et Opera - Experts Needed


 
évite ce genre de choses dans l'intitulé, à moins que ton topic porte sur les pageable recordset sous Remoting. Ca fait pétard mouillé.


 
Bah disons que je pensais que pour ce problème (non encore résolu), il fallait quelqu'un avec un minimum d'expérience. (le mot expert et expérience ont la même racine). Pour ne pas offsquer qui que ce soit, j'ai édité....
 
Bon, pour en revenir à mon problème, et tant que je ne trouve pas comment faire sans mes 17 swf, j'ai continué mes tests.
Et aussi bizarre que ça puisse paraître, si je fais un sndTrack.loadSound("....", false) par défaut dans ma frame de départ, sans demander à l'utilisateur d'appuyer sur un quelconque bouton,  ça marche parfaitement (aucune saccade de son).
 
Bien entendu, cette solution n'est pas viable, car ça nécesiterait que toutes les pistes son soient téléchargées par défaut, ce qui serait très mauvais en terme de BP...

Message cité 1 fois
Message édité par Yoyo@ le 04-12-2006 à 16:24:44
Reply

Marsh Posté le 04-12-2006 à 18:18:32    

Yoyo@ a écrit :

mais tu suggèrerais quoi?


 
repenser ta maquette peut être ?


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 04-12-2006 à 19:15:12    

Zedlefou a écrit :

repenser ta maquette peut être ?


 
D'accord, donc, ça veut dire que sans chercher à comprendre, je dois me résigner?
 
Je me dois d'avoir mes 17 boutons dans ma page, accessibles, chacun pouvant jouer un petit son MP3 à la demande.... (du genre des sons de quelques ko/dizaines de ko).
 
Si j'avais pu faire communiquer de manière portable Flash et JS, j'aurais pu trouver une solution avec un player unique caché dans ma page, et marchant à la demande de JS. Seulement, une telle communication n'a pas l'air possible sous tous les navigateurs (i.e. IEWin, IEMac, Opera et Mozilla/Firefox).
 
Donc, je ne vois pas d'autres solutions que d'avoir 17 (petits) boutons.
Si vous avez d'autres suggestions, je suis preneur...
 
PS: Est ce que vous avez pu essayer la page que je donne plus haut, et confirmer que ça rame/saccade? Peut être y a t'il une coquille dans le code?

Reply

Marsh Posté le 05-12-2006 à 08:42:32    

Oui ça rame chez moi.
Et je continue à penser que mettre 17 swf dans une page, c'est pas une solution.
Essaie avec une play list ou repense la conception.


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 05-12-2006 à 08:54:53    

Zedlefou a écrit :

Oui ça rame chez moi.
Et je continue à penser que mettre 17 swf dans une page, c'est pas une solution.
Essaie avec une play list ou repense la conception.


 
Bon, c'est déjà ça de confirmé... Merci.
 
Alors, la playlist, ou le lecteur unique, j'y ai pensé, mais d'un point de vue utilisateur, ça ne permettra pas d'avoir un bouton de lecture à coté du texte. (le fait de demander à l'utilisateur d'aller utiliser une playlist en haut de la page pour entendre le son associé à une phrase n'est vraiment pas pratique).
J'ai également pensé à un bouton qui ouvrirait une popup avec le swf, mais cette conception des choses n'est pas non plus optimale (par exemple, s'il y a un filtre à popup. Et de plus, je perds le bénéfice d'un son restant en mémoire une fois qu'il est écouté pour la première fois sur une même page)
 
Comme je le ds plus haut, le top serait d'avoir un bouton/lien HTML communiquant avec un lecter unique dans ma page, mais il n'y malheureusement (à ma connaissance) pas de façon portable de communiquer avec un composant Flash.
 
Tu as des idées toi?
 
 
 
 

Reply

Marsh Posté le 05-12-2006 à 08:54:53   

Reply

Marsh Posté le 05-12-2006 à 09:04:14    

localConnection ?
J'ai jamais vraiment utilisé mais je crois que ça sert à ça.


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 05-12-2006 à 09:55:16    

Zedlefou a écrit :

localConnection ?
J'ai jamais vraiment utilisé mais je crois que ça sert à ça.


 
Alors, d'après la doc Flash:
 

The LocalConnection class lets you develop SWF files that can send instructions to each other without the use of fscommand() or JavaScript. LocalConnection objects can communicate only among SWF files that are running on the same client computer, but they can be running in different applications--for example, a SWF file running in a browser and a SWF file running in a projector.


 
Donc, uniquement pour communiquer entre des swf.
Et donc, je suppose que mon problème resterait entier: 17 boutons Flash (swf) communiquant avec mon player principal, soit 18 players en tout.
 
Sinon, je suis également allé voir du côté de ExternalInterface (permettant une comm entre JS et AS), mais le problème, c'est que ça ne semble pas compatible avec IE/MAC, ni avec OPera, et qu'enfin, ça nécessite Flash Player > 8...
 
Maid quand même, j'ai envie de persister avec mes 17 petits boutons, et comprendre pourquoi mon son saccade.
 
J'ai remarqué deux choses jusque présent:
-Si je fais un loadSound dèsle chargement de la première frame, au lieu de le faire sur le click du bouton, alors ça marche, cad pas de saccades (mais le problème, c'est que ça nécessite de télécharger tous les MP3 de la page dès le début, même s'ils ne sont pas joués)
-Si, après avoir cliqué sur mon bouton, je continue de bouger le souris sur mon swf, alors ça ne saccade pas non plus.
 
Bref, j'ai encore espoir quil s'agisse duune coquille dans mon code, d'un truc pas vraiment optimisé ou des ressources s'allouant plusieurs fois, je ne sais pas (je ne maîtrise peut être pas assez la bonne façon de scripter en Flash, et ce concept de Frame, d'alllocations de resources, etc...)

Reply

Marsh Posté le 05-12-2006 à 13:41:06    

Citation :

Maid quand même, j'ai envie de persister avec mes 17 petits boutons


 
Certes, mais moi j'ai envie de me mordre l'oreille, et ça n'est pas possible.

Reply

Marsh Posté le 05-12-2006 à 13:53:18    

héhé :D
 
En effet, comme tu le vois, Flash peut le faire et ça marche. Par contre beaucoup des machines utilisateurs ne le supportent pas. Ce n'est donc pas réalisable de cette manière.
 
Essaie avec LocalConnection. Tu donnes un ID à chaque piste MP3 et chaqun de tes boutons envoie cet ID à un player (swf) principal par LC.


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 05-12-2006 à 14:06:55    

Zedlefou a écrit :

héhé :D
 
En effet, comme tu le vois, Flash peut le faire et ça marche. Par contre beaucoup des machines utilisateurs ne le supportent pas. Ce n'est donc pas réalisable de cette manière.


JE n'arrive pas à comprendre pourquoi les machines utilisateur ne pourraient pas le gérer....LA trace mémoire reste très faible sur ma machine, et le taux d'occupation CPU aussi (non palpable). Donc, la raison est ailleurs...
 
 

Zedlefou a écrit :


Essaie avec LocalConnection. Tu donnes un ID à chaque piste MP3 et chaqun de tes boutons envoie cet ID à un player (swf) principal par LC.


 
Quand tu me parles de bouton, tu parles de bouton en Flash ou en HTML?
Car comme je te le dis plus haut, il est dit dans la doc Flash que le localConnection sert à communiquer entre deux composants swf...  
Donc, finalement, s'il s'agit de boutons swf, je vais bien me retrouver avec 17+1=18 composants dans ma page...

Reply

Marsh Posté le 05-12-2006 à 18:28:37    

bah oui mais au moins c'est pas des SWF qui vont chargés du son. Ils vont juste commander 1 player.


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 05-12-2006 à 18:53:35    

Zedlefou a écrit :

bah oui mais au moins c'est pas des SWF qui vont chargés du son. Ils vont juste commander 1 player.


 
Bah oui, mais dans mon exemple simple que je donne au début et qui rame, il n'y a qu'un seul swf qui joue du son...et ça rame.
 
J'ai passé ma journée sur ce truc, essayant de comprendre, etc...
 
Pour ma part, j'estime que le plugin Flash Player (utilisé par FF et Opera) est buggé et gère mal ses ressources...
Des fois, même avec un seul swf, le son saccadait.
Aucune raison à celà.
 
De plus, j'ai mis des tempo, etc... Et je me rends bien compte que ce plugin est beaucoup plus lent que le contrôle ActiveX utilisé par IE.
Bref, ce n'est pas la joie.
Il faut que je trouve une solution alternative (et j'ai déjà une idée ;) )
 
Sinon, quand même, j'en reste à me demander si mon code n'empire pas les choses.
 
Est ce que d'après toi, un tel code est correct et ne bouffe pas spécialmeent trop de resources (fichier fla, avec un seul layer et une seule frame, sans composant).
 

var snd:Sound;
if(src==undefined){ //can be specified using flashVars
  src="test.mp3";
}
if(snd==undefined){
  snd = new Sound();
  snd.onLoad = function(){
    snd.start();
  }
}
snd.loadSound(src, false);


Reply

Marsh Posté le 18-12-2006 à 16:15:53    

J'avais oublié de revenir pour donner un feedback.
 
Finalement, j'ai résolu mon problème...en le contournant.
Avec un petit peu de code JS, au lieu d'avoir 17 instances de mon player, je n'en ai en fait qu'une, et à chaque fois que l'utilisateur cherche à jouer un player, je décharge le player courant (remplacé par un node HTML) et charge le nouveau.
 
Ca marche au poil (testé sous plein de browsers), et d'un point de vue du serveur, c'est encore mieux, vu que mon player n'est en fait chargé qu'une seule fois.
 
D'un point de vue user, il a l'impression d'avoir ses 17 players à 17 endroits différents dans la page, mais plus rien ne saccade.
 
Le bénéfice de tout ça? Mon code reste clair, et je n'ai pas besoin d'utiliser d'ExternalInterface et autres LocalConnection à moitié portables...
 
Cool!


Message édité par Yoyo@ le 18-12-2006 à 16:17:10
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed