Recyclable objet sonore Actionscript 3?
-
13-09-2019 - |
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
.La solution
Vous ne pouvez pas utiliser le même objet Sound
jouer plusieurs fichiers .
Une fois
load()
est appelée sur un objetSound
, vous ne pouvez plus charger un fichier audio dans l'objet Sound. Pour charger un fichier son, créez un nouvel objetSound
.
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