//////////////////////////////////////////////////////////////////////// soundPvMain.as //////////////////////////////////////////////////////////////////////// package { import fl.motion.Color; import flash.events.Event; import flash.utils.ByteArray; import org.papervision3d.core.geom.renderables.Vertex3D; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.view.BasicView; import org.papervision3d.objects.primitives.Cube; import org.papervision3d.view.layer.util.ViewportLayerSortMode; // import flash.media.SoundMixer; import flash.utils.getTimer; /** * ... * @author ishikiriyama */ public class soundPvMain extends BasicView{ private var leftcontainer:DisplayObject3D; private var rightcontainer:DisplayObject3D; private var rllist:Array; private var cpz:Number; public function soundPvMain() { super(stage.stageWidth, stage.stageHeight,true, true); // viewport.containerSprite.sortMode = ViewportLayerSortMode.INDEX_SORT; camera.y = 350; camera.z = -550; cpz = camera.z; camera.fov=60; camera.target = DisplayObject3D.ZERO; createObj(); startRendering(); // var sl:soundLoader = new soundLoader(); addEventListener(Event.ENTER_FRAME, loop); } private var smooth:Number = 0.5; private function loop(e:Event):void { // カメラ制御 camera.x += (mouseX / stage.stageWidth * 300 - 150) - camera.x * .1; camera.z += (mouseY / stage.stageHeight * 300 - 150) - camera.z * .1; var bytes:ByteArray = new ByteArray(); SoundMixer.computeSpectrum(bytes, false, 0); for (var i:int = 0; i < rllist.length; i++) { for (var j:int = 0; j < rllist[i].length; j++) { var t:Cube = rllist[i][j] as Cube; var now:Number = t.scaleY; var nowAlpha:Number = t.alpha; // var lr:Number = bytes.readFloat(); if (lr > 1) lr = 1; if (lr < 0) lr = 0; now += (lr - now) * smooth; nowAlpha += (lr - nowAlpha) * smooth; t.scaleY = now; t.alpha = Math.max(0.3, nowAlpha); } } } private var mList:Array=[]; private function createObj():void{ rllist = []; leftcontainer = new DisplayObject3D(); rightcontainer = new DisplayObject3D(); scene.addChild(leftcontainer); scene.addChild(rightcontainer); leftcontainer.x = -500; rightcontainer.x = 0; for (var i:int = 0; i < 2; i++) { var m:ColorMaterial = new ColorMaterial(Math.random() * 0xffffff); m.interactive = true; mList[i] = { mat:m }; var mlist:MaterialsList = new MaterialsList( {all:m } ); var list:Array = []; for (var j:int = 0; j < 81; j++) { var o:Cube = new Cube(mlist, 20, 20, 200, 1, 1, 1); o.useOwnContainer = true; // for each(var g:Vertex3D in o.geometry.vertices) { g.y += 100; } list[j] = o; //o.scaleY = 0; if (i == 0) { leftcontainer.addChild(o); }else { rightcontainer.addChild(o); } o.alpha = 0.2; o.x = (j%9)*50 * 1.1; o.z = int(j/9)*50 * 1.1; } rllist[i] = list; // } } } } /////////////////////////////////////////////////////////////// soundLoader.as ////////////////////////////////////////////////////////////// package { import flash.events.Event; import flash.events.EventDispatcher; import flash.events.ProgressEvent; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundLoaderContext; import flash.net.URLRequest; /** * ... * @author ... */ public class soundLoader extends EventDispatcher{ private var sound:Sound; private var ch:SoundChannel; private var soundlist:Array = ["sound/cm.mp3","sound/nos82.mp3","sound/nos78.mp3","sound/nos72.mp3","sound/nos51.mp3"]; // //constractor public function soundLoader() { next(); } private var index:int = 0; private function next():void { ch = new SoundChannel(); sound = new Sound(); sound.addEventListener(Event.COMPLETE, loadsound); var context:SoundLoaderContext = new SoundLoaderContext(2000, false); sound.load(new URLRequest(soundlist[index]), context); index++; if (index > soundlist.length - 1) { index = 0; } trace(index); } private function loadsound(e:Event):void { ch = sound.play(0, 1); ch.addEventListener(Event.SOUND_COMPLETE, soundComplete); } private function soundComplete(e:Event):void { trace("soundcomp"); sound.removeEventListener(Event.COMPLETE, loadsound); ch = null; sound = null; next(); } } }