![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Написали плеер.
плеер мп3 у клиента он же тот же плеер только музыка другая вставлена Проблем существует несколько: 1. По какой-то странной причине, плеер работает везде, кроме клиента. Если, кому не сложно тестаните, буду признателен, если можно дайте ответ по обоим. Играют не играют. 2. Плеер векторный, написан на AS3 но весит нереально дофига 260кб. приэтом я не понимаю почему. Возможно из-за импортированных в него компонент. Инфа о треках береться здесь Помогите пожалуйста, моих нервов не хватает на общение с клиентами ![]()
__________________
Жить хорошо, когда вокруг столько интересного.... |
|
|||||
|
его код
package
{
import flash.display.*;
import flash.net.*;
import flash.events.*;
import flash.text.*;
import flash.utils.*;
import flash.media.*;
import flash.ui.*;
import fl.controls.*;
import fl.data.*;
import fl.events.*;
public class player extends MovieClip
{
// url prefix
//var urlPrefix:String = "http://localhost/eurasia/audio/";
//var urlPrefix:String = "http://temp.pertsev.com/eurasia/audio/";
var urlPrefix:String = "http://webtest.softdeco.net/eurasia/audio/";
//var urlPrefix:String = "../";
// all player data
var dataXML:XML = null;
// compositions list related
var compoListOpened:Boolean = true;
var compoListCloseInterval, compoListOpenInterval:Number = 0;
// current radio type
var radioType:String = "Тарантайка дэйли";
// sound related things
var soundObject:Sound = new Sound();
var soundChannel:SoundChannel = null;
var soundTrans:SoundTransform = new SoundTransform();
// update interval
var soundUpdateInterval:Number = 0;
// information about sound
var soundLengthRaw:String = "";
var soundLengthSecs:Number = 0;
var soundIsPlaying:Boolean = false;
var soundIsPaused:Boolean = false;
var soundPausePosition:Number = 0;
// images for sound
var images:Array = new Array();
var imageCurrentIndex:Number = 0;
var hasImages:Boolean = false;
var volumeDrag:Boolean = false;
// helper arrays
var arrayRadio1:Array = new Array();
var arrayRadio2:Array = new Array();
var currentTrack:Object = null;
var firstRun:Boolean = true;
// default constructor
public function player()
{
prepareData();
prepareTestingFeatures();
prepareContextMenu();
prepareButtons();
prepareCompoList();
prepareTrackBar();
prepareVolumeSlider();
}
protected function prepareTestingFeatures():void
{
}
protected function prepareContextMenu():void
{
function item1MenuItemSelectHandler(event:ContextMenuEvent):void
{
var urlRequest:URLRequest = new URLRequest("http://pertsev.com");
navigateToURL(urlRequest);
}
//function item2MenuItemSelectHandler(event:ContextMenuEvent):void
//{
//var urlRequest:URLRequest = new URLRequest("http://pertsev.com");
//navigateToURL(urlRequest);
//}
var item1:ContextMenuItem = new ContextMenuItem("a`pertsev design — студия дизайна Александра Перцева");
//var item2:ContextMenuItem = new ContextMenuItem("Код: resurtm (e-mail: resurtm@gmail.com)");
item1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, item1MenuItemSelectHandler);
//item2.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, item2MenuItemSelectHandler);
var contMenu:ContextMenu = new ContextMenu();
contMenu.customItems.push(item1);
//contMenu.customItems.push(item2);
contMenu.hideBuiltInItems();
this.contextMenu = contMenu;
}
// prepare all buttons in gui
protected function prepareButtons():void
{
// play and stop buttons
playButton.visible = true;
stopButton.visible = false;
function playButtonClickHandler(event:MouseEvent):void
{
if (!soundIsPlaying)
{
if (!soundIsPaused)
soundChannel = soundObject.play(0, 0, soundTrans);
else
{
soundChannel = soundObject.play(soundPausePosition, 0, soundTrans);
soundIsPaused = false;
}
soundChannel.addEventListener(Event.SOUND_COMPLETE, soundChannelSoundCompleteHandler);
soundIsPlaying = true;
}
}
function stopButtonClickHandler(event:MouseEvent):void
{
if (soundIsPlaying)
{
soundPausePosition = soundChannel.position;
soundChannel.stop();
soundIsPlaying = false;
soundIsPaused = true;
}
}
playButton.addEventListener(MouseEvent.CLICK, playButtonClickHandler);
stopButton.addEventListener(MouseEvent.CLICK, stopButtonClickHandler);
// radio tabs
function radioTab1ClickHandler(event:MouseEvent):void
{
compoList.radioTab1.gotoAndStop(1);
compoList.radioTab2.gotoAndStop(2);
radioType = "Тарантайка дэйли";
updateData();
}
function radioTab2ClickHandler(event:MouseEvent):void
{
compoList.radioTab1.gotoAndStop(2);
compoList.radioTab2.gotoAndStop(1);
radioType = "Две жизни спустя";
updateData();
}
compoList.radioTab1.addEventListener(MouseEvent.CLICK, radioTab1ClickHandler);
compoList.radioTab2.addEventListener(MouseEvent.CLICK, radioTab2ClickHandler);
compoList.radioTab1.gotoAndStop(1);
compoList.radioTab2.gotoAndStop(2);
// close button
function compoListCloseIntervalHandler():void
{
compoList.x += (405.0 - compoList.x) * 0.2;
if (compoList.x > 400.0)
clearInterval(compoListCloseInterval);
}
function compoListOpenIntervalHandler():void
{
compoList.x += (136.7 - compoList.x) * 0.2;
if (compoList.x < 141.7)
clearInterval(compoListOpenInterval);
}
function closeButtonClickHandler(event:MouseEvent):void
{
if (compoListOpened)
{
compoList.closeArrow.rotation = 180;
compoListOpened = false;
compoListCloseInterval = setInterval(compoListCloseIntervalHandler, 50);
}
else
{
compoList.closeArrow.rotation = 0;
compoListOpened = true;
compoListOpenInterval = setInterval(compoListOpenIntervalHandler, 50);
}
}
compoList.closeButton.addEventListener(MouseEvent.CLICK, closeButtonClickHandler);
// next and prev buttons
function prevButtonClickHandler(event:MouseEvent):void
{
if (event.stageX < 314.6 || event.stageX > 346.6 ||
event.stageY < 118.4 || event.stageY > 150.8)
return;
if (currentTrack == null)
return;
//trace("test1");
var gotoIndex:Number = -1;
if (radioType == "Тарантайка дэйли")
{
for (var i:Number = 0; i < arrayRadio1.length; i++)
if (arrayRadio1[i].name == currentTrack.name &&
arrayRadio1[i].comment == currentTrack.comment)
gotoIndex = i - 1;
if (gotoIndex != -1 && gotoIndex != arrayRadio1.length)
{
listItemClickHandler(new ListEvent("itemClick", false, false, -1, -1, -1, arrayRadio1[gotoIndex]));
compoList.list.scrollToIndex(gotoIndex);
}
}
if (radioType == "Две жизни спустя")
{
for (var i:Number = 0; i < arrayRadio2.length; i++)
if (arrayRadio2[i].name == currentTrack.name &&
arrayRadio2[i].comment == currentTrack.comment)
gotoIndex = i - 1;
if (gotoIndex != -1 && gotoIndex != arrayRadio2.length)
{
listItemClickHandler(new ListEvent("itemClick", false, false, -1, -1, -1, arrayRadio2[gotoIndex]));
compoList.list.scrollToIndex(gotoIndex);
}
}
}
function nextButtonClickHandler(event:MouseEvent):void
{
if (currentTrack == null)
return;
if (event.stageX < 601.4 || event.stageX > 634.2 ||
event.stageY < 118.4 || event.stageY > 150.8)
return;
//trace("test2");
var gotoIndex:Number = -1;
if (radioType == "Тарантайка дэйли")
{
for (var i:Number = 0; i < arrayRadio1.length; i++)
if (arrayRadio1[i].name == currentTrack.name &&
arrayRadio1[i].comment == currentTrack.comment)
gotoIndex = i + 1;
if (gotoIndex != -1 && gotoIndex != arrayRadio1.length)
{
listItemClickHandler(new ListEvent("itemClick", false, false, -1, -1, -1, arrayRadio1[gotoIndex]));
compoList.list.scrollToIndex(gotoIndex);
}
}
if (radioType == "Две жизни спустя")
{
for (var i:Number = 0; i < arrayRadio2.length; i++)
if (arrayRadio2[i].name == currentTrack.name &&
arrayRadio2[i].comment == currentTrack.comment)
gotoIndex = i + 1;
if (gotoIndex != -1 && gotoIndex != arrayRadio2.length)
{
listItemClickHandler(new ListEvent("itemClick", false, false, -1, -1, -1, arrayRadio2[gotoIndex]));
compoList.list.scrollToIndex(gotoIndex);
}
}
}
prevButtonZone.addEventListener(MouseEvent.CLICK, prevButtonClickHandler);
nextButtonZone.addEventListener(MouseEvent.CLICK, nextButtonClickHandler);
prevButton.visible = false;
nextButton.visible = false;
prevButtonZone.addEventListener(MouseEvent.ROLL_OVER, function() { prevButton.visible = true; } );
prevButtonZone.addEventListener(MouseEvent.ROLL_OUT, function() { prevButton.visible = false; } );
nextButtonZone.addEventListener(MouseEvent.ROLL_OVER, function() { nextButton.visible = true; } );
nextButtonZone.addEventListener(MouseEvent.ROLL_OUT, function() { nextButton.visible = false; } );
}
// prepare compositions list
protected function prepareCompoList():void
{
//var myCalibri:Font = new MyCalibri();
var textFormat:TextFormat = new TextFormat();
//textFormat.font = "Calibri";
//textFormat.font = myCalibri.fontName;
textFormat.size = 10;
textFormat.color = 0xFFFFFF;
compoList.list.setRendererStyle("disabledTextFormat", textFormat);
compoList.list.setRendererStyle("textFormat", textFormat);
compoList.list.setRendererStyle("embedFonts", false);
compoList.list.addEventListener(ListEvent.ITEM_CLICK, listItemClickHandler);
}
function listItemClickHandler(event:ListEvent):void
{
soundLengthRaw = String(event.item.length_raw);
soundLengthSecs = Number(event.item.length_secs);
if (soundIsPlaying)
{
soundChannel.stop();
soundIsPlaying = false;
}
if (soundObject.bytesTotal != soundObject.bytesLoaded)
soundObject.close();
soundObject = null;
soundObject = new Sound();
soundObject.load(new URLRequest(urlPrefix + "data/" + event.item.audio), new SoundLoaderContext(2000));
soundChannel = soundObject.play(0, 0, soundTrans);
//soundChannel.stop();
__________________
Жить хорошо, когда вокруг столько интересного.... |
|
|||||
|
продолжение кода
// remove pause state
soundIsPlaying = true;
soundIsPaused = false;
soundPausePosition = 0;
soundChannel.addEventListener(Event.SOUND_COMPLETE, soundChannelSoundCompleteHandler);
// update images array
//if (hasImages)
updateImages(event.item.name, event.item.comment);
//if (!hasImages)
{
//trace(screen.getChildByName("loader"));
var loaderClip:DisplayObject = screen.getChildByName("loader");
if (loaderClip != null)
screen.removeChild(loaderClip);
}
// set comment
track.comment.text = event.item.comment;
currentTrack = event.item;
clearInterval(soundUpdateInterval);
soundUpdateInterval = setInterval(soundUpdateIntervalHandler, 100);
radioType = radioType;
}
function soundUpdateIntervalHandler():void
{
// update loading progress bar
track.cachedBar.width = (Math.round(soundObject.bytesLoaded) / Math.round(soundObject.bytesTotal)) * 273;
// update playing progress bar
track.position.x = track.time.x = (soundChannel.position / (soundLengthSecs * 1000)) * 273;
track.time.x -= 19;
var timeMinutes:String = String(Math.floor(soundChannel.position / 59500));
var timeSeconds:String = String(Math.round(soundChannel.position / 1000) % 60);
if (timeSeconds.length == 1)
timeSeconds = "0" + timeSeconds;
track.time.text = timeMinutes + ":" + timeSeconds;
// update buttons state
if (!soundIsPlaying)
{
playButton.visible = true;
stopButton.visible = false;
}
else
{
playButton.visible = false;
stopButton.visible = true;
}
// update images
//trace(images[imageCurrentIndex].time_secs + " > " + soundChannel.position / 1000);
//trace(imageCurrentIndex);
//if (hasImages)
if (imageCurrentIndex < images.length - 1)
if (images[imageCurrentIndex].time_secs < soundChannel.position / 1000)
{
var loaderClip:DisplayObject = screen.getChildByName("loader");
if (loaderClip != null)
screen.removeChild(loaderClip);
var loader:Loader = new Loader();
var urlRequest:URLRequest = new URLRequest(urlPrefix + "data/" + images[imageCurrentIndex].image);
loader.load(urlRequest);
loader.x = -345 / 2.0;
loader.y = -189 / 2.0;
loader.name = "loader";
screen.addChild(loader);
imageCurrentIndex++;
}
}
// prepare track bar
protected function prepareTrackBar():void
{
function trackClickHandler(event:MouseEvent):void
{
var newPosition:Number = (event.stageX - 357.6) / 273 * soundLengthSecs * 1000;
soundChannel.stop();
soundChannel = soundObject.play(newPosition, 0, soundTrans);
soundIsPlaying = true;
soundChannel.addEventListener(Event.SOUND_COMPLETE, soundChannelSoundCompleteHandler);
// handle images displaying
//if (hasImages)
{
imageCurrentIndex = 0;
for (var i:Number = 0; i < images.length; i++)
{
if (images[i].time_secs > soundChannel.position / 1000)
{
imageCurrentIndex = i - 1;
break;
}
}
}
}
track.addEventListener(MouseEvent.CLICK, trackClickHandler);
}
protected function prepareVolumeSlider():void
{
function bgBigMouseMoveHandler(event:MouseEvent):void
{
if (volumeDrag)
{
var newX:Number = event.stageX - volumeBar.x;
if (newX > 40.1 || newX < -0.1)
return;
volumeBar.track.x = newX;
volumeBar.percent.x = newX - 15;
var volPercent = volumeBar.track.x / 40;
volumeBar.percent.text = Math.round(volPercent * 100) + "%";
soundTrans.volume = volPercent;
if (soundIsPlaying)
soundChannel.soundTransform = soundTrans;
}
}
volumeBar.bgBig.addEventListener(MouseEvent.MOUSE_DOWN, function() { volumeDrag = true; } );
volumeBar.bgBig.addEventListener(MouseEvent.MOUSE_UP, function() { volumeDrag = false; } );
volumeBar.bgBig.addEventListener(MouseEvent.MOUSE_OUT, function() { volumeDrag = false; } );
volumeBar.bgBig.addEventListener(MouseEvent.MOUSE_MOVE, bgBigMouseMoveHandler);
// prepare values
var volPercent = volumeBar.track.x / 40;
volumeBar.percent.text = Math.round(volPercent * 100) + "%";
soundTrans.volume = volPercent;
//soundChannel.soundTransform = soundTrans;
}
// prepare all data in player
protected function prepareData():void
{
// load xml with all data
function urlLoaderCompleteHandler(event:Event):void
{
dataXML = new XML(event.target.data);
updateData();
}
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, urlLoaderCompleteHandler);
urlLoader.load(new URLRequest(urlPrefix + "admin/xml.php"));
}
// update all data in player and gui
protected function updateData():void
{
// parse xml and add data into list
var children:XMLList = dataXML.children();
var dataProv:DataProvider = new DataProvider();
arrayRadio1 = arrayRadio2 = null;
arrayRadio1 = new Array();
arrayRadio2 = new Array();
for (var i:Number = 0; i < children.length(); i++)
{
var obj:Object = new Object();
obj.label = children[i].attribute("date") + " " + children[i].attribute("name") + " " + children[i].attribute("length_raw");
obj.name = children[i].attribute("name");
obj.comment = children[i].attribute("comment");
obj.date = children[i].attribute("date");
obj.time = children[i].attribute("time");
obj.radio = children[i].attribute("radio");
obj.audio = children[i].attribute("audio");
obj.length_raw = children[i].attribute("length_raw");
obj.length_secs = children[i].attribute("length_secs");
if (radioType == children[i].attribute("radio"))
dataProv.addItem(obj);
if (children[i].attribute("radio") == "Тарантайка дэйли")
arrayRadio1.push(obj);
else if (children[i].attribute("radio") == "Две жизни спустя")
arrayRadio2.push(obj);
}
compoList.list.dataProvider = dataProv;
//trace(arrayRadio1);
//trace(arrayRadio2);
// prevent play error at startup
if (firstRun)
{
listItemClickHandler(new ListEvent("itemClick", false, false, -1, -1, 0, arrayRadio1[0]));
if (soundIsPlaying)
{
soundPausePosition = soundChannel.position;
soundChannel.stop();
soundIsPlaying = false;
soundIsPaused = true;
}
firstRun = false;
}
}
protected function updateImages(compoName:String, compoComment:String)
{
var children:XMLList = dataXML.children();
var dataProv:DataProvider = new DataProvider();
imageCurrentIndex = 0;
var arrayLoaded:Boolean = false;
for (var i:Number = 0; i < children.length(); i++)
{
if (compoName != children[i].attribute("name") &&
compoComment != children[i].attribute("comment"))
continue;
images = new Array();
var imageNodes = children[i].children();
if (imageNodes.length() == 0)
{
hasImages = false;
break;
}
hasImages = true;
for (var j:Number = 0; j < imageNodes.length(); j++)
{
obj = new Object();
obj.id = imageNodes[j].attribute("id");
obj.compo_id = imageNodes[j].attribute("compo_id");
obj.time = imageNodes[j].attribute("time");
obj.image = imageNodes[j].attribute("image");
obj.time_secs = imageNodes[j].attribute("time_secs");
images.push(obj);
}
var obj = new Object();
obj.id = 999999;
obj.compo_id = imageNodes[0].attribute("compo_id");
obj.time = "9999:9999";
obj.image = "";
obj.time_secs = 999999;
images.push(obj);
arrayLoaded = true;
break;
}
if (arrayLoaded)
images.sortOn("time_secs", Array.NUMERIC);
}
function soundChannelSoundCompleteHandler(event:Event):void
{
soundIsPlaying = false;
soundChannel = soundObject.play(0, 0, soundTrans);
soundChannel.stop();
soundIsPaused = false;
soundPausePosition = 0;
}
}
}
__________________
Жить хорошо, когда вокруг столько интересного.... |
|
|||||
|
компоненты это зло плеер весит написанный в ручную с нуля весит мизер.
ошибка возникает при передвигании ползунка. мой плеер весит 4 кб) здесь можете глянуть? он не доделан но не значительно потолстеет думаю. http://www.truedomen.tu2.ru/music2/ а у клиента может не работать потому что версия старая или у него в кеше лежит старая неработающая версия в таком случае нужно чистить кэш да и кто пишет такие вещи в один класс О_о |
|
|||||
|
Регистрация: Sep 2006
Адрес: Zaporozhye, Ukraine
Сообщений: 141
|
посмотрел, работают оба
update: Если играться с ползунком вылазит ошибка Последний раз редактировалось vic_; 03.09.2008 в 21:01. |
|
|||||
|
Регистрация: Apr 2007
Сообщений: 1,369
|
Подтверждаю, что отписал vic_.
__________________
john |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:01. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|