Dot Visualizer 音をグラフィックで表現する練習その1。 ※追記 なんかちょっとずれてたの直した。 su8erlemon forked:6favorite:34lines:163license : MIT License modified : 2011-10-10 21:20:36 Embed Tweet package { import flash.display.Shape; import flash.display.Stage; import flash.events.Event; import flash.display.MovieClip; import flash.display.Sprite; import flash.geom.PerspectiveProjection; import flash.geom.Point; import flash.display.StageQuality; import flash.events.MouseEvent; import frocessing.color.ColorHSV; import flash.filters.BlurFilter; import flash.filters.GlowFilter; import flash.display.BlendMode; import frocessing.color.ColorHSL; import flash.utils.Timer; import flash.utils.getTimer; import flash.media.Sound; import flash.utils.ByteArray; import flash.net.URLRequest; import flash.media.SoundMixer; import flash.media.SoundChannel; import flash.system.Security; import flash.filters.ColorMatrixFilter; [SWF(width="465", height="465", frameRate="60", backgroundColor="0x000000")] public class Main extends MovieClip{ private const SW:int = 465; private const SH:int = 465; private const SPEED:int = 40; private const MAX_NUM:int = 25; private var st:Sprite = new Sprite(); private var rl:Number = 0; private var rl2:Number = 0; private var rects:Vector.<Shape>; private var rectPoints:Vector.<Point>; private var perse:PerspectiveProjection; private var ry:int = 0; private var rx:int = 0; private var zz:int = 0; private var startTime:Number; private var prevBeat:Number; private var sound:Sound = new Sound(); private var spectBytes:ByteArray = new ByteArray(); private var spectrum:Vector.<Number> = new Vector.<Number>(512, true); private var spectrumAverage:Number = 0.0; private var back:Shape = new Shape(); public function Main() { Security.loadPolicyFile('http://su8erlemon.com/crossdomain.xml'); sound.addEventListener(Event.COMPLETE, soundLoadCompleteHandler); sound.load(new URLRequest('http://su8erlemon.com/lab/music/music2.mp3')); } private function soundLoadCompleteHandler(e:Event):void{ sound.removeEventListener(Event.COMPLETE, soundLoadCompleteHandler); back.graphics.beginFill(0x000000,1); back.graphics.drawRect(0,0,465,465); back.graphics.endFill(); addChild(back); stage.quality = StageQuality.LOW; rects = new Vector.<Shape>(MAX_NUM,true); rectPoints = new Vector.<Point>(MAX_NUM,true); perse = root.transform.perspectiveProjection; perse.fieldOfView =65; for(var i:uint = 0;i<MAX_NUM;i++){ var rect:Shape = new Shape(); rect.graphics.beginFill(0xffffff,1); rect.graphics.drawCircle(0,0,50); rect.graphics.endFill(); rect.x = -200 + 200 * int(i/5); rect.y = -200 + 200 * int(i%5); rectPoints[i] = new Point(rect.x,rect.y); rects[i] = rect; st.addChild(rect); } trace(st.width); st.graphics.beginFill(0x00ff00,0); st.graphics.drawRect(0,0,200,200); st.graphics.endFill(); st.x = 0;//-SW/2; st.y = 0;//-SH/2; addChild(st); var sc:SoundChannel = sound.play(); sc.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); addEventListener(Event.ENTER_FRAME,loop); startTime = getTimer(); prevBeat = 0.0; } private function soundCompleteHandler(e:Event):void{ var sc:SoundChannel = e.target as SoundChannel; sc.removeEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); sc.stop(); sc = sound.play(); sc.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); prevBeat = 0.0; startTime = getTimer(); } private function loop(e:Event):void{ computeSpectrum(); rl += 0.1; rl2 += 0.005; st.z += (zz - st.z)/6; for(var i:uint = 0;i<MAX_NUM;i++){ rects[i].x += (rectPoints[i].x - rects[i].x)/6; rects[i].y += (rectPoints[i].y - rects[i].y)/6; } var interval:uint = ( 60 * 1000)/140; var current:Number = getTimer() - startTime; var beat:uint = int(current/interval*2); if(int(beat*0.5) != int(prevBeat*0.5)){ for(var ii:uint = 0;ii<MAX_NUM;ii++){ rl = 0; rl2 += 90; rects[ii].x = rects[ii].x -500 + Math.random() * 1000; rects[ii].y = rects[ii].y -500 + Math.random() * 1000; rects[ii].scaleX = 1; rects[ii].scaleY = 1; } zz = int(-700*spectrumAverage*spectrumAverage); if(zz < 100)zz = 100; } if(int(0.125+beat*0.125) != int(0.125+prevBeat*0.125)){ for(ii = 0;ii<MAX_NUM;ii++){ rl = 0; rl2 = 5; rects[ii].x = rects[ii].x -100 + Math.random() * 200; rects[ii].y = rects[ii].y -100 + Math.random() * 200; rects[ii].scaleX = 0.4; rects[ii].scaleY = 0.4; } zz = int(-700*spectrumAverage*spectrumAverage); if(zz < 100)zz = 100; } st.rotationY = Math.sin(rl2)*30; st.rotationX = Math.sin(rl2*3)*30; st.rotationZ = Math.sin(rl2)*30; prevBeat = beat; } private function computeSpectrum():void{ var bytes:ByteArray = spectBytes; bytes.position = 0; SoundMixer.computeSpectrum(bytes, false); var total:Number = 0; var plus:Number = 0; var pc:uint = 0; var minus:Number = 0; var mc:uint = 0; var numbers:Vector.<Number> = spectrum; for (var i:uint = 0; i < 512; ++i) { var n:Number = bytes.readFloat() * 2.0; total += Math.abs(n); if (n > 0) { plus += n; ++pc; } else if (n < 0) { minus += n; ++mc; } numbers[i] = n; } spectrumAverage = total / 512.0; } } } Code Fullscreen Preview Fullscreen xfs makishima siouxcitizen.. bradsedito itsukichang xor fallen glasses_fact.. jlbadrian darman snowsunny harupiyo BeloitAve ds729 IPFix skn kuma360 umhr syano okoi atakanckilic.. Thy NINECUBE satosu andrewexex88.. novita001 applicott codeonwort 0xABCDEF tjoen a440hlz : beautifleffectsound pego451 : sound ProjectNya : かっちょええ! hidrodixtion.. : awesomeshapesoundvisualizer awesome beautifl effect shape sound visualizer MouseEvent.SOUND_COMPLETE ByteArray removeEventListener addEventListener stop position readFloat Security.loadPolicyFile MouseEvent.COMPLETE target Math.sin MouseEvent.ENTER_FRAME Math.abs Point trace Vector Math.random uint int Number sort new page view favorite forked pv109 forked from: Dot Visualizer itsykson forked:0 favorite:0lines:6 (diff:210) pv423 forked from: Dot Visualizer karlperemil forked:1 favorite:0lines:14 (diff:201) pv116 forked from: Dot Visualizer Mai.Yamada forked:0 favorite:0lines:163 (diff:1) pv166 forked from: Dot Visualizer Extra forked:0 favorite:0lines:163 (diff:2) pv249 forked from: Dot Visualizer godspeed1977max forked:0 favorite:0lines:163 (diff:1) pv138 forked from: Dot Visualizer zahoku forked:0 favorite:0lines:163 (diff:1)