Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   мп3 проигрыватель. (ошибки, оптимизация веса) (http://www.flasher.ru/forum/showthread.php?t=115572)

fancy 03.09.2008 18:24

мп3 проигрыватель. (ошибки, оптимизация веса)
 
Написали плеер.
плеер мп3 у клиента он же тот же плеер только музыка другая вставлена

Проблем существует несколько:
1. По какой-то странной причине, плеер работает везде, кроме клиента. Если, кому не сложно тестаните, буду признателен, если можно дайте ответ по обоим. Играют не играют.

2. Плеер векторный, написан на AS3 но весит нереально дофига 260кб. приэтом я не понимаю почему. Возможно из-за импортированных в него компонент.

Инфа о треках береться здесь

Помогите пожалуйста, моих нервов не хватает на общение с клиентами :wacko:

fancy 03.09.2008 18:25

его код
Код:

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();


fancy 03.09.2008 18:26

продолжение кода
Код:

                               
                                // 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;
                }
        }
}


ramshteks 03.09.2008 18:29

компоненты это зло плеер весит написанный в ручную с нуля весит мизер.
ошибка возникает при передвигании ползунка. мой плеер весит 4 кб)
здесь можете глянуть? он не доделан но не значительно потолстеет думаю.

http://www.truedomen.tu2.ru/music2/

а у клиента может не работать потому что версия старая или у него в кеше лежит старая неработающая версия в таком случае нужно чистить кэш


да и кто пишет такие вещи в один класс О_о

vic_ 03.09.2008 20:57

посмотрел, работают оба

update:
Если играться с ползунком вылазит ошибка
Код:

TypeError: Error #1010: A term is undefined and has no properties.
        at player/soundUpdateIntervalHandler()
        at Function/http://adobe.com/AS3/2006/builtin::apply()
        at <anonymous>()
        at SetIntervalTimer/onTimer()
        at flash.utils::Timer/_timerDispatch()
        at flash.utils::Timer/tick()


Molecula 03.09.2008 21:08

Подтверждаю, что отписал vic_.

Gaen 03.09.2008 21:22

Ембедные шрифты тоже весу добавляют


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

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