Если фоновая музыка занимает в флеш-проекте много места, то можно попробовать грузить её динамически. При этом фоновая музыка должна быть зациклена - это, можно сказать, общепринятая практика. Кроме этого, для отслеживания процессов загрузки и воспроизведения стоит сделать соответствующие индикаторы. Этих индикаторов будет два:
- индикатор загрузки звука (в моём случае это будет чёрный прямоугольный MovieClip размером 200 на 10 px и названный buf);
- индикатор воспроизведения звука (это будет красный прямоугольный MovieClip размером 200 на 10 px и названный pos);
Оба индикатора будут помещены внутрь мувика cont, который будет светло-серого цвета и того же размера, что и вложенные в него индикаторы.
Всё остальное проделывается с помощью кода ActionScript 2.0.
Код ActionScript 2.0:
/*
первоначальное состояние индикаторов
*/
cont.buf._xscale = 0;
cont.pos._xscale = 0;
/*
скрываем индикаторы
*/
cont._visible = false;
/*
создаём объект Sound
*/
var snd:Sound = new Sound();
/*
устанавливаем время буферизации звука (в секундах)
*/
_soundbuftime = 30;
/*
кнопка, начинающая загрузку звукового файла
*/
btn.onPress = function() {
/*
делаем индикаторы видимыми
*/
cont._visible = true;
/*
прячем кнопку
*/
btn._visible = false;
/*
грузим файл в потоковом режиме
*/
snd.loadSound("lenin.mp3", true);
};
/*
в каждом кадре перерисовываем наши индикаторы
*/
onEnterFrame = function () {
var p:Number = snd.getBytesLoaded()/snd.getBytesTotal()*100;
cont.buf._xscale = p;
cont.pos._xscale = p*(snd.position/snd.duration);
};
/*
зацикливаем воспроизведение звука
*/
snd.onSoundComplete = function() {
snd.start();
};
У меня получилось следующее:
Работу данного скрипта стоит тестировать на более-менее крупных звуковых файлах и в сети. В противном случае, загрузка файла произойдёт почти мгновенно и вы не заметите работы индикаторов.
Исходник к данному уроку под Macromedia Flash 8 скачать можно здесь.
То есть, вам нужен примерно такой код:
/* первоначальное состояние индикаторов */ cont.buf._xscale = 0; cont.pos._xscale = 0; /* создаём объект Sound */ var snd:Sound = new Sound(); /* устанавливаем время буферизации звука (в секундах) */ _soundbuftime = 30; /* грузим файл в потоковом режиме */ snd.loadSound("lenin.mp3", true); /* в каждом кадре перерисовываем наши индикаторы */ onEnterFrame = function () { var p:Number = snd.getBytesLoaded()/snd.getBytesTotal()*100; cont.buf._xscale = p; cont.pos._xscale = p*(snd.position/snd.duration); }; /* зацикливаем воспроизведение звука */ snd.onSoundComplete = function() { snd.start(); };