AS3 воспроизводит звуки в массиве в последовательности - PullRequest
0 голосов
/ 20 марта 2012

Это программируется во Flash CS5.5:

Я хочу нажать кнопку и воспроизвести весь массив по одному звуку за раз. Когда первый звук прекращается, начинается второй и т. Д. До самого последнего звука. Когда закончится последний звук, все звуки должны прекратиться, и если вы снова нажмете кнопку воспроизведения, он должен начаться сначала и снова воспроизвести все звуки.

В настоящее время, чтобы перейти к следующему звуку, вам нужно снова нажать кнопку. Я думаю, что нужно использовать SOUND_COMPLETE ... Я просто не знаю, как, следовательно, пустая функция. Я только хочу нажать кнопку воспроизведения один раз, чтобы услышать весь массив в последовательности. Есть идеи?

var count;
var songList:Array = new Array("test1.mp3","test2.mp3","test3.mp3");

count = songList.length;
myTI.text = count;
var currentSongId:Number = 0;

playBtn.addEventListener(MouseEvent.CLICK, playSound);

function playSound(e:MouseEvent):void{
if(currentSongId < songList.length)
{
var mySoundURL:URLRequest = new URLRequest(songList[currentSongId]);        
var mySound:Sound = new Sound();
mySound.load(mySoundURL);
var mySoundChannel:SoundChannel = new SoundChannel();

mySoundChannel = mySound.play();
currentSongId++;
mySoundChannel.addEventListener(Event.SOUND_COMPLETE,handleSoundComplete)
}
if(currentSongId == songList.length)
{
    currentSongId = 0;
}
}

function handleSoundComplete(event:Event){
}

1 Ответ

1 голос
/ 21 марта 2012

Вы должны использовать функции для модуляции того, что вы делаете, это сделает ваш код более читабельным.

private Array songList = new Array("test1.mp3", "test2.mp3");




public function onPlayBtnPressed(){
    currentSongIndex = 0;
    PlaySongFromIndex(currentSongIndex);
}


public function PlaySongFromIndex(songIndex:int){
    //do what ever here to simply play a song.
    var song:Sound = new Sound(songList[songIndex]).Play()
    //Addevent listener so you know when the song is complete
    song.addEventListener(Event.Complete, songFinished);
    currentSongIndex++;
}

public function songFinished(e:Event){
    //check if all the songs where played, if so resets the song index back to the start.
    if(currentSongIndex < listSong.Length){
        PlaySongFromIndex(currentSongIndex);
    } else {
        currentSongIndex=0;
    }
}

Это не будет компилироваться, просто чтобы показать пример, надеюсь, это поможет.

...