Aide - Recherche - Membres - Calendrier
Version complète : Synchronisation de Sound en as3 (Problème avec firefox)
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Intégration sonore
ayame_mb
Bonsoir,

je dois développer un moteur me permettant d'activer/désactiver des boucles musicales à des instants différents (interaction clavier ) et ces boucles doivent être calées ensemble.

Infos:
-je peux lancer 5 boucles musicales maximum en même temps.
-les 5 boucles dure 10s ,ont le même tempo et sont toutes en binaires (Si je joue toutes mes boucles en même temps dans audacity j'obtiens un sample où toutes les boucles sont bien calées)

Différentes méthodes testées pour caler les sons:
Methode 1
-je lance (Sound.play()) tous mes sons en même temps et je joue sur le volume pour activer ou non mes boucles, mais le problème, c'est que dans firefox,les boucles sont décalées: apparemment c'est un BUG du flash player de firefox.
Methode 2
-lorsque je lance la première boucle, je lance aussi une boucle de référence sur laquelle je vais me caler, et à l'instant t (instant ou j'appuie sur une touche de mon clavier), je lance la boucle qui correspond à cette touche en recuperant la position de la boucle de référence
ma_nouvelle_boucle.play(ma_boucle_de_reference.position): cette technique ne fonctionne pas (les boucles ne sont pas calées) car je suppose qu'il y a un temps de latence entre le moment où je récupère la position de la boucle de ref et où je lance la nouvelle boucle
j'ai fait des tests et ce temps de latence doit être de l'ordre de 0.XXXX millisecondes!
Methode 3
-même methode que 2 mais au lieu de jouer ma nouvelle boucle tout de suite je stop tous les sons qui sont actuellement joués et je les relance tous (nouvelle boucle y compris) à la position de référence : l'arrêt des boucles est perceptible et ceci donne une impression de raccro.


voila je ne sais pas quoi faire pour que les boucles musicales soient toutes synchro.
Auriez vous donc une solution pour caler toutes les boucles ensemble et que l'appli fonctionnent au moins sous les navigateurs IE, firefox et safari?

Merci d'avance

Logic
Salut.

Si tu charges des fichiers .mp3, tu auras toujours des problèmes au moment du bouclage des sons (latences, clips...). Un premier pas vers la solution est d'importer tes sons non compressés dans Flash et d'utiliser la compression mp3 que propose Flash.
ayame_mb
Hello, effectivement c'est ce que j'ai fais pour réduire les temps de latence mais rien n'y fait.
ayame_mb
Re,

après plusieurs tests je me suis rendue compte que ce n'était pas le player flash de firefox qui buggait
mais bien le flash player 10 (que ce soit sous ie ou firefox).

A lire

Lien

Lien

si quelqu'un sait gérer ces problèmes de latence, je suis preneuse!!!

Merci


jeanphilippe
salut
tu peux rentrer dans les détails ?
comment joues tu les mp3 ?
sont-ils externes ? (buffertime, etc...)
utilises-tu les nouvelles fonctionnalités du Player 10 (sampleData) ?
ayame_mb
Hello,

non en fait, avant de lancer mon application, je fais un loading d'une librairie externe (LibrarySound.swf) qui contient toutes les boucles rythmiques de mon appli.

chaque son a était importé en wav dans flash et à une liaison externe (du type Rytmique1)pour pouvoir le recuperer dans l'appli générale (var ClassRythm:Class=Class(ApplicationDefaut.GLOBAL.DOMAIN.getDefinition("Rythmique"+_id));_music=new ClassRythm wink.gif

Une fois le swf chargé, je crée un tableau tab_rythmique_sounds qui va contenir chaque son.

Et quand je lance la première boucle rythmique, je lance également toutes les autres boucles rythmiques avec un volume égale à 0.

Exemple de code ci dessous:
//si on joue la première boucle rythmique
if ( firstLoop) {
//on lance ttes les boucles en même temps
for (var i:int=0; i < ApplicationDefaut.GLOBAL.KEYBOARD_TAB.tab_rythmique_sounds.length; i++) {
tab_rythmique_sounds[i].playMusic(0); //
tab_rythmique_sounds[i].setVolumeForce(0);
}

public function playMusic(p_start):void {
_isPlaying=true;
_musicChannel=_music.play(p_start);
_musicChannel.addEventListener(Event.SOUND_COMPLETE,loopMusic);
}

public function setVolumeForce(p_force) {
if (p_force==1) {
_isPlaying=true;
} else {
_isPlaying=false;
}
_force=p_force;
_controle = _musicChannel.soundTransform;
_controle.volume = p_force;
_musicChannel.soundTransform = _controle;
}


Quand j'appuie sur une touche du clavier correspondant à une boucle à écouter, je fais :
tab_rythmique_sounds[boucle_a_lancer].setVolumeForce(1);
(j'augmente son volume)

J'utilise uniquement les fonctionnalités as3 pour flash player 9
Mais d'après ce que j'ai vu sur les forums il faudrait effectivement que je passe à CS4 pour utiliser les classes telles que SampleDataEvent....


Citation (jeanphilippe @ Nov 21 2008, 01:29 PM) *
salut
tu peux rentrer dans les détails ?
comment joues tu les mp3 ?
sont-ils externes ? (buffertime, etc...)
utilises-tu les nouvelles fonctionnalités du Player 10 (sampleData) ?

ayame_mb
HEllo!

Quelqu'un aurait-il une piste concernant la synchronisation de boucles rythmiques de 10 s dans flash player 10 ?
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2009 Invision Power Services, Inc.