2009-12-06 42 views
0

在Actionscript3中使用ONE Sound()对象时,如何使用SAME Sound()对象来播放一个MP3,然后在用户选择另一个MP3时播放第二个声音?Actionscript 3中的可循环声音对象?

编辑:看我的答案是如何做到的。

回答

0

您不能使用相同的Sound对象玩multiple files

一旦load()Sound对象上被调用,您不能以后将不同的声音文件加载到该声音对象。要加载不同的声音文件,请创建一个新的Sound对象。

+0

其实,我解决了我的问题。从技术上讲,你是对的,但是,我用一个声音对象来播放多个文件。我会在几分钟后在这里发布代码,告诉你如何。 – Moshe 2009-12-06 13:13:42

0

好吧,我其实使用下面的代码。我的错误在FLA文件中的其他地方,但是这是有效的。我做了一个未初始化的全局变量,并在函数内部创建了LOCALLY声音()对象。虽然我在技术上使用多个声音对象,但我的参考都指向一个对象。另外,我可以通过调用这些方法来简化编码。这适用于我:

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

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