Demo Papervision GreatWhite + SoundMixer.computeSpectrum

Demo Papervision GreatWhite + SoundMixer.computeSpectrum

Imagen en reemplazo de flash
Una de las novedades de Actionscript 3.0 es la clase SoundMixer, que permite de manera fácil obtener un ByteArray que contenga una instantánea del sonido reproducido. Hay un montón de demos de SoundMixer, muchas de ellas con Papervision. Esta es una más.

La canción es "Atlas", del grupo Battles (para mí uno de los mejores de 2007).


  1. ////////////////////////////////////////////////////////////////////
  2. //CLASES
  3. import org.papervision3d.view.Viewport3D;
  4. import org.papervision3d.cameras.*;
  5. import org.papervision3d.scenes.Scene3D;
  6. import org.papervision3d.render.BasicRenderEngine;
  7. import org.papervision3d.objects.primitives.Plane
  8. import org.papervision3d.materials.MovieMaterial;
  9. import org.papervision3d.materials.utils.MaterialsList;
  10. import org.papervision3d.core.geom.renderables.Vertex3D;
  11. import org.papervision3d.objects.DisplayObject3D;
  12.  
  13. import flash.display.Sprite;
  14. import flash.events.*;
  15. import flash.media.Sound;
  16. import flash.media.SoundChannel;
  17. import flash.media.SoundTransform;
  18. import flash.media.SoundMixer;
  19. import flash.net.URLRequest;
  20. import flash.utils.Timer;
  21. import flash.utils.ByteArray;
  22.  
  23. ////////////////////////////////////////////////////////////////////
  24. //VARIABLES
  25. //Variables Flash
  26. var url:String = "prueba.mp3";
  27. var song:SoundChannel;
  28. var soundFactory:Sound;
  29. var FourierTransform:Boolean = false;
  30. var arrayMixer:ByteArray = new ByteArray();
  31. var pan:int = 0;
  32. var porcentLoad:Number = 0;
  33. //Variables 3D
  34. var viewport:Viewport3D;
  35. var renderer:BasicRenderEngine;
  36. var escena:Scene3D;
  37. var camara:FreeCamera3D;
  38. var movieMaterial:MovieMaterial;
  39. var plano:DisplayObject3D;
  40. var ref_object3D:DisplayObject3D;
  41. var calidad = 40;
  42. var contador:Number = 0;
  43. var xIni:Array = new Array();
  44. var yIni:Array = new Array();
  45. var zIni:Array = new Array();
  46. stage.quality = StageQuality.LOW;
  47.  
  48.  
  49. function Empezar(vpWidth:Number = 700, vpHeight:Number = 400):void {
  50. 	CrearPapervision(vpWidth, vpHeight);
  51. 	CrearObjetos();
  52. 	Crear3D();
  53. 	GuargarXIni();
  54. 	CrearEventos();
  55. 	CargarSong();
  56. 	PonerFrameRate();
  57. }
  58.  
  59. function PonerFrameRate(){
  60. 	var FPS = new FrameRate();
  61. 	addChild(FPS);
  62. }
  63. function CargarSong():void {
  64. 	SoundMixer.stopAll();//Metodo de la clase SoundMixer, que nos permite detener todos los Sonidos que se esten reproduciendo
  65. 	soundFactory = new Sound();//Creamos una nueva instancia de la clase Sound
  66. 	var request:URLRequest = new URLRequest(url);//Hacemos la petición del mp3   
  67. 	//Luego asiganmos los Listener de la clase Sound();
  68. 	soundFactory.addEventListener(Event.COMPLETE, completeHandler);
  69. 	soundFactory.addEventListener(ProgressEvent.PROGRESS, progressHandler);
  70. 	soundFactory.load(request);//Cargamos la canción
  71. }
  72.  
  73. function completeHandler(event:Event){
  74. 	//Una Vez que la canción se halla cargado por completo la reproducimos
  75. 	song = soundFactory.play(0,1000);//La ejecutamos
  76. }
  77.  
  78. function progressHandler(event:ProgressEvent):void {
  79. 	//Mientras se carga, acutalizamos el valor de la variable porcentLoad   
  80. 	porcentLoad = Math.round((event.bytesLoaded*100)/event.bytesTotal);
  81. }
  82.  
  83. //////////////////////////////////////////////////////////////////////////////////////
  84. //FUNCIONES
  85. //Esta función es la que invocamos al comenzar. Sería la constructora de la escena
  86.  
  87. //Crea los elementos necesarios de la escena PPV
  88. function CrearPapervision(vpWidth:Number, vpHeight:Number):void {
  89. 	//Este va a ser el "contenedor" que nos va a permitir visualizar la escena. Es el
  90. 	//objeto a través del cual visualizamos la escena 3D. Hay que especificarle un ancho y un alto.
  91. 	viewport = new Viewport3D(vpWidth, vpHeight);
  92. 	addChild(viewport);
  93. 	//El renderer es el objeto que se encarga de renderizar la escena. Cada vez que se produce un cambio
  94. 	//Hay que volver a renderizar. Esto se hace en la funcion "Renderizar".
  95. 	renderer = new BasicRenderEngine();
  96. 	escena = new Scene3D();
  97. 	camara = new FreeCamera3D();
  98. 	camara.zoom = 3;
  99. 	camara.z = -1000
  100. 	camara.y = 100
  101. }
  102.  
  103. //En esta función se añaden todos los objetos 3d a la escena
  104. function Crear3D():void {
  105. 	escena.addChild(plano);
  106. }
  107.  
  108. //Crea todos los objetos que queremos añadir a la escena (en este caso un cubo).
  109. function CrearObjetos() {
  110. 	//Creo un material a partir de un clip que hay en el escenario
  111. 	var material:MovieMaterial = new MovieMaterial( Skin_mc, true, false, false );
  112. 	material.oneSide = false;
  113. 	plano = new Plane(material,1000,1000,10,10);
  114. 	plano.rotationX = 90;
  115. }
  116.  
  117. //En esta función se realizan los movimientos de objetos de la escena antes de renderizar.
  118. //En este caso muevo todos los vertices del cubo para generar el efecto de fluidez
  119. function Mover() {
  120. 	SoundMixer.computeSpectrum(arrayMixer, true);
  121. 	var count = 0;
  122. 	for each (var vertex:Vertex3D in plano.geometry.vertices) {
  123. 		plano.geometry.vertices[count].z += (arrayMixer[count] - plano.geometry.vertices[count].z)/4
  124. 		count++;
  125. 	}
  126. 	plano.rotationY += ((mouseX - 300) - plano.rotationY)/9;
  127. 	plano.rotationX += ((mouseY - 300) - plano.rotationX)/9;
  128.  
  129. }
  130.  
  131. //Añade los eventos necesarios a la escena.
  132. function CrearEventos():void {
  133. 	addEventListener(Event.ENTER_FRAME, Renderizar);
  134. }
  135.  
  136. //Esta función la he hecho para guardar las coordenadas iniciales de todos los puntos del
  137. //cubo que he creado para el efecto.
  138. function GuargarXIni() {
  139. 	var count = 0;
  140. 	for each (var vertex:Vertex3D in plano.geometry.vertices){
  141. 		plano.geometry.vertices[count].z += 100 - Math.random()*200;
  142. 		zIni.push(plano.geometry.vertices[count].z);
  143. 		count++;
  144. 	}
  145. }
  146.  
  147. //Hace los cambios necesarios en la escena a través de la función mover, y después
  148. //renderiza la escena.
  149. function Renderizar(e:Event):void {
  150. 	Mover();
  151. 	renderer.renderScene(escena, camara, viewport);
  152. }
  153.  
  154. ////////////////////////////////////////////////////////////////////////////////////////
  155. //Empezamos
  156.  
  157. Empezar();

Descargar archivos

Comentarios
    • Autor
    • MOVERICK
    HOla jefe..primero que todo son excelentes los tutos de papervision...No se si tu lo tienes pero tu podrias aser un basic de papervision para realizar una exploracion de habitacion 3d, que funcione con keyboard el desplazamiewnto, y la vista sea con el cursor de mouse he intenttado y tengo un prblema con eso
Dejar un comentario
Tu nombre (obligatorio):

E-mail (obligatorio, no se mostrará):

Web:

Comentario: