Title: Thunderstorm
Scaling PV3D planes using SoundMixer.computeSpectrum data - revision 856 - sound file from here
Actionscript:
-
/**
-
* v0.1 code by dehash.com 2008
-
* Released as open source under the BSD License
-
* http://www.opensource.org/licenses/bsd-license.php
-
*/
-
package com.dehash.pv3d.examples.noise {
-
import org.papervision3d.objects.DisplayObject3D;
-
import org.papervision3d.objects.primitives.*;
-
import org.papervision3d.materials.BitmapMaterial;
-
import org.papervision3d.view.BasicView;
-
import flash.net.URLRequest;
-
import flash.utils.ByteArray;
-
import flash.display.Bitmap;
-
import flash.events.Event;
-
import flash.filters.*;
-
import flash.media.*;
-
-
[SWF(width="800", height="600", backgroundColor="0x000000")]
-
-
public class SphereOutlineSound extends BasicView {
-
[Embed(source='../assets/sphere.png')]
-
private var SphereImage:Class;
-
private var byteArray:ByteArray;
-
private var planes:Array;
-
-
public function SphereOutlineSound(viewportWidth:Number = 800, viewportHeight:Number = 600,
-
scaleToStage:Boolean=true, interactive:Boolean=false, cameraType:String="CAMERA3D") {
-
super(viewportWidth, viewportHeight, scaleToStage, interactive, cameraType);
-
-
// pv3d
-
var world:DisplayObject3D = new DisplayObject3D();
-
world.useOwnContainer = true;
-
world.filters = [new BlurFilter(24, 12, 2),new GlowFilter()];
-
scene.addChild(world);
-
camera.target = world;
-
-
var bitmapMaterial:BitmapMaterial = new BitmapMaterial(Bitmap(new SphereImage()).bitmapData);
-
bitmapMaterial.doubleSided = true;
-
-
var sphere:Sphere = new Sphere(null, 600, 10,10);
-
planes = [];
-
-
for ( var i:int = 0; i <sphere.geometry.vertices.length; i++) {
-
var plane:Plane = new Plane( bitmapMaterial, 50, 50 );
-
planes.push(plane);
-
plane.x = sphere.geometry.vertices[i].x;
-
plane.y = sphere.geometry.vertices[i].y;
-
plane.z = sphere.geometry.vertices[i].z;
-
plane.lookAt(camera);
-
world.addChild(plane);
-
}
-
-
// sound
-
var snd:Sound = new Sound(new URLRequest("assets/storm.mp3"));
-
var channel:SoundChannel = snd.play(0,100);
-
byteArray = new ByteArray();
-
-
startRendering();
-
}
-
-
protected override function onRenderTick(event:Event = null):void {
-
-
try {
-
SoundMixer.computeSpectrum(byteArray, true, 2);
-
for(var i:int = 0; i <planes.length; i++) {
-
planes[i].scale = (byteArray[i]/100> planes[i].scale )? byteArray[i]/100 : Math.max(planes[i].scale * 0.95, 0.5);
-
}
-
}catch (e:Error){
-
trace("SoundMixer.computeSpectrum Error "+e);
-
}
-
-
camera.x -= (camera.x - Math.sin(mouseX*0.01)*1200) /8;
-
camera.z -= (camera.z - Math.cos(mouseX*0.01)*1200) /8;
-
camera.y -= (camera.y - viewport.containerSprite.mouseY * 5) / 8;
-
-
renderer.renderScene(scene, camera, viewport);
-
}
-
}
-
}