сам плеер работает, но ... со временем вырастает нагрузка на процессор.
такое ощущение что какой то мувиклип не удаляется со сцены.
вот код, подскажите плз в чем трабл ?

Код AS3:
var playlist:XML = new XML(); //создаем объект для работы с нашим плэйлистом XML ...
var loader:URLLoader = new URLLoader(); //этим будем загружать наш XML
var setPosition:int = 0; //здесь будем хранить позицию воспроизведения при нажатии паузы и т.п.
var soundObj:Sound = new Sound(); //наш основной объект для работы
var soundCha:SoundChannel = new SoundChannel(); //позволит управлять каналом воспроизведения
var soundTrans:SoundTransform = new SoundTransform(); //для звука и получания данных для аналийзера
var reqUrl:URLRequest = new URLRequest(); //для загрузки mp3 в объект Sound
var loaded:Number = 0; //для правильного просчитывания отображения места воспроизведения
var soundBytes:ByteArray = new ByteArray(); //для хранения данных о звуке
var arrayUrl:Array = new Array(); //массив для адресов mp3
var arrayXm:Array = new Array();
var array:Array = new Array(); //для хранения преобразованных данных о звуке
var volumeP:Number = 1; //для хранения уровня громкости звука
var volumeS:Number = 1; //тоже
var track:int = 0; //номер текущего трэка для воспроизведения
var offmark:Boolean = false; //для кнопки MUTE
var xm:Number = 0;
//события и слушатели. основа
function initPlayMp3():void {
Play_btn.addEventListener(MouseEvent.CLICK, startPlay); //присвоим реакцию на клик мышки нашим элементам интерфейса
Pause_btn.addEventListener(MouseEvent.CLICK, stopPlay);
volume_mc.addEventListener(MouseEvent.CLICK, volumePlay);
offVolume_btn.addEventListener(MouseEvent.CLICK, offvolumePlay);
onVolume_btn.addEventListener(MouseEvent.CLICK, onvolumePlay);
Next_btn.addEventListener(MouseEvent.CLICK, nextTrack);
Prev_btn.addEventListener(MouseEvent.CLICK, prevTrack);
Stop_btn.addEventListener(MouseEvent.CLICK, fullStop);
loader.addEventListener(Event.COMPLETE, whenLoaded); //событие вызовется когда XML фал будет загружен
loader.load(new URLRequest("playlist.xml")); //а это адрес того что будем загружать
volume_mc.buttonMode = true; //определим свойсто для нужных нам клипов что бы при наведении на них курсор менялся на руку
offVolume_btn.visible = false; //скроем кнопки которые не нужны
Pause_btn.visible = false;
}
//загрузка xml
function whenLoaded(event:Event):void { //если загрузка XML прошла успешно то в наш массив с адресами запишем все ее содержимое
playlist = XML(event.target.data);
for(var i:int = 0; i < playlist.url.length(); i++) {
arrayUrl[i] = playlist.url[i].text();
arrayXm[i]= playlist.Xm[i];
}
startVol();
}
//Следующий трек
function nextTrack(event:MouseEvent):void{ //Запускается когда нажата кнопка СЛЕДУЮЩИЙ ТРЕК
Play_btn.visible = false; // определяем какие кнопки управления должны быть видимыми а какие нет
Pause_btn.visible = true;
if((track+1)<arrayUrl.length){ // определяем на какой трек нам переключаться
track++;
} else {
track = 0;
}
try { // пытаемся выполнить стоп и закрытие канала, если канал уже закрыт (загрузка закончилась) то оное вызовет ошибку и выполнение перейдет к catch
soundCha.stop();
soundObj.close();
} catch(e:Error){
soundCha.stop(); // просто остановим
}
PlaySound(); // и запустим воспроизведение нового трека
}
//Предыдущий трек
function prevTrack(event:MouseEvent):void{ //Запускается когда нажата кнопка Предыдущий ТРЕК
Play_btn.visible = false; // определяем какие кнопки управления должны быть видимыми а какие нет
Pause_btn.visible = true;
if((track-1)>=0){ // определяем на какой трек нам переключаться
track--;
} else {
track = arrayUrl.length-1;
}
try { // пытаемся выполнить стоп и закрытие канала, если канал уже закрыт (загрузка закончилась) то оное вызовет ошибку и выполнение перейдет к catch
soundCha.stop();
soundObj.close();
} catch(e:Error){
soundCha.stop(); // просто остановим
}
PlaySound(); // и запустим воспроизведение нового трека
}
function fullTrack(event:Event):void{ // определяет новый трэк и переходит к нему
Play_btn.visible = false; // определяем какие кнопки управления должны быть видимыми а какие нет
Pause_btn.visible = true;
if((track+1)<arrayUrl.length){
track++;
} else {
track = 0;
}
soundCha.stop();
PlaySound();
}
// полный стоп
function fullStop(event:MouseEvent):void{// останавливает воспроизведение и если звук открыт закрывает загрузку
setPosition = 0;//позицию воспроизведения в ноль
try {
soundCha.stop();
soundCha = soundObj.play(0);
soundCha.stop();
soundObj.close();
} catch(e:Error){
soundCha.stop();
soundCha = soundObj.play(0);
soundCha.stop();
}
Play_btn.visible = true;
Pause_btn.visible = false;
}
//кнопка ПУСК
function startPlay(event:MouseEvent):void{
Play_btn.visible = false;
Pause_btn.visible = true;
PlaySound(); // запускаем основную функцию воспроизведения звука
}
//Кнопка ПАУЗА
function stopPlay(event:MouseEvent):void{
setPosition = soundCha.position; // запоминаем позицию воспроизведения
volumeS = soundTrans.volume; // и уровень звука
Play_btn.visible = true;
Pause_btn.visible = false;
soundCha.stop(); // останавливаем воспроизведение
}
//установка уровня звука
function volumePlay(event:MouseEvent):void{
offmark = false;
volume_mc.volumefill_mc.width = event.currentTarget.mouseX*2; // определяем куда ткнули и изменяем размер маски
soundTrans.volume = (event.currentTarget.mouseX*2)/100; // устанавливаем громкость звука
//trace(soundTrans.volume);
volumeP = volumeS = soundTrans.volume;
soundCha.soundTransform = soundTrans;
offVolume_btn.visible = false;
onVolume_btn.visible = true;
}
//включение звука
function offvolumePlay(event:MouseEvent):void{
offmark = false;
offVolume_btn.visible = false;
onVolume_btn.visible = true;
volume_mc.volumefill_mc.width = (volumeP*300)/3;
soundTrans.volume = volumeP;
soundCha.soundTransform = soundTrans;
}
function startVol():void{
Play_btn.visible = false;
Pause_btn.visible = true;
PlaySound(); // запускаем основную функцию воспроизведения звука
}
//Выключение звука
function onvolumePlay(event:MouseEvent):void{
offmark = true;
volumeP = soundTrans.volume;
offVolume_btn.visible = true;
onVolume_btn.visible = false;
volume_mc.volumefill_mc.width = 0;
soundTrans.volume = 0;
soundCha.soundTransform = soundTrans;
}
//основная ПУСК функция
function PlaySound():void{ // основная функция которая воспроизводит звук
reqUrl.url = arrayUrl[track]; // получаем адрес трека
var nextTitle:Sound = new Sound(reqUrl);// т.к. в один объект два звука не загрузить то мы создаем промежуточный объект загружаем в него а потом просто приравниваем основной к нему загружаем его
soundObj = nextTitle;
soundCha = soundObj.play(setPosition); // запускаем звук в нужном нам канале с определенной позиции
soundTrans.volume = volumeS; // устанавливаем кромкость
soundCha.soundTransform = soundTrans; // и присваиваем ее каналу нужному
soundCha.addEventListener(Event.SOUND_COMPLETE, fullTrack); // запустит функцию меняющую трэк при достижении конца трэка текущего
if(offmark){// обработка уровня громкости если включено MUTE
soundTrans.volume = 0;
soundCha.soundTransform = soundTrans;
} else {
soundTrans.volume = volumeS;
soundCha.soundTransform = soundTrans;
}
}
initPlayMp3();
var time:Timer = new Timer(150);
time.addEventListener(TimerEvent.TIMER, timerHandler);
time.start();
function timerHandler(event:TimerEvent):void {
var ba:ByteArray = new ByteArray();
SoundMixer.computeSpectrum(ba, true);
var i:int;
var w:int = 2;
var t:Number = ba.readFloat();
if(t > 0.5){
Object(root).mc1.ml1.addd(t);
Object(root).mc1.ml2.addd(t);
Object(root).mc1.ml3.addd(t);
Object(root).mc1.ml4.addd(t);
}
}