Как рандомизировать встроенное воспроизведение MP3 в ActionScript 3? - PullRequest
0 голосов
/ 02 апреля 2012

Я выбрал код, который позволяет воспроизводить внешние MP3-файлы, но кажется, что чем больше файлов я добавляю, тем более темпераментным становится воспроизведение.В частности, кажется, что усекает начало и конец каждого MP3, и воспроизведение непредсказуемо.Я должен отметить, что MP3 довольно маленькие.Это отдельные слова, которые должны воспроизводить какую-то инопланетную поэзию при случайном воспроизведении.Когда я воспроизводю SWF локально с жесткого диска моего компьютера, воспроизведение происходит плавно, но когда я тестирую его в Интернете, все становится прерывистым.Вот код, который я использую.

import flash.media.Sound;
import flash.net.URLRequest;
import flash.media.SoundChannel;
import flash.events.Event;

 playsong();
//var songs:Array=new Array("part0.mp3","part1.mp3","part2.mp3","part3.mp3","part4.mp3","part5.mp3","part6.mp3","part7.mp3","part8.mp3","part9.mp3","part10.mp3","part11.mp3","part12.mp3","part13.mp3","part14.mp3","part15.mp3","part16.mp3","part17.mp3","part18.mp3","part19.mp3","part20.mp3","part21.mp3","part22.mp3","part23.mp3","part24.mp3","part25.mp3","part26.mp3","part27.mp3","part28.mp3","part29.mp3","part30.mp3","part31.mp3","part32.mp3","part33.mp3","part34.mp3","part35.mp3","part36.mp3","part37.mp3","part38.mp3","part39.mp3","part40.mp3","part41.mp3","part42.mp3","part43.mp3","part44.mp3","part45.mp3","part46.mp3","part47.mp3","part48.mp3","part49.mp3","part50.mp3","part51.mp3","part52.mp3","part53.mp3","part54.mp3","part55.mp3","part56.mp3","part57.mp3","part58.mp3","part59.mp3","part60.mp3","part61.mp3","part62.mp3","part63.mp3","part64.mp3","part65.mp3","part66.mp3","part67.mp3","part68.mp3","part69.mp3","part70.mp3","part71.mp3","part72.mp3","part73.mp3","part74.mp3","part75.mp3","part76.mp3","part77.mp3","part78.mp3","part79.mp3","part80.mp3","part81.mp3","part82.mp3","part83.mp3","part84.mp3","part85.mp3","part86.mp3","part87.mp3","part88.mp3","part89.mp3","part90.mp3","part91.mp3","part92.mp3","part93.mp3","part94.mp3","part95.mp3","part96.mp3","part97.mp3","part98.mp3","part99.mp3","part100.mp3","part101.mp3","part102.mp3","part103.mp3","part104.mp3","part105.mp3","part106.mp3","part107.mp3","part108.mp3","part109.mp3","part110.mp3","part111.mp3","part112.mp3","part113.mp3","part114.mp3","part115.mp3","part116.mp3","part117.mp3","part118.mp3","part119.mp3","part120.mp3","part121.mp3","part122.mp3","part123.mp3","part124.mp3","part125.mp3","part126.mp3");
 var sound:Sound;
 var soundChannel:SoundChannel;
 var randnum:uint;
 function playsong()
 {
 randnum=Math.floor(Math.random()*127);
 sound=new Sound();
 var songs:String= "part" + randnum + ".mp3";  
 sound.load(new URLRequest("parts/"+songs)); 
 soundChannel=sound.play();
 soundChannel.addEventListener(Event.SOUND_COMPLETE,playrandomsong);
 }
 function playrandomsong(e:Event)
 {
 playsong();
 }

Я знаю, как экспортировать MP3-файлы для AS (я думаю), но я не знаю, как заставить их воспроизводиться случайным образом, навсегда.Кроме того, не уверен, что сборка мусора может стать проблемой.Надеюсь, что кто-то может придумать это для меня, так как я совершенно незнаком с ActionScript.Любая помощь очень ценится.

1 Ответ

0 голосов
/ 02 апреля 2012

Когда я воспроизводю SWF локально с жесткого диска моего компьютера, воспроизведение идет гладко, но когда я тестирую его онлайн, все начинает становиться прерывистым

Это поднимает большой флагнамек на то, что существует проблема с загрузкой файла.

Эти две строки кода будут выполняться вплотную, что является проблемой:

sound.load(new URLRequest("parts/"+songs)); 
soundChannel=sound.play();

Проблема заключается в том, что звуковые файлыне будет загружаться мгновенно.К счастью, есть события для завершения загрузки и прогресса загрузки.

Проверьте это для подробной справки: http://www.kirupa.com/developer/as3/playing_sounds.htm

А вот код, специфичный для вашей проблемы:

soundChannel.addEventListener(Event.SOUND_COMPLETE, playrandomsong);

function playsong() {
    ...    
    sound.load(new URLRequest("parts/"+songs));
    sound.addEventListener(Event.COMPLETE, soundLoaded);
}

function soundLoaded(e:Event) {
    soundChannel = sound.play();
}
function playrandomsong(e:Event) {
    playsong();
}

Итак, порядок событий здесь идет

  1. Загрузка звука
  2. Ожидание загрузки звука
  3. Воспроизведение загруженного звука
  4. Ожидание завершения воспроизведения звука
  5. Загрузить новый звук
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...