Objeto reciclável som no ActionScript 3?
-
13-09-2019 - |
Pergunta
usando um som (objeto) no Actionscript3, como posso jogar um MP3 e, em seguida, quando o usuário escolhe um diferente, jogar um segunda som, usando o mesmo som objeto ()?
EDIT:. Veja a minha resposta para como eu fiz isso
Solução
Você não pode usar mesmo objeto Sound
ao jogo vários arquivos .
Uma vez
load()
é chamado em um objetoSound
, você não pode carregar mais tarde um arquivo de som diferente naquele objeto Sound. Para carregar um arquivo de som diferente, criar um novo objetoSound
.
Outras dicas
Ok, eu realmente fiz isso usando o seguinte código. Meu erro estava em outro lugar no arquivo FLA, mas isso funciona. Fiz uma variável global não inicializada e criado o objecto de som () LOCALMENTE dentro de uma função. Enquanto eu estou tecnicamente usando vários objetos sonoros, minhas referências estão todos apontando para um objeto. Além disso, eu posso chamar esses métodos uns sobre os outros para facilitar a codificação. Isso funciona para mim:
/* -------------
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