| Likoniko |
01.04.2011 21:25 |
вся проблема в том что если песня загрузится, то происходит что то не понятно(как будто загружается безконечно по новой) и что начала играть песня, надо шмягнуть по дорожке.
Как мне сделать чтоб музыка начинала сразу играть (без шмягания по дорожке) и плеер не глючил.
Вот плеер, дождитесь полной загрузки или шмягните по дорожке и дождитесь загруки, тогда поймёте о чём я.
fort.lafa-game.ru/RSPlay2.swf
Добавлено через 1 минуту
код плеера
Код 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
this.progress_mc.status_mc.width= 0;// устанавливаем показатель уровня загрузки в 0
this.progress_mc.progressfill_mc.x = -200;// и показатель воспроизведения в позицию -200 что будет видется тоже как 0
var loaded:Number= 0;// для правильного просчитывания отображения места воспроизведения
var soundBytes:ByteArray= new ByteArray();// для хранения данных о звуке
var arrayUrl:Array = new Array();// массив для адресов mp3
var array:Array = new Array();// для хранения преобразованных данных о звуке
var volumeP:Number= 1;// для хранения уровня громкости звука
var volumeS:Number= 1;// тоже
var track:int= 0;// номер текущего трэка для воспроизведения
var offmark:Boolean= false;// для кнопки MUTE
//события и слушатели. основа
function initPlayMp3():void
{
play_mc.addEventListener(MouseEvent.CLICK, startPlay);
// присвоим реакцию на клик мышки нашим элементам интерфейса
stop_mc.addEventListener(MouseEvent.CLICK, stopPlay);
volume_mc.addEventListener(MouseEvent.CLICK, volumePlay);
progress_mc.addEventListener(MouseEvent.CLICK, progressPlay);
offvolume_mc.addEventListener(MouseEvent.CLICK, offvolumePlay);
onvolume_mc.addEventListener(MouseEvent.CLICK, onvolumePlay);
nexttrack_mc.addEventListener(MouseEvent.CLICK, nextTrack);
prevtrack_mc.addEventListener(MouseEvent.CLICK, prevTrack);
fullstop_mc.addEventListener(MouseEvent.CLICK, fullStop);
loader.addEventListener(Event.COMPLETE, whenLoaded); //событие вызовется когда XML фал будет загружен
loader.load(new URLRequest("playlist.xml")); // а это адрес того что будем загружать
play_mc.buttonMode = true; ;// определим свойсто для нужных нам клипов что бы при наведении на них курсор менялся на руку
stop_mc.buttonMode = true;
volume_mc.buttonMode = true;
onvolume_mc.buttonMode = true;
offvolume_mc.buttonMode = true;
progress_mc.buttonMode = true;
nexttrack_mc.buttonMode = true;
prevtrack_mc.buttonMode = true;
fullstop_mc.buttonMode = true;
offvolume_mc.visible = false;// скроем кнопки которые не нужны
stop_mc.visible = false;
for (var i = 1; i<17; i++)
{// расставим нужное нам колличесво шкал аналайзера
var s;
addChild(s = new spektr_mc as MovieClip);
s.name = "spektr" + i + "_mc";
s.mask0_mc.scaleY = 0;
s.x = (i*4)+360;// здесь можно настроить позицию где они все будут появляться
s.y = 19;//
}
}//загрузка 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();
}
name_txt.text = "0" + "/" + arrayUrl.length + " Исполнитель - Название Песни";//и обновим тектовое поле добавив туда информацию о колличестве трэков
}//Прогресс загрузки
function LoadProgress(event:ProgressEvent):void
{
var loadedsound = Math.round(100 * (event.bytesLoaded / event.bytesTotal));// просчитываем уровень загрузки
set_txt.text = "Загруженo: " + loadedsound + "%";// обновляем значение в тектовом поле
progress_mc.status_mc.width = loadedsound * 2;// и увеличиваем полоску загрузки в прогресс баре
}//Следующий трек
function nextTrack(event:MouseEvent):void
{//Запускается когда нажата кнопка СЛЕДУЮЩИЙ ТРЕК
play_mc.visible = false;// определяем какие кнопки управления должны быть видимыми а какие нет
stop_mc.visible = true;//
if ((track+1)<arrayUrl.length)
{// определяем на какой трек нам переключаться
track++;
}
else
{
track = 0;
}
try
{// пытаемся выполнить стоп и закрытие канала, если канал уже закрыт (загрузка закончилась) то оное вызовет ошибку и выполнение перейдет к catch
soundCha.stop();
soundObj.close();
}
catch (e:Error)
{
soundCha.stop();
}
// просто остановим
}
PlaySound();// и запустим воспроизведение нового трека
}//Конец трека
function fullTrack(event:Event):void
{// определяет новый трэк и переходит к нему
play_mc.visible = false;
stop_mc.visible = true;
if ((track+1)<arrayUrl.length)
{
track++;
}
else
{
track = 0;
}
soundCha.stop();
PlaySound();
}//предыдущий
function prevTrack(event:MouseEvent):void
{
play_mc.visible = false;
stop_mc.visible = true;
if (track != 0)
{
track--;
}
else
{
track = arrayUrl.length - 1;
}
try
{
soundCha.stop();
soundObj.close();
}
catch (e:Error)
{
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_mc.visible = true;// видимость кнопок
stop_mc.visible = false;
}//чтение тэгов
function id3Handler(event:Event):void
{
name_txt.text=(track+1)+"/"+arrayUrl.length+" "+soundObj.id3.artist + " - " + soundObj.id3.songName;
}//кнопка ПУСК
function startPlay(event:MouseEvent):void
{
play_mc.visible = false;
stop_mc.visible = true;
PlaySound();// запускаем основную функцию воспроизведения звука
}//Кнопка ПАУЗА
function stopPlay(event:MouseEvent):void
{
setPosition = soundCha.position;// запоминаем позицию воспроизведения
volumeS = soundTrans.volume;// и уровень звука
play_mc.visible = true;
stop_mc.visible = false;
soundCha.stop();
}
// останавливаем воспроизведение
}
;//определение нового места проигрывания
function progressPlay(event:MouseEvent):void
{// вызывается когда кликнули на полосе отображающей загрузку и воспроизведение
volumeS = soundTrans.volume;
soundCha.stop();
soundCha = soundObj.play((soundObj.length*loaded) * event.currentTarget.mouseX/200);// определяем координату куда ткнули // и взависимости от этого помещаем точку воспроизведения в нужное нам место
soundTrans.volume = volumeS;
soundCha.soundTransform = soundTrans;
soundCha.addEventListener(Event.SOUND_COMPLETE, fullTrack);
}
// востанавливаем событие реагирующее на конец трэка
play_mc.visible = false;
stop_mc.visible = true;
}
;//установка уровня звука
function volumePlay(event:MouseEvent):void
{
offmark = false;
volume_mc.volumefill_mc.width = event.currentTarget.mouseX;// определяем куда ткнули и изменяем размер маски
soundTrans.volume = (event.currentTarget.mouseX*5)/100;// устанавливаем громкость звука
volumeP = volumeS = soundTrans.volume;
soundCha.soundTransform = soundTrans;
offvolume_mc.visible = false;
onvolume_mc.visible = true;
}//включение звука
function offvolumePlay(event:MouseEvent):void
{
offmark = false;
offvolume_mc.visible = false;
onvolume_mc.visible = true;
volume_mc.volumefill_mc.width = (volumeP*100)/5;
soundTrans.volume = volumeP;
soundCha.soundTransform = soundTrans;
}//Выключение звука
|