10 février 2013

gestion du son en as3

flash,as3,maintimeline,erreure 1021,son,sound,comment mettre gerer son avec as3

je souhaite mettre un son dans une animation que j ai faite.

un peu de théorie:

http://aldarou.free.fr/folders/cours/master2/FLASH%......................ml

http://www.yazo.net/index.php/gerer-le-son

http://help.adobe.com/fr_FR/FlashPlatform/reference/actionscript/3/flash/media/Sound.html

1/bon ben 1ere probleme mon swf est ecrit en as3 il contient un maintimeline.as et quand j essaye de mettre code sur un calque j ai droit a erreur 1021

on peut pas mettre code sur un calque quand on a un maintimeline.as!!!!!!!!!!!!!!!!!!!!!!!!!!!!(ps le code fonctionne sans probleme dans new as3 sans maintimeline)

2/probleme resolu effectivement il faut creer un movieclip que je nomme clipson ( exporter pour action script) et je met mon script

var Sontraineau : son_traineau =new son_traineau(); //son importer dans biblio exporter pour as son_traineau......

SonTraineau. play();
//Création d'un objet SoundTransform
var trans:SoundTransform = new SoundTransform();
//Modification de sa propriété 'volume'
trans.volume= 0.2;
// Transfert de l'objet vers la propriété soundTransform du canal :
canal_audio.soundTransform= trans;

et je rajoute dans le maintimeline:public var son:*=new clipson();

2/a)petitprobleme resolu:

j arrivais pas a regler le son car je faisais SonTraineau.play() et canal_audio=SonTraineau.play() il faut supprimer leSonTraineau.play() pour avoir acces reglage volume

 

2/b) final etape intermediare as3 dans le clip son

import flash.media.SoundChannel;//ca je peux le mettre dans le maintimeline

var SonTraineau : son_traineau = new son_traineau();
var SonHohoho : son_hohoho = new son_hohoho();
var SonEtincelle : son_etincelle = new son_etincelle();

//affectation du son à un canal
var canal_audio:SoundChannel= new SoundChannel();
var canal_audio1:SoundChannel=new SoundChannel();
var canal_audio2:SoundChannel=new SoundChannel();

canal_audio = SonTraineau.play();
canal_audio1 = SonHohoho.play();
canal_audio2 = SonEtincelle.play();


//Création d'un objet SoundTransform
var Volume_Traineau:SoundTransform = new SoundTransform();
var Volume_Hohoho:SoundTransform = new SoundTransform();
var Volume_Etincelle:SoundTransform = new SoundTransform();

//Modification de sa propriété 'volume'
Volume_Traineau.volume= 0.1;Volume_Traineau.pan =1;
Volume_Hohoho.volume=0.5;Volume_Hohoho.pan =-1;
Volume_Etincelle.volume= 0;Volume_Etincelle.pan=0;
// Transfert de l'objet vers la propriété soundTransform du canal :
canal_audio.soundTransform = Volume_Traineau;
canal_audio1.soundTransform = Volume_Hohoho;
canal_audio2.soundTransform = Volume_Etincelle;

3/bon gros changement je viens de voir que je n ai pas besoin movieclip son et que je peux placer mon script dans la Maintimeline_as

a)package Dust_fla
{
 
    import flash.media.SoundChannel;//je rajoute ca
    import flash.media.SoundTransform;// et ca

public dynamic class MainTimeline extends flash.display.MovieClip
    {
       
        // gestion son //
        private var SonTraineau : son_traineau = new son_traineau();
        private var SonHohoho : son_hohoho = new son_hohoho();
        private var SonEtincelle : son_etincelle = new son_etincelle();
        private var Volume_Traineau:SoundTransform = new SoundTransform();
        private var Volume_Hohoho:SoundTransform = new SoundTransform();
        private var Volume_Etincelle:SoundTransform = new SoundTransform();

//////////////////////permet lancer placement etincelle a chaque enterframe
        //animation = 1 frame a 12 frames par seconde et calcule coordonnées////////////
         function frame1():*
        {
          
            //necessaire pour avoir son lancement anim
            canal_audio = SonTraineau.play();
            canal_audio1 = SonHohoho.play();
            canal_audio2= SonEtincelle.play();

je creer une fonction qui selance  via une autre fonction a chaque evenement entertclip

function ReglageVolume(aparam:Number):void// a ameliorer nom variable
        {
            abscson=aparam;
            //x=237 pour ymx xmax 657 xmin=-729
            if (abscson ==657){
                canal_audio = SonTraineau.play();
                };
            if (abscson <657&& abscson>=200){
                Volume_Traineau.volume=-(0.2/427)*abscson+(1+(40/457));
                Volume_Traineau.pan=1/427*abscson-(200/457);
                };
            if (abscson <200){
                Volume_Traineau.volume=1/929*abscson+(729/929);
                Volume_Traineau.pan=1/929*abscson-(200/929);
                };
            
            if (abscson <-700){
                canal_audio.stop();canal_audio1.stop();canal_audio2.stop();
                };
            
            canal_audio.soundTransform = Volume_Traineau;
            }

public function _placeetincellesettraineau(evt:Event):void
        {
            //trace(evt.target);
     ............
            //////reglage volumeet balance son/////
            ReglageVolume(traineau.x);

4/reste a creer bouton pour couper ou remettre son et reglage volume pour que le son augmente quand le traineau approche et decroisse quand le traineau s'eloigne

bon je faisais encore la meme erreur de mettre le script sur un calque

j ai creer un movieclip avec deux images: la 1er bouton arreter et la deuxieme bouton en marche
 et rajouter script suivant dans mon maintimeline ( quelque moddification par rapport a script ci desssus)

//pour script gestion du son //
        public var BoutonSon: bouton_son =new bouton_son();
        private var sononoff: Boolean = false;
        private var timerhohoho: int = 20;
        private var SonTraineau : son_traineau = new son_traineau();
        private var SonHohoho : son_hohoho = new son_hohoho();
        private var SonEtincelle : son_etincelle = new son_etincelle();
        private var Volume_Traineau:SoundTransform = new SoundTransform();
        private var Volume_Hohoho:SoundTransform = new SoundTransform();
        private var Volume_Etincelle:SoundTransform = new SoundTransform();
        //affectation du son à un canal
        private var canal_audio:SoundChannel= new SoundChannel();//sontraineau
        private var canal_audio1:SoundChannel= new SoundChannel();//sonhohoho
        private var canal_audio2:SoundChannel= new SoundChannel();//sonetincelle

 

///////permet lancer placement etincelle a chaque enterframe
        //animation = 1 frame a 12 frames par seconde et calcule coordonnées/////////
         function frame1():*
        {
            //trace("functionframe1");
            BoutonSon.alpha = 0;
            //placement ecouteur sur bouton son //
            BoutonSon.addEventListener(MouseEvent.MOUSE_OVER,mouseOverHandler);
            BoutonSon.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
            BoutonSon.addEventListener(MouseEvent.CLICK,mouseClick);

///////////////bouton son////////////////
         function mouseOverHandler(event:MouseEvent):void {
        //trace("coucoucestmoi");
        BoutonSon.alpha = 100;
        if (sononoff == false){BoutonSon.gotoAndStop(BoutonSon.currentFrame+1)}
                    else {BoutonSon.gotoAndStop(BoutonSon.currentFrame - 1)}
        }
        function mouseOutHandler(event:MouseEvent):void {
        //trace("coucoucestmoiout");
        BoutonSon.alpha=0;
        }
        function mouseClick(event:MouseEvent):void {
        //trace(sononoff);
        if (sononoff == false){sononoff= true;} else {sononoff= false;}
        }
    
        ////////////fonction permettant reglage volume et balance  son///////////
        function ReglageVolume():void
        {
            if (compteur==timerhohoho){
                canal_audio1 = SonHohoho.play();
                //canal_audio2= SonEtincelle.play()
                };
            
            if (compteur==100){
                canal_audio = SonTraineau.play();
                };
            //compteur de 100 a 72)
            if (compteur <100&&compteur>=72){
                Volume_Traineau.volume=-0.00715*compteur+1.514;//trace(compteur,Volume_Traineau.volume);
                Volume_Traineau.pan=0.036*compteur-2.57;
                };
                //compteur de 71 a0
            if (compteur<71){
                Volume_Traineau.volume=0.014*compteur;
                Volume_Traineau.pan=0.014*compteur-1;
                };
            
            if (compteur==0){
                canal_audio.stop();canal_audio1.stop();canal_audio2.stop();
                };
            if (sononoff==false){
                Volume_Traineau.volume=0;//attention de le mettre apres les deux if ci dessus
                } ;
            canal_audio.soundTransform = Volume_Traineau;
            canal_audio1.soundTransform = Volume_Traineau;
            canal_audio2.soundTransform = Volume_Traineau;
            
            };

et voila le resultat

reste à faire:mettre differente couleur de fond( orange,violet,rose,vert,bleu foncée,bleu claire) facile reglage teinte movieclip;mettre differente forme etincelle dans meme flash;mettre une ligne etincelle facile supprimer le random sur la tangente et pas compteur au hazard;creer une animation de ce type saint valentin;mode plein ecran,etincelle dans oeil du cerf et bruit etincelle quand pere noel passe au desus cadeau,..

Posté par pierreflash à 10:25 - - Commentaires [0] - Permalien [#]
Tags : ,

12 février 2012

difficultés rencontrer pour anim ci dessous

bon j ai trouvé cette animation sur internet mais il fallait la modifié lergerement pour l incorporer sur mon blog

il y a 2 sons: la musique et le feux artifice pour trouver ou etait ses deux sons il faut utiliser flash decompiler quand on clique sur le son il y a onglet info et onglet use bye qui donne les movie clip ou le son est situé
il faut donc pour integration dans blog que le son ne se lance pas au demarage et que le bouton son off on soit en position off


0/localisation des sons avec flash decompliler la musique etait dans le movie clip 109 bgsound qui se trouve dans scene principale image 2  a droite de la scene
il est lance avec evenement et repetition 3 fois les sons firework se trouve dans movieclip firework et firework2 inclus dans movieclip contents

1/reglage du bouton en position off:_root.bgsound_btn.gotoAndStop(2); dans image 2 script au lieu de _root.bgsound_btn.gotoAndStop(1);


2/initialisation des sons pour pouvoir les mettre en sourdine avec le bouton son:
var mysound = new Sound(_root.bgsound);
var mysound1 = new Sound(_root.contents.firework);
var mysound2 = new Sound(_root.contents.firework2);


3/actionscriptbouton son
bgsound_btn.onPress = function ()
{
    if (bgsound_btn._currentframe == 1)
    {
        mysound.setVolume(0);mysound1.setVolume(0);mysound2.setVolume(0);
        bgsound_btn.gotoAndStop(2);
        return;
    }
  mysound.setVolume(80);mysound1.setVolume(100);mysound2.setVolume(100);
    bgsound_btn.gotoAndStop(1);
};


4/rendre son inactif au lancement de l'animation
a/movieclip bgsound (scene principale image2 exterieure a droite scene) je rajoute ce script
onClipEvent (load) {
    _root.mysound.setVolume(0);
    
}
b/son feux artifice idem je rajoute dan movieclip firework et firework2
onClipEvent (load) {
    _root.mysound1.setVolume(0);//trace("firework");
}

et
    onClipEvent (load) {
    _root.mysound2.setVolume(0);//trace("firework2");
}

la musique etait dans le movie clip 109 bgsound qui se trouve dans scene principale image 2  a droite de la scene
il est lance avec evenement et repetition 3 fois les sons firework se trouve dans movieclip firework et firework2 inclus dans movieclip contents

ensuite il reste a choisir le stage scale mode showall noBorder exactfit noScroll idem j utilise flash decompiler pour voir dans quel movieclip apparait le stagescalemode dans script



ne pas oublier le <param name="allowFullScreen" value="true" /> quand embed

Posté par pierreflash à 13:48 - - Commentaires [0] - Permalien [#]
Tags : , ,
04 janvier 2012

petit probleme rencontré

en as2

j ai voulu rajouter un bouton replay qui coupe le son a la fin d'un movieclip1 avec un stopallsound() mais ca ne marchait pas

en effet se bouton etait place dasn movieclip1 et le son etait initialiser dans le root avec un attachsound

j ai donc du mettre mon bouton replay dans le root avec un alpha =0 et a la fin du movieclip1 je met un replay.alpha=100

Posté par pierreflash à 20:36 - - Commentaires [0] - Permalien [#]
Tags : , ,
29 octobre 2011

hibou halloween

dans cette animation as1( qui n'est pas de moi je me contente juste de rajoute un bouton lecteur pour les integrer sur blog) l interet etait la maniere de gerer le son.

il y a 2 sons dans cette animation son1 et son2

1/dans propriete son1et 2 je met exporter pour caction script & exporter dans la 1ere image

2/quand je veux lancer son1 ou 2 je met image clé avec script:

function playMusic()
{
    if (music1Status != "false")
    {
        music1 = new Sound();
        music1.attachSound("son1");
        music1.setVolume(60);
        music1.start(0, 999);//1erparam =debut en seconde, deuxieme param=nombre de boucle
        music1Status = "true";
    }
}
playMusic();

3/pour arreter son il suffit de mettre bouton avec script:

arreter son

stopAllsound()

on (press)
{
    _parent.music1Status = "false";
    _parent.musicStatus = "false";

    nextFrame();
}

relancer lecture son

on (press)
{
    _parent.music1Status = "";
    _parent.playMusic1();
      _parent.music2Status = "";
    _parent.playMusic2();
    prevFrame();
}

 

Posté par pierreflash à 18:12 - - Commentaires [0] - Permalien [#]
Tags : , ,