Blog
AS3 Simple MP3 player
8 years, 4 months ago Posted in: Blog Comments Off

Un simple player para ficheros MP3 y su implementación.

Actionscript:
  1. package com.mattimatti.media.player
  2. {
  3.     import flash.events.ErrorEvent;
  4.     import flash.events.Event;
  5.     import flash.events.EventDispatcher;
  6.     import flash.events.IOErrorEvent;
  7.     import flash.events.ProgressEvent;
  8.     import flash.media.Sound;
  9.     import flash.media.SoundChannel;
  10.     import flash.net.URLRequest;
  11.    
  12.     import mx.logging.ILogger;
  13.  
  14.  
  15.  
  16.     [Event(name="loadcomplete", type="flash.events.Event")]
  17.    
  18.     [Event(name="error", type="flash.events.ErrorEvent")]
  19.    
  20.     [Event(name="stateChange", type="flash.events.Event")]
  21.    
  22.     [Event(name="finished", type="flash.events.Event")] 
  23.    
  24.  
  25.     public class Mp3Player extends EventDispatcher
  26.     {
  27.        
  28.         private var sound:Sound;
  29.         private var channel:SoundChannel;
  30.         private var _position:Number = 0;
  31.         public var log:ILogger;
  32.         private var _paused:Boolean = false;
  33.         private var _loaded:Boolean = false;
  34.        
  35.         public function Mp3Player() {
  36.             super();
  37.         }
  38.  
  39.  
  40.  
  41.  
  42.         /**
  43.          * facade switch for play pause buttons
  44.          *
  45.          */
  46.         public function playOrPause():void {
  47.             if(paused){
  48.                 play()
  49.             }else{
  50.                 pause();
  51.             }
  52.  
  53.         }
  54.  
  55.    
  56.         /**
  57.          * Pauses the current stream
  58.          *
  59.          */ 
  60.         public function pause():void {
  61.             if(channel){
  62.                 _position = channel.position;
  63.                 channel.stop();
  64.                 _paused = true;
  65.                 changeState();
  66.             }
  67.  
  68.         }
  69.  
  70.         [Bindable]
  71.         public function get loaded():Boolean {
  72.             return _loaded;
  73.         }
  74.        
  75.        
  76.         public function set loaded(value:Boolean):void {
  77.            
  78.         }
  79.        
  80.        
  81.         [Bindable]
  82.         public function get paused():Boolean {
  83.             return _paused;
  84.         }
  85.        
  86.         public function set paused(value:Boolean):void {
  87.            
  88.         }
  89.  
  90.         /**
  91.          * Plays a sound
  92.          *
  93.          */
  94.         public function play():void {
  95.             if(sound){
  96.                 if(_paused){
  97.                     channel = sound.play(_position);
  98.                    
  99.                 }else{
  100.                     channel = sound.play();
  101.                 }
  102.                 _paused = false;
  103.                
  104.                 channel.addEventListener(Event.SOUND_COMPLETE, endPlayHandler);
  105.                            
  106.                 changeState();
  107.             }
  108.         }
  109.  
  110.  
  111.         /**
  112.          * Plays a sound
  113.          *
  114.          */
  115.         public function clear():void {
  116.             try{
  117.                
  118.                 if(channel)channel.stop();
  119.                 if(sound)sound.close();
  120.                  _loaded = false;
  121.                  _paused = false;
  122.                 
  123.                  changeState();
  124.                 
  125.             }catch(error:Error){
  126.                 if(log)log.error(error.message);
  127.             }
  128.         }
  129.  
  130.  
  131.         /**
  132.          * Load a Mp3 file an play
  133.          * @param inUrl
  134.          * @return Boolean if success
  135.          *
  136.          */
  137.         public function load(inUrl:String):Boolean {
  138.            
  139.             var stream:URLRequest = new URLRequest(inUrl);
  140.  
  141.             try{
  142.            
  143.                 _loaded = false;
  144.                
  145.                 sound = new Sound();
  146.                
  147.                 sound.addEventListener(IOErrorEvent.IO_ERROR,onloadError);
  148.                 sound.addEventListener(ProgressEvent.PROGRESS, onLoadProgress);
  149.                 sound.addEventListener(Event.COMPLETE, onLoadComplete);
  150.    
  151.                 changeState();
  152.                
  153.                 sound.load(stream);
  154.                
  155.    
  156.             }catch(error:Error){
  157.                 if(log)log.error(error.message);
  158.                 return false
  159.             }
  160.             return true;
  161.         }
  162.  
  163.  
  164.  
  165.  
  166.         /**
  167.          *
  168.          * @param event
  169.          *
  170.          */
  171.         private function onLoadProgress(event:ProgressEvent):void {
  172.             var loadedPct:uint =         Math.round(100 * (event.bytesLoaded / event.bytesTotal));
  173.            // trace("The sound is " + loadedPct + "% loaded.");
  174.         }
  175.        
  176.        
  177.        
  178.         private function endPlayHandler(event:Event):void {
  179.             changeState("finished");
  180.             clear();
  181.         }
  182.        
  183.         /**
  184.          *
  185.          * @param event
  186.          *
  187.          */  
  188.         private function onLoadComplete(event:Event):void {
  189.             var localSound:Sound = event.target as Sound;
  190.             _paused = false;
  191.             _loaded = true;
  192.             changeState("loadcomplete");
  193.             play();
  194.         }
  195.  
  196.  
  197.         /**
  198.          *
  199.          * @param event
  200.          *
  201.          */
  202.         private function changeState(inEventType:String=null):void {
  203.             if(inEventType)dispatchEvent(new Event(inEventType,true,false));
  204.             dispatchEvent(new Event("stateChange",true,false));
  205.         }
  206.  
  207.         /**
  208.          *
  209.          * @param event
  210.          *
  211.          */
  212.         private function onloadError(event:IOErrorEvent):void {
  213.             dispatchEvent(new ErrorEvent(ErrorEvent.ERROR,true,false));
  214.             dispatchEvent(new Event("stateChange",true,false));
  215.         }
  216.  
  217.     }
  218. }

Implementación en MXML en un canvas

Actionscript:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" xmlns:player="com.mattimatti.media.player.*"
  3.     creationComplete="creationCompleteHandler()"
  4.     >
  5.  
  6. <mx:Script>
  7.     <![CDATA[
  8.         import mx.logging.ILogger;
  9.        
  10.             private var log:ILogger;
  11.        
  12.             private function creationCompleteHandler(event:Event=null):void {
  13.                
  14.                 if(log)log.debug("creationCompleteHandler");
  15.                 try{
  16.                     var url:String = "some.mp3";
  17.                    
  18.                     player.clear();
  19.                     player.load(url);
  20.                    
  21.                 }catch(error:Error){
  22.                     if(log)log.error("error: " + error.message);
  23.                 }
  24.             }
  25.  
  26.            
  27.            
  28.             private function stateChangeHandler(event:Event):void{
  29.                 if(log)log.debug("stateChangeHandler");
  30.             }
  31.            
  32.            
  33.            
  34.             private function loadcompleteHandler(event:Event):void{
  35.                 if(log)log.debug("loadcompleteHandler");
  36.             }         
  37.            
  38.            
  39.            
  40.             private function finishedHandler(event:Event):void{
  41.                 if(log)log.debug("finishedHandler");
  42.             }         
  43.                    
  44.        
  45.        
  46.        
  47.        
  48.     ]]>
  49. </mx:Script>
  50.  
  51.  
  52.     <player:Mp3Player id="player" stateChange="stateChangeHandler(event)" finished="finishedHandler(event)" loadcomplete="loadcompleteHandler(event)" log="{log}"/>
  53. </mx:Canvas>

Comments are closed.

Image compression on this page is provided by WordPress Image Compressor