![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2010
Сообщений: 81
|
Помогите с плеером на сайт, что уже не перепробывал. Не в какую не работает. Вот плеер
http://fort.lafa-game.ru/RSPlay2.swf вот песня http://fort.lafa-game.ru/02%20Eddie%...s%20Remix).mp3 вот плей лист
|
|
|||||
|
Регистрация: Dec 2006
Сообщений: 1,764
|
Eddie%20Thoneick-%20Perfect%20Moment%20 - после буфферизации играет, что не так?
__________________
а за окном атлантический океан! |
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
Проблема в SoundMixer.computeSpectrum
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()
__________________
hauts.ru |
|
|||||
|
Регистрация: Dec 2010
Сообщений: 81
|
вся проблема в том что если песня загрузится, то происходит что то не понятно(как будто загружается безконечно по новой) и что начала играть песня, надо шмягнуть по дорожке.
Как мне сделать чтоб музыка начинала сразу играть (без шмягания по дорожке) и плеер не глючил. Вот плеер, дождитесь полной загрузки или шмягните по дорожке и дождитесь загруки, тогда поймёте о чём я. fort.lafa-game.ru/RSPlay2.swf Добавлено через 1 минуту код плеера 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; }//Выключение звука |
|
|||||
|
Регистрация: Dec 2010
Сообщений: 81
|
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, время: 13:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|