Ecualizador 3D (AS 3.0 + Papervision 2.0)

ecualizador

Hola de nuevo,

aquí os dejo otro ejercicio en AS3 y Papervision, esta vez jugando con el sonido, unos cubos que interactuan segun la clase SoundMixer.computeSpectrum.
He creado un deslizador para que podáis rotarlo. Las clases estan en la carpeta com.kaax.clases.* , una es la clase Ecualizador, con
todo lo que necesitáis para el 3D, el drag del deslizador, y el movimiento por sonido. Y luego, la clase MiStage, que es tan solo para
reposicionar.

Este seria la clase Ecualizador


 
/*
  
   * ECUALIZADOR 3D
   *
   * @author    Isaac León (KAAX)
   * @version    1.0.0
   * @code    AS 3.0
   * @email    hola@isaacleon.com
   * @url        www.isaacleon.com
   * @blog      www.isaacleon.com/blog
  
  */


package com.kaax.clases {
 
  import org.papervision3d.scenes.*;
  import org.papervision3d.cameras.*;
  import org.papervision3d.objects.*;
  import org.papervision3d.objects.special.*;
  import org.papervision3d.objects.primitives.*;
  import org.papervision3d.materials.*;
  import org.papervision3d.materials.special.*;
  import org.papervision3d.materials.shaders.*;
  import org.papervision3d.materials.utils.*;
  import org.papervision3d.lights.*;
  import org.papervision3d.render.*;
  import org.papervision3d.view.*;
  import org.papervision3d.events.*;
  import org.papervision3d.core.utils.*;
  import org.papervision3d.core.utils.virtualmouse.VirtualMouse;
  
  import flash.display.*;
  import flash.events.*;
  import flash.net.URLLoader;
  import flash.net.URLRequest;
  import flash.media.*;
    import flash.display.Stage;
  import flash.utils.*;
  
    
  
  import caurina.transitions.*;
      
      public class Ecualizador{
      
      
              private var cancion:String;
          private var _background:MovieClip;
          private var _mc:Sprite;
          private var logo:MovieClip;
          private var cubo:MovieClip;
          private var cubo2:MovieClip;
          private var request:URLRequest;
          private var sonido:Sound;
          private var chan:SoundChannel;
                    private var mcStage:Stage;
          private var bt_desliza:MovieClip;
          private var duracion:MovieClip;
          private var carril:MovieClip;
          private var viewport:Viewport3D;
          private var render:BasicRenderEngine;
          private var scene:Scene3D;
          private var camera:Camera3D;
          private var miMaterial1:MovieMaterial;
          private var miMaterial2:MovieMaterial;
          private var currentTime:Number;
          private var arrayCubos:Array;
          private var bits:ByteArray;
          private var totalSpacio:int;
          private var anchura:Number;
          private var arrayClips:Array;
          private var cuantosCubosSpectrum:Number;
          private var tiempo:Timer;
          private var xDist:int;
          private var yDist:int;
          private var deslizando:Boolean;
          private var xFinal:int;
          private var yFinal:int;
          private var mX:int;
          private var soundMixer:SoundMixer;
          
 
                    public function Ecualizador(_mc:Sprite,_background:MovieClip,cancion:String,logo:MovieClip,
cubo:MovieClip,cubo2:MovieClip,bt_desliza:MovieClip,duracion:MovieClip,carril:MovieClip):void{
            
              this._mc = _mc;
              this.mcStage = _mc.stage;
              this._background = _background;
              this.logo = logo;
              this.cubo = cubo;
              this.cubo2 = cubo2;
              this.cubo = cubo;
              this.bt_desliza = bt_desliza;
              this.duracion = duracion;
              this.carril = carril;
              this.cancion=cancion;
              
              initStage();
              initVariables();
              construye2carasCubo();
              construyeSpectrum();
          }
          
          public function initStage():void {
            
                
               var miStage:com.kaax.clases.MiStage=new com.kaax.clases.MiStage(this._mc,_background,bt_desliza,logo,duracion,carril);
          }
          private function initVariables():void {
            
              
               this.viewport= new Viewport3D(0, 0, true, true);
               this._mc.addChild(viewport);
               this.render= new BasicRenderEngine();
               this.scene= new Scene3D();
               this.camera= new Camera3D();
               this.camera.zoom = 4;
 
               this.camera.focus = 100;
               this.camera.y = 500;
               this.camera.x = -2000;
               this.currentTime=0;
                     this.arrayCubos=new Array();
                           this.bits= new ByteArray();
                           this.totalSpacio=1760;
                           this.arrayClips=new Array();
               this.request= new URLRequest(this.cancion);
                                                         this.sonido= new Sound();
                                                         this.sonido.load(this.request);
               this.chan= this.sonido.play();
               this.cuantosCubosSpectrum=6;
               this.deslizando=false;
               //this.soundMixer=new SoundMixer();
               this.tiempo=new Timer(100);
          }
          
          private function rango(numeroMin:Number, numeroMax:Number):Number {
 
              return Math.floor(Math.random() * numeroMax - numeroMin + 1) + numeroMin;
          }
          
          
          private function construye2carasCubo():void{
            
               miMaterial1= new MovieMaterial(this.cubo);
               miMaterial1.interactive = false;
               miMaterial1.smooth = false;
               miMaterial1.animated = false;
                    
               miMaterial2= new MovieMaterial(this.cubo2);
               miMaterial2.interactive = false;
               miMaterial2.smooth = false;
               miMaterial2.animated = false;
            
          }
          
          private function construyeSpectrum():void{
            
                
              for (i:int=0; i < cuantoscubosspectrum ;  i+=1) {
              
                  var miCubo:Cube = new Cube(new MaterialsList({front:miMaterial1, back:miMaterial1, all:miMaterial2}),  1420, 1450,  1450, 6,6,6);
                scene.addChild(miCubo);
                
                var miX=i*100;
                miCubo.scaleX=cubo.scaleY=0.1;
                Tweener.addTween(miCubo, {x:miX,scaleX:1,scaleY:1, z:2900, delay:i*0.2, time: 1.2, transition:"easeinoutquint"});
                render.renderScene(scene, camera, viewport);
                      arrayCubos[i]=miCubo;
              
              }
              iniciaTemporizadorSpectrum();
              iniciaDrag();
          }
          
          private function iniciaTemporizadorSpectrum():void{
            
              
              this.tiempo.addEventListener(TimerEvent.TIMER, refrescarSpectrum);
              this.tiempo.start();
 
          }
          
          private function refrescarSpectrum(event:TimerEvent):void{
            
              
              SoundMixer.computeSpectrum(bits, true);
              currentTime = chan.position;
              duracion.scaleX=currentTime/sonido.length;
              var j:int;
              var anchura:uint = 1;
            
            
                    for (j=0;  j < cuantosCubosSpectrum;  j+=1) {
                
                        var conversion_:Number = bits.readFloat();
                  var desplazamiento:Number = (conversion_ * 5);
                  var cubo:Cube=arrayCubos[j];
                              cubo.x=3400+j*1760;
                              Tweener.addTween(cubo, {scaleY:desplazamiento, time: 0.3, transition:"easeinoutquint"});
                        render.renderScene(scene, camera, viewport);
            
              }
 
          }
          
          private function desliza(deslizador:Sprite):void{
            
              if (deslizando){
                
                deslizador.x = this._mc.mouseX;
                camera.zoom=+this._mc.mouseX/300+5;
                
                for(var i:Number=0 ; i < cuantosCubosSpectrum ;  i++){
                    
                    var cubo=arrayCubos[i];
                    cubo.rotationX = -this._mc.mouseY/4;
                    cubo.rotationY = -this._mc.mouseX/4;
                    
                  }
              }
              
          }
          
          
          private function iniciaDrag():void{
            
              this.mcStage.addEventListener(Event.ENTER_FRAME, dragEnterFrame)
              this.mcStage.addEventListener(MouseEvent.MOUSE_DOWN, dragMouseDown)
              this.mcStage.addEventListener(MouseEvent.MOUSE_UP, dragMouseUp)
              bt_desliza.buttonMode=true;
            
          }
          
          private function dragEnterFrame(event:Event)    {
          
                 desliza(this.bt_desliza)
          
          
          }  
          
          private function dragMouseDown(event:MouseEvent):void {
          
            deslizando = true;
            
            
          }
          private function dragMouseUp(event:MouseEvent)    {
            
            deslizando = false;
            
          
          
          }
          
 
          
          
          
          
    }
  }
          

Y nada, espero que os guste.

Aquí os dejo los enlaces.

Un saludo!

Ver Ecualizador3D
Descargar Ecualizador3D

6 Responses to “Ecualizador 3D (AS 3.0 + Papervision 2.0)”

  1. Bleend Says:

    Alucinante o_O

  2. Anonimo Says:

    1 comentario sólo ¿?, que grande amigo, que agrande. Buen trabajo.

  3. Zguillez Says:

    Muy bueno (y)

  4. Administrador Says:

    gracias a los tres!

    me alegro que os gustara :)

  5. gemma Says:

    Felicidades de nuevo!!! que pequeña me siento ante tu gran sabiduria,conocimiento y
    talento.Besos.

  6. Paco Lopez Says:

    OoOOOOOOooOOleeeeeeè!!!
    Joder tio que control.
    Felicidades x tu curro!!

Leave a Reply