2009-12-06 2 views
0

Используя объект ONE Sound() в ActionScript3, как я могу воспроизвести один MP3, а затем, когда пользователь выбирает другой, воспроизведите звуковой сигнал второй, используя объект SAME Sound()?Вторичный звуковой объект в ActionScript 3?

EDIT: см. Мой ответ за то, как я это сделал.

ответ

0

Вы не можете использовать тот же объект Sound, чтобы играть в multiple files.

После load() вызывается на Sound объекта, вы не можете загрузить другой звуковой файл в этот звуковой объект. Чтобы загрузить другой звуковой файл, создайте новый объект Sound.

+0

На самом деле, я исправил свою проблему. Технически вы правы, но да, я использовал один звуковой объект для воспроизведения нескольких файлов. Я отправлю код здесь через несколько минут, чтобы показать вам, как это сделать. – Moshe

0

Хорошо, я на самом деле сделал это, используя следующий код. Моя ошибка была где-то еще в FLA-файле, но это работает. Я сделал неинициализированную глобальную переменную и создал объект Sound() 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 
Смежные вопросы