/* * Copyright (c) 2009, abumarkub * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the abumarkub nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ import net.abumarkub.midi.MidiData2; import net.abumarkub.midi.bridge.MidiClient; import net.abumarkub.midi.bridge.MidiDataEvent; import com.transmote.flar.FLARManager; import com.transmote.flar.marker.FLARMarkerEvent; import com.transmote.flar.pattern.FLARPattern; import com.transmote.flar.source.FLARCameraSource; import com.transmote.utils.time.FramerateDisplay; import com.transmote.flar.marker.FLARMarker; import com.transmote.flar.utils.FLARPVGeomUtils; Flint, papervision, FlarManager, all pretty straight foreward. import com.transmote.flar.FLARManager; import com.transmote.flar.marker.FLARMarkerEvent; import com.transmote.flar.pattern.FLARPattern; import com.transmote.flar.source.FLARCameraSource; import com.transmote.utils.time.FramerateDisplay; import com.transmote.flar.marker.FLARMarker; import com.transmote.flar.utils.FLARPVGeomUtils; import org.flintparticles.threeD.emitters.Emitter3D; import org.flintparticles.threeD.papervision3d.PV3DPixelRenderer; import org.papervision3d.core.effects.BitmapLayerEffect; import org.papervision3d.core.geom.Pixels; import org.papervision3d.render.BasicRenderEngine; import org.papervision3d.scenes.Scene3D; import org.papervision3d.view.Viewport3D; import org.papervision3d.view.layer.BitmapEffectLayer; import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.PixelSnapping; import flash.events.IOErrorEvent; import flash.events.SecurityErrorEvent; import flash.utils.ByteArray; import flash.media.Camera; import flash.media.Video; import flash.media.Sound; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.events.Event; import flash.utils.Dictionary; import org.papervision3d.view.stats.StatsView; import org.libspark.flartoolkit.core.param.FLARParam; import org.libspark.flartoolkit.pv3d.FLARCamera3D; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.shadematerials.FlatShadeMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Cube; import org.papervision3d.render.LazyRenderEngine; import org.papervision3d.scenes.Scene3D; import org.papervision3d.view.Viewport3D; import org.papervision3d.objects.parsers.DAE; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.materials.BitmapAssetMaterial; import org.papervision3d.materials.BitmapFileMaterial; import org.papervision3d.materials.BitmapMaterial; import org.papervision3d.materials.special.*; import org.papervision3d.materials.shaders.*; import org.papervision3d.materials.shadematerials.*; import org.papervision3d.materials.utils.*; import org.papervision3d.materials.*; import org.papervision3d.materials.special.Letter3DMaterial; import org.papervision3d.typography.Text3D; import org.papervision3d.typography.fonts.HelveticaBold; import flash.display.Sprite; import flash.events.Event; /** * standard FLARToolkit Papervision3D example, with our friends the Cubes. * code is borrowed heavily from Saqoosha, Mikko Haapoja, and Squidder. * http://saqoosha.net/en/flartoolkit/start-up-guide/ * http://www.mikkoh.com/blog/?p=182 * http://www.squidder.com/2009/03/06/flar-how-to-multiple-instances-of-multiple-markers/#more-285 * * @author Eric Socolofsky * @url http://transmote.com/flar */ var statsView:StatsView; addChild(new StatsView(renderEngine)); var stats:Boolean = true; // display the stats view var CUBE_SIZE:Number=40; var viewport3D:Viewport3D; var camera3D:FLARCamera3D; var scene3D:Scene3D; var renderEngine:LazyRenderEngine; var pointLight3D:PointLight3D; var Remitter:Emitter3D; var Bemitter:Emitter3D; var Gemitter:Emitter3D; var Yemitter:Emitter3D; var RflintRenderer:PV3DPixelRenderer; var BflintRenderer:PV3DPixelRenderer; var GflintRenderer:PV3DPixelRenderer; var YflintRenderer:PV3DPixelRenderer; var Rbfx:BitmapEffectLayer; var Rpixels:Pixels; var Bbfx:BitmapEffectLayer; var Bpixels:Pixels; var Gbfx:BitmapEffectLayer; var Gpixels:Pixels; var Ybfx:BitmapEffectLayer; var Ypixels:Pixels; var CAMERA_PARAMS_PATH:String = "../resources/flar/FLARparams.dat"; var PATTERN_PATH:String = "../resources/flar/patterns/pat16/"; var PATTERN_RESOLUTION:uint = 16; var patterns:Vector.; var _param:FLARParam; var flarManager:FLARManager; var markersByPatternId:Vector.>;// FLARMarkers, arranged by patternId var containersByMarker:Dictionary;// Cube containers, hashed by corresponding FLARMarker var text3d:Text3D; var text3dtwo:Text3D; var text3dOne:Text3D; var text3dTwo:Text3D; var text3dThree:Text3D; var text3dFour:Text3D; var letterMaterialtwo:Letter3DMaterial = new Letter3DMaterial(0xcc0000); letterMaterialtwo.doubleSided = true; var blur:BlurFilter = new BlurFilter(10,10,3); var colorMatrix:ColorMatrixFilter = new ColorMatrixFilter([ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 50, 0 ]); init(); /** * @author abudaan */ //var _debugTf:TextField; var _connectionIdTf:TextField; var _midiClient:MidiClient; function Main() { Security.allowDomain("*"); var bridgeId:String = stage.loaderInfo.parameters["midiBridgeId"]; bridgeId = bridgeId == null ? "_device1" : bridgeId; _midiClient = new MidiClient(bridgeId,false); _midiClient.addEventListener(MidiDataEvent.CONNECTED, handleMidiDataEvent); _midiClient.addEventListener(MidiDataEvent.MIDI_DATA, handleMidiDataEvent); /* var tfmt:TextFormat = new TextFormat(); tfmt.font = "_sans"; _debugTf = new TextField(); _debugTf.y = 15; _debugTf.width = 375;//stage.width; _debugTf.height = 149;//stage.height; _debugTf.border = true; _debugTf.wordWrap = true; _debugTf.multiline = true; _debugTf.defaultTextFormat = tfmt; addChild(_debugTf); tfmt.size = 9; _connectionIdTf = new TextField(); _connectionIdTf.width = 200; _connectionIdTf.height = 15; _connectionIdTf.defaultTextFormat = tfmt; _connectionIdTf.text = "not connected"; addChild(_connectionIdTf); */ } function handleMidiDataEvent(e:Event):void { switch(e.type) { case MidiDataEvent.ERROR: //_debugTf.text = "error"; break; case MidiDataEvent.CONNECTED: //_connectionIdTf.text = _midiClient.sendId; break; case MidiDataEvent.MIDI_DATA: /* * this is where the midi data is entering your application * you can simply print the data, like so: */ /* _debugTf.appendText(_midiClient.midiDataAsString + "\n"); _debugTf.scrollV = _debugTf.maxScrollV; */ /* * or you could get the data as a MidiData class. * the MidiData class provides handy accessors to retrieve data: */ var midiData:MidiData2 = _midiClient.midiData; //trace("channel:" + midiData.channel); //trace("command:" + midiData.command); //trace("status:" + midiData.status); //trace("data1:" + midiData.data1);//the midi note number if command is NOTE_ON or NOTE_OFF //trace("data2:" + midiData.data2);//the velocity if command is NOTE_ON or NOTE_OFF //trace(midiData.data1) //trace("hello"); //trace(_midiClient.midiDataAsString); happens(midiData.data1, midiData.data2, midiData.command, midiData.status, midiData.channel); break; } } Main(); Rbfx = new BitmapEffectLayer( viewport3D, stage.width, stage.height ); Rbfx.addEffect( new BitmapLayerEffect( new BlurFilter( 2, 2, 1 ) ) ); Rbfx.addEffect( new BitmapLayerEffect( new ColorMatrixFilter( [ 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0.9,0 ] ) ) ); Bbfx = new BitmapEffectLayer( viewport3D, stage.width, stage.height ); Bbfx.addEffect( new BitmapLayerEffect( new BlurFilter( 2, 2, 1 ) ) ); Bbfx.addEffect( new BitmapLayerEffect( new ColorMatrixFilter( [ 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0.9,0 ] ) ) ); Gbfx = new BitmapEffectLayer( viewport3D, stage.width, stage.height ); Gbfx.addEffect( new BitmapLayerEffect( new BlurFilter( 2, 2, 1 ) ) ); Gbfx.addEffect( new BitmapLayerEffect( new ColorMatrixFilter( [ 0,0,0,0,0, 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0.9,0 ] ) ) ); Ybfx = new BitmapEffectLayer( viewport3D, stage.width, stage.height ); Ybfx.addEffect( new BitmapLayerEffect( new BlurFilter( 2, 2, 1 ) ) ); Ybfx.addEffect( new BitmapLayerEffect( new ColorMatrixFilter( [ 1,0,0,0,0, 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0.9,0 ] ) ) ); function init () :void { // build list of FLARPatterns for FLARToolkit to detect patterns = new Vector.(); patterns.push(new FLARPattern(PATTERN_PATH+"patt012.pat", PATTERN_RESOLUTION)); patterns.push(new FLARPattern(PATTERN_PATH+"patt004.pat", PATTERN_RESOLUTION)); patterns.push(new FLARPattern(PATTERN_PATH+"patt002.pat", PATTERN_RESOLUTION)); patterns.push(new FLARPattern(PATTERN_PATH+"patt010.pat", PATTERN_RESOLUTION)); //patterns.push(new FLARPattern(PATTERN_PATH+"patt012bakup.pat", PATTERN_RESOLUTION)); // use Camera (default) flarManager = new FLARManager(CAMERA_PARAMS_PATH, patterns); addChild(FLARCameraSource(flarManager.flarSource)); // begin listening for FLARMarkerEvents flarManager.addEventListener(FLARMarkerEvent.MARKER_ADDED, onMarkerAdded); flarManager.addEventListener(FLARMarkerEvent.MARKER_UPDATED, onMarkerUpdated); flarManager.addEventListener(FLARMarkerEvent.MARKER_REMOVED, onMarkerRemoved); var framerateDisplay:FramerateDisplay = new FramerateDisplay(); addChild(framerateDisplay); flarManager.addEventListener(Event.INIT, onFlarManagerInited); } function onFlarManagerInited (evt:Event) :void { trace("FLAR Manager Inited"); initPapervisionEnvironment(flarManager.cameraParams, stage.stageWidth, stage.stageHeight); var numPatterns:uint = new uint(patterns.length); initTwo(numPatterns); } function addMarker(marker:FLARMarker):void { // store marker var markerList:Vector.=markersByPatternId[marker.patternId]; markerList.push(marker); makeStuff(marker, marker.patternId); } function makeStuff(marker, markerN){ // create a new thing, and place it inside a container (DisplayObject3D) for manipulation var container:DisplayObject3D = new DisplayObject3D(); var markerNum:Number = new Number(markerN); if (markerNum == 0){ var Rholder:DisplayObject3D; Rholder = new DisplayObject3D(); viewport3D.containerSprite.addLayer( Rbfx ); Rpixels = new Pixels( Rbfx ); Rbfx.addDisplayObject3D( Rpixels ); Rholder.addChild( Rpixels ); Remitter = new SphereBang(); RflintRenderer = new PV3DPixelRenderer( Rpixels ); RflintRenderer.addEmitter( Remitter ); Remitter.start(); Rholder.rotationX = 90; //holder.scaleX = 15; //holder.scaleY = 15; //holder.scaleZ = 20; Rholder.z = 100; var msgOne:String; msgOne = "72"; text3dOne = new Text3D(msgOne, new HelveticaBold(), letterMaterialtwo); text3dOne.scaleX = .25; text3dOne.scaleY = .25; text3dOne.scaleZ = .25; text3dOne.rotationX = 90; text3dOne.z = 30; container.addChild(text3dOne); container.addChild(Rholder); trace("object one"); }else if(markerNum == 1){ var Bholder:DisplayObject3D; Bholder = new DisplayObject3D(); viewport3D.containerSprite.addLayer( Bbfx ); Bpixels = new Pixels( Bbfx ); Bbfx.addDisplayObject3D( Bpixels ); Bholder.addChild( Bpixels ); Bemitter = new SphereBang(); BflintRenderer = new PV3DPixelRenderer( Bpixels ); BflintRenderer.addEmitter( Bemitter ); Bemitter.start(); Bholder.rotationX = 90; //holder.scaleX = 15; //holder.scaleY = 15; //holder.scaleZ = 20; Bholder.z = 100; var msgTwo:String; msgTwo = "71"; text3dTwo = new Text3D(msgTwo, new HelveticaBold(), letterMaterialtwo); text3dTwo.scaleX = .25; text3dTwo.scaleY = .25; text3dTwo.scaleZ = .25; text3dTwo.rotationX = 90; text3dTwo.z = 30; container.addChild(text3dTwo); container.addChild(Bholder); trace("object two"); }else if(markerNum == 2){ var Gholder:DisplayObject3D; Gholder = new DisplayObject3D(); viewport3D.containerSprite.addLayer( Gbfx ); Gpixels = new Pixels( Gbfx ); Gbfx.addDisplayObject3D( Gpixels ); Gholder.addChild( Gpixels ); Gemitter = new SphereBang(); GflintRenderer = new PV3DPixelRenderer( Gpixels ); GflintRenderer.addEmitter( Gemitter ); Gemitter.start(); Gholder.rotationX = 90; //holder.scaleX = 15; //holder.scaleY = 15; //holder.scaleZ = 20; Gholder.z = 100; container.addChild(Gholder); var msgThree:String; msgThree = "70"; text3dThree = new Text3D(msgThree, new HelveticaBold(), letterMaterialtwo); text3dThree.scaleX = .25; text3dThree.scaleY = .25; text3dThree.scaleZ = .25; text3dThree.rotationX = 90; text3dThree.z = 30; container.addChild(text3dThree); trace("object three"); }else if(markerNum == 3){ var Yholder:DisplayObject3D; Yholder = new DisplayObject3D(); viewport3D.containerSprite.addLayer( Ybfx ); Ypixels = new Pixels( Ybfx ); Ybfx.addDisplayObject3D( Ypixels ); Yholder.addChild( Ypixels ); Yemitter = new SphereBang(); YflintRenderer = new PV3DPixelRenderer( Ypixels ); YflintRenderer.addEmitter( Yemitter ); Yemitter.start(); Yholder.rotationX = 90; //holder.scaleX = 15; //holder.scaleY = 15; //holder.scaleZ = 20; Yholder.z = 100; container.addChild(Yholder); //Text var msgFour:String; msgFour = "69"; text3dFour = new Text3D(msgFour, new HelveticaBold(), letterMaterialtwo); text3dFour.scaleX = .25; text3dFour.scaleY = .25; text3dFour.scaleZ = .25; text3dFour.rotationX = 90; text3dFour.z = 30; container.addChild(text3dFour); trace("object four"); }else if(markerNum == 4){ trace("object five"); } // associate container with corresponding marker scene3D.addChild(container); containersByMarker[marker]=container; } function removeMarker(marker:FLARMarker):void { // find and remove marker var markerList:Vector.=markersByPatternId[marker.patternId]; var markerIndex:uint=markerList.indexOf(marker); if (markerIndex!=-1) { markerList.splice(markerIndex, 1); } if (marker.patternId == 0){ Remitter.stop(); }else if(marker.patternId == 1){ Bemitter.stop(); } // find and remove corresponding container var container:DisplayObject3D=containersByMarker[marker]; if (container) { scene3D.removeChild(container); } delete containersByMarker[marker]; } function initTwo(numPatterns:uint):void { // set up lists (Vectors) of FLARMarkers, arranged by patternId markersByPatternId=new Vector.>(numPatterns,true); while (numPatterns--) { markersByPatternId[numPatterns] = new Vector.(); } // prepare hashtable for associating Cube containers with FLARMarkers containersByMarker=new Dictionary(true); } function initPapervisionEnvironment(cameraParams:FLARParam, viewportWidth:Number, viewportHeight:Number):void { scene3D = new Scene3D(); camera3D=new FLARCamera3D(cameraParams); viewport3D=new Viewport3D(viewportWidth,viewportHeight, true, true, true, true); addChild(viewport3D); renderEngine=new LazyRenderEngine(scene3D,camera3D,viewport3D); pointLight3D = new PointLight3D(); pointLight3D.x=1000; pointLight3D.y=1000; pointLight3D.z=-1000; addEventListener(Event.ENTER_FRAME, onEnterFrame); } function onEnterFrame(evt:Event):void { updateCubes(); renderEngine.render(); } function updateCubes():void { // update all Cube containers according to the transformation matrix in their associated FLARMarkers var i:int=markersByPatternId.length; var markerList:Vector.; var marker:FLARMarker; var container:DisplayObject3D; var j:int; while (i--) { markerList=markersByPatternId[i]; j=markerList.length; while (j--) { marker=markerList[j]; container=containersByMarker[marker]; container.transform=FLARPVGeomUtils.convertFLARMatrixToPVMatrix(marker.transformMatrix); } } } function onMarkerAdded (evt:FLARMarkerEvent) :void { trace("["+evt.marker.patternId+"] added"); addMarker(evt.marker); } function onMarkerUpdated (evt:FLARMarkerEvent) :void { //trace("["+evt.marker.patternId+"] updated"); } function onMarkerRemoved (evt:FLARMarkerEvent) :void { trace("["+evt.marker.patternId+"] removed"); removeMarker(evt.marker); } function happens(note, velocity, command, status, channel){ trace(note); trace(velocity); trace(command); trace(status); trace(channel); //NOTES////////////////////////////////////// if(note==72 && velocity>=1){ Remitter.start(); }else if (note==72 && velocity==0){ }; if(note==71 && velocity>=1){ Bemitter.start(); }else if (note==71 && velocity==0){ }; if(note==70 && velocity>=1){ Gemitter.start(); }else if (note==70 && velocity==0){ }; if(note==69 && velocity>=1){ Yemitter.start(); }else if (note==69 && velocity==0){ }; if(note==68 && velocity>=1){ }else if (note==68 && velocity==0){ }; if(note==67 && velocity>=1){ }else if (note==67 && velocity==0){ }; if(note==66 && velocity>=1){ }else if (note==66 && velocity==0){ }; if(note==65 && velocity>=1){ }else if (note==65 && velocity==0){ }; //KNOBS//////////////////////////////////// if(note==1){ } if(note==2){ } if(note==3){ } if(note==4){ } if(note==5){ } if(note==6){ } if(note==7){ } if(note==8){ } } ;