Actionscript 3 中可回收声音对象?
-
13-09-2019 - |
题
在 Actionscript3 中使用 ONE Sound() 对象,如何播放一个 MP3,然后当用户选择另一个 MP3 时,播放另一个 MP3 第二 声音,使用 SAME Sound() 对象?
编辑:请参阅我的答案,了解我是如何做到的。
解决方案
你不能使用相同的 Sound
玩的对象 多个文件.
一次
load()
被称为Sound
对象,以后您无法将不同的声音文件加载到该 Sound 对象中。要加载不同的声音文件,请创建一个新的Sound
目的。
其他提示
好的,我实际上做它用下面的代码。我的错误是在其他地方在FLA文件,但这个工程。余由未初始化的全局变量和所产生的声音()对象局部的函数的内部。虽然我在技术上使用多个声音对象,我引用都指向一个对象。另外,我可以调用这些方法在彼此便于用户进行编码。这对我的作品:
/* -------------
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
不隶属于 StackOverflow