Question

L'utilisation d'un objet sonore () dans ActionScript3, comment puis-je jouer un MP3 puis, lorsque l'utilisateur choisit un autre, jouer un secondes son, en utilisant le même objet Sound ()?

EDIT: Voir ma réponse pour savoir comment je l'ai fait

.
Était-ce utile?

La solution

Vous ne pouvez pas utiliser le même objet Sound jouer plusieurs fichiers .

  

Une fois load() est appelée sur un objet Sound, vous ne pouvez plus charger un fichier audio dans l'objet Sound. Pour charger un fichier son, créez un nouvel objet Sound.

Autres conseils

Ok, en fait je l'ai fait en utilisant le code suivant. Mon bug était un autre endroit dans le fichier FLA, mais cela fonctionne. J'ai fait une variable globale et non initialisée a créé l'objet sonore () LOCALEMENT à l'intérieur d'une fonction. Alors que je suis techniquement en utilisant plusieurs objets sonores, mes références pointent tous à un objet. De plus, je peux appeler ces méthodes sur l'autre pour le codage plus facile. Cela fonctionne pour moi:

    /* -------------

Sound player
functions

 ------------ */

var snd:Sound;                      //the sound object
var sndC:SoundChannel;              //the soudchannel used as "controller"
var sndT:SoundTransform;            //soundTransform used for volume 
var vol:Number = 1;                 //the volume of the song
var pan:Number = 0;                 //panning of the sound
var pos:Number = 0;                 //position of the song 
var currentSound:String;                //currently playing song?


function playSound(s:String){                                   //this function resets the sound and plays it
    stopSound(sndC);                                            //stop the sound from playing
    snd = new Sound();                                          //reset the sound
    snd.load(new URLRequest(s));                                //load the desired sound    
    sndC = new SoundChannel();                                  //(re-)apply the sound channel
    applyVolume(vol,pan,sndT,sndC);                             //apply the volume
    sndC = snd.play(pos);                                       //play it
    sndC.addEventListener(Event.SOUND_COMPLETE, startSound);    //remind it to restart playing when it's done
}                                                               //end function

function applyVolume(n:Number, p:Number, st:SoundTransform, sc:SoundChannel){   //takes an argument for the volume, pan, soundTYransform and soundChannel
    sndT = new SoundTransform(n,p);                                             //applies the soundTransfrom settings
    sndC.soundTransform = sndT;                                                 //and attaches it to the soundChannel
}                                                                               //end function

function stopSound(sndC:SoundChannel){          //this function stops a sound from playing
    if(sndC != null){                           //if the sound was used before (ie: playing)
        if(currentLabel == "video-frame"){      //if we are in the video frame
          pos = sndC.position;                  //store the position of the song to play from at a later time
        }else{                                  //otherwise
          pos = 0;                              //set the position at 0
        }                                       //end if
        sndC.stop();                            //stop it
    }                                           //end if
}                                               //end function

function startSound(snd:Sound){                 //restarts a  sound when it's playing
    if(snd != null){                            //if the sound exists   
        sndC = snd.play(pos);                   //play it
    }                                           //end if
}                                               //end function
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top