Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Плеер на сайт (http://www.flasher.ru/forum/showthread.php?t=153324)

Likoniko 31.03.2011 22:25

Плеер на сайт
 
Помогите с плеером на сайт, что уже не перепробывал. Не в какую не работает. Вот плеер
http://fort.lafa-game.ru/RSPlay2.swf
вот песня
http://fort.lafa-game.ru/02%20Eddie%...s%20Remix).mp3
вот плей лист
PHP код:

<?xml version="1.0" encoding="ISO-8859-1"?>
<playlist>
        <url>02 Eddie Thoneick- Perfect Moment (Francesco Diaz & Young Rebels Remix).mp3</url>
        <url>http://fort.lafa-game.ru/02%20Eddie%20Thoneick-%20Perfect%20Moment%20(Francesco%20Diaz%20&%20Young%20Rebels%20Remix).mp3</url>
        <url>fort.lafa-game.ru/02%20Eddie%20Thoneick-%20Perfect%20Moment%20(Francesco%20Diaz%20&%20Young%20Rebels%20Remix).mp3</url>
        <url>02%20Eddie%20Thoneick-%20Perfect%20Moment%20(Francesco%20Diaz%20&%20Young%20Rebels%20Remix).mp3</url>
        <url>http://fort.lafa-game.ru/02 Eddie Thoneick- Perfect Moment (Francesco Diaz & Young Rebels Remix).mp3</url>
        <url>fort.lafa-game.ru/02 Eddie Thoneick- Perfect Moment (Francesco Diaz & Young Rebels Remix).mp3</url>
</playlist>

Помогите пожалуйста

NikolyA 31.03.2011 23:31

Eddie%20Thoneick-%20Perfect%20Moment%20 - после буфферизации играет, что не так?

Hauts 31.03.2011 23:48

Проблема в SoundMixer.computeSpectrum

Код AS1/AS2:

SecurityError: Error #2122: Нарушение изолированной среды: SoundMixer.computeSpectrum: http://fort.lafa-game.ru/RSPlay2.swf не может осуществить доступ к http://v19.lscache2.c.youtube.com/vi...5a29591d1dff75. Необходим файл политики, но, когда были загружены эти мультимедийные данные, флаг checkPolicyFile не был установлен.
        at flash.media::SoundMixer$/computeSpectrum()
        at RSPlay2_fla::MainTimeline/renderSpectrum()


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;
}//Выключение звука


Likoniko 01.04.2011 21:27

Код AS3:

function onvolumePlay(event:MouseEvent):void
{
        offmark = true;
        volumeP = soundTrans.volume;
        offvolume_mc.visible = true;
        onvolume_mc.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;
 
 
        name_txt.text = (track+1)+"/"+arrayUrl.length+" Не удалось прочитать ID3 тэги";// делаем стандартную строку (она станется если функция чтения тэгов ее не обновит)
        soundObj.addEventListener(ProgressEvent.PROGRESS, LoadProgress);
        // создаем слушатель прогреса загрузки
        soundObj.addEventListener(Event.ID3, id3Handler); // и получения тэгов
        addEventListener(Event.ENTER_FRAME, renderSpectrum); ;// создаем событие ENTER_FRAME которое будет запускать функцию прорисовки аналайзера
        addEventListener(Event.ENTER_FRAME, Progress);// и ENTER_FRAME для програсса воспроизведения
 
 
        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;
}
}//отображение прогреса воспроизведения
function Progress(event:Event):void
{
loaded = soundObj.bytesTotal / soundObj.bytesLoaded;// просчитываем какую часть мы загрузили это нужно для поправики в отображения прогресса
progress_mc.progressfill_mc.x = Math.round(200*(soundCha.position/(soundObj.length*loaded)))-200;// двигаем полосу прокресса
var allsec:int = Math.floor(soundCha.position / 1000);// и считаем секунды воспроизведения
var min:int = Math.floor(allsec / 60);//
var sec:int = allsec-(Math.floor(allsec/60)*60);//
if (sec < 10)
{
        time_txt.text = String(min) + ".0" + String(sec);//формируем текстовую строку с итогами посдчетов
}
else
{
        time_txt.text = String(min) + "." + String(sec);//формируем текстовую строку с итогами посдчетов
}
}//визуализатор
function renderSpectrum(event:Event):void
{// здесь мы заставляем аналайзер показывать нам правду
SoundMixer.computeSpectrum(soundBytes, false, 0);
// получаем инфу о звуке
array = byteToReal(soundBytes); ;// преобразование
array = FFT(array,256);// тоже
array = complexToReal(array);// и это тоже
//и теперь уже удобоваримые данные мы используем для прорисовки уровней
for (var i:int = 1; i<17; i++)
{
        var spektr = this.getChildByName("spektr" + i + "_mc");
        spektr.mask0_mc.scaleY = array[i * 7] / 4;
}
}//битовый массив в реальный
function byteToReal(arr:ByteArray):Array
{
var realArr:Array = new Array();// Создаем массив для результата расшифровки
for (var i:int = 0; i<256; i++)
{// Расшифровываем первые 256 значений - левый канал
        realArr[i] = arr.readFloat();
}
for (var k:int=0; k<256; k++)
{// Расшифровываем остальные 256 значений - правый
        realArr[k] = (arr.readFloat()+realArr[k])/2;// Здесь значения для левого и правого канала
        // складываются и делятся на 2 (среднее арифметическое)
}
return realArr;//Возвращаем результат
}// преобразования фурье
function FFT(a:Array, tnn:int):Array
{
if (a[1] + a[128] == 0)
{
        return a;
}
var twr:Number;
var twi:Number;
var twpr:Number;
var twpi:Number;
var twtemp:Number;
var ttheta:Number;
var i:int;
var i1:int;
var i2:int;
var i3:int;
var i4:int;
var c1:Number;
var c2:Number;
var h1r:Number;
var h1i:Number;
var h2r:Number;
var h2i:Number;
var wrs:Number;
var wis:Number;
var nn:int;
var ii:int;
var jj:int;
var n:int;
var mmax:int;
var m:int;
var j:int;
var istep:int;
var isign:int;
var wtemp:Number;
var wr:Number;
var wpr:Number;
var wpi:Number;
var wi:Number;
var theta:Number;
var tempr:Number;
var tempi:Number;
var tmp:Number;
ttheta = 2 * Math.PI / tnn;
c1 = 0.5;
c2 = -0.5;
isign = 1;
n = tnn;
nn = tnn / 2;
j = 1;
ii = 1;
while (ii<=nn)
{
        i = 2 * ii - 1;
        if (j > i)
        {
                tempr = a[j - 1];
                tempi = a[j];
                a[j - 1] = a[i - 1];
                a[j] = a[i];
                a[i - 1] = tempr;
                a[i] = tempi;
        }
        m = nn;
        while (m>=2 && j>m)
        {
                j = j - m;
                m = m / 2;
        }
        j = j + m;
        ii++;
}
mmax = 2;
while (n>mmax)
{
        istep = 2 * mmax;
        theta = 2*Math.PI/(isign*mmax);
        tmp = Math.sin(0.5 * theta);
        wpr = -2.0 * tmp * tmp;
        wpi = Math.sin(theta);
        wr = 1.0;
        wi = 0.0;
        ii = 1;
        while (ii<=mmax / 2)
        {
                m = 2 * ii - 1;
                jj = 0;
                while (jj<=(n-m) / istep)
                {
                        i = m + jj * istep;
                        j = i + mmax;
                        tempr = wr * a[j - 1] - wi * a[j];
                        tempi = wr * a[j] + wi * a[j - 1];
                        a[j - 1] = a[i - 1] - tempr;
                        a[j] = a[i] - tempi;
                        a[i - 1] = a[i - 1] + tempr;
                        a[i] = a[i] + tempi;
                        jj++;
                }
                wtemp = wr;
                wr = wr * wpr - wi * wpi + wr;
                wi = wi * wpr + wtemp * wpi + wi;
                ii++;
        }
        mmax = istep;
}
tmp = Math.sin(0.5 * ttheta);
twpr = -2.0 * tmp * tmp;
twpi = Math.sin(ttheta);
twr = 1.0 + twpr;
twi = twpi;
i = 2;
while (i<=tnn / 4+1)
{
        i1 = i + i - 2;
        i2 = i1 + 1;
        i3 = tnn + 1 - i2;
        i4 = i3 + 1;
        wrs = twr;
        wis = twi;
        h1r = c1*(a[i1]+a[i3]);
        h1i = c1*(a[i2]-a[i4]);
        h2r = -c2*(a[i2]+a[i4]);
        h2i = c2*(a[i1]-a[i3]);
        a[i1] = h1r + wrs * h2r - wis * h2i;
        a[i2] = h1i + wrs * h2i + wis * h2r;
        a[i3] = h1r - wrs * h2r + wis * h2i;
        a[i4] =  -  h1i + wrs * h2i + wis * h2r;
        twtemp = twr;
        twr = twr * twpr - twi * twpi + twr;
        twi = twi * twpr + twtemp * twpi + twi;
        i++;
}
h1r = a[0];
a[0] = h1r + a[1];
a[1] = h1r - a[1];
return a;
}//Преобразование комплексных в реальные числа
function complexToReal(arr:Array):Array
{
for (var i:int = 1; i<=128; i++)
{// i = 1 т.к 0 и 1 ячейки массива - служебные
        arr[i - 1] = Math.sqrt(arr[i * 2] * arr[i * 2] + arr[i * 2 + 1] * arr[i * 2 + 1]);//Находим модуль комплексного числа
}
arr.splice(127);// Отрезаем от массива лишние элементы, начиная от 127
return arr;// Возвращаем 127 элементов (0 - 126)
}// типа запуск // типа нет
//initPlayMp3();



Часовой пояс GMT +4, время: 14:45.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.