<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Soulwire &#187; Flash</title>
	<atom:link href="http://blog.soulwire.co.uk/tag/flash/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.soulwire.co.uk</link>
	<description>Art + Technology</description>
	<lastBuildDate>Mon, 21 Mar 2011 22:27:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Simple Flash GUI Tool</title>
		<link>http://blog.soulwire.co.uk/code/actionscript-3/simple-flash-prototype-gui-tool</link>
		<comments>http://blog.soulwire.co.uk/code/actionscript-3/simple-flash-prototype-gui-tool#comments</comments>
		<pubDate>Wed, 19 Jan 2011 17:32:24 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Interface]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1242</guid>
		<description><![CDATA[Update: Keith himself has been working on a similar idea and has released MinimalConfigurator. Keith Peter&#8217;s Minimal Components are an excellent tool for any Flash developer when it comes to adding realtime configuration to a SWF. I find myself using them a lot in my demos and prototypes but for sketches with many editable parameters [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/code/open-source/as3-drag-drop-shuffle-grid-menu' rel='bookmark' title='Permanent Link: AS3 Shuffle Grid Class'>AS3 Shuffle Grid Class</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/as3-group94-style-scrolling-menu' rel='bookmark' title='Permanent Link: AS3 Group94 Menu'>AS3 Group94 Menu</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/webcam-motion-detection-tracking' rel='bookmark' title='Permanent Link: AS3 Webcam Motion Tracking'>AS3 Webcam Motion Tracking</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2011/01/SimpleGUIDemo.swf" rel="lightbox;width=850;height=550;" ><img src="http://blog.soulwire.co.uk/wp-content/uploads/2011/01/simplegui.jpg" alt="Simple AS3 GUI" title="Simple AS3 GUI"/></a></p>
<blockquote><p>Update: Keith himself has been working on a similar idea and has released <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.bit-101.com/blog/?p=2961/"  target="_blank">MinimalConfigurator</a>.</p></blockquote>
<p>Keith Peter&#8217;s <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.minimalcomps.com/"  target="_blank">Minimal Components</a> are an excellent tool for any Flash developer when it comes to adding realtime configuration to a SWF. I find myself using them a lot in my demos and prototypes but for sketches with many editable parameters it&#8217;s still a hassle writing boilerplate code to set up and arrange the components, as well as adding the appropriate event handlers.</p>
<p>Inspired by GUI tools for OpenFrameworks such as <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/https://github.com/memo/msalibs/tree/master/ofxSimpleGuiToo"  target="_blank">ofxSimpleGuiToo</a> and <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.roxlu.com/of/ofxtweakbar"  target="_blank">ofxTweakbar</a>, and <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.sojamo.de/libraries/controlP5/"  target="_blank">ControlP5</a> for Processing; I thought it was time to have an equally fast and easy to use GUI tool for Flash AS3 projects.<span id="more-1242"></span></p>
<h3>Introducing SimpleGUI</h3>
<p>SimpleGUI is a single Class utility designed for AS3 projects where a developer needs to quickly add UI controls for variables or functions to a sketch. Properties can be controlled with just one line of code using a variety of components from the fantastic <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.minimalcomps.com/"  target="_blank">Minimal Comps</a> set, as well as custom components written for SimpleGUI such as the <strong>FileChooser</strong>.</p>
<p>SimpleGUI Currently exposes the following methods, as well as an open <strong>addControl</strong> method where any Class definition can be passed:</p>
<ul>
<li><strong>addColumn</strong>: Starts a new column of components</li>
<li><strong>addGroup</strong>: Starts a new group of components</li>
<li><strong>addLabel</strong>: Adds a TextField for labels or instructions</li>
<li><strong>addToggle</strong>: Adds a CheckBox for Boolean values</li>
<li><strong>addButton</strong>: Adds a PushButton for triggering callbacks</li>
<li><strong>addSlider</strong>: Creates a slider for numerical values</li>
<li><strong>addRange</strong>: Creates a range slider for two numerical values</li>
<li><strong>addStepper</strong>: An alternative component to the slider for numbers</li>
<li><strong>addColour</strong>: Adds a colour picker for integers</li>
<li><strong>addComboBox</strong>: Adds a ComboBox box for any object</li>
<li><strong>addFileChooser</strong>: Allow the user to load in data</li>
<li><strong>addSaveButton</strong>: This triggers the save method for generating code</li>
</ul>
<p>Other features include:</p>
<ul>
<li><strong>HotKey</strong>: Assign a hot key for showing / hiding the GUI</li>
<li><strong>Context Menu</strong>: Toggle the GUI from a context menu item</li>
<li><strong>Message</strong>: Pulse a message to the user in the toolbar</li>
<li><strong>Show Toggle</strong>: Display a toggle when the GUI is hidden</li>
<li><strong>Save Settings</strong>: Generate AS3 code to commit your current values</li>
<ul>
<h3>Using SimpleGUI</h3>
<p>Each method takes an optional parameter called <strong>options</strong>, which is simply a dynamic Object from which you can pass values for any parameter the corresponding component has, as well as <strong>callback</strong> and <strong>callbackParams</strong> properties for triggering methods each time the component changes.</p>
<p>For example, to create a Slider for controlling a Number, set it&#8217;s width, execute a callback and display a custom label, you would write:</p>
<pre>
_gui.addSlider("myNumber", 0, 100, {label:"My Number", width:200, callback:onNumberChanged});
</pre>
<p>Although you can pass custom labels to each component, omitting this parameter will simply cause the variable name to be parsed and used as the label. For example, a variable called <em>&#8216;myNumber&#8217;</em> will generate the label <em>&#8216;My Number&#8217;</em>.</p>
<p>SimpleGUI also supports nested properties, to any depth, using normal dot syntax. So you could control a particle&#8217;s position by writing:</p>
<pre>
_gui.addSlider("myParticle.position.x", 0, 1000);
</pre>
<p>Here is the code for the <a href="http://blog.soulwire.co.uk/wp-content/uploads/2011/01/SimpleGUIDemo.swf" rel="lightbox;width=850;height=550;" >demo</a> above. <em>Only 27 lines of code to control the whole sketch.</em></p>
<pre>
_gui = new SimpleGUI(this, "Example GUI", "C");

_gui.addGroup("General Settings");
_gui.addColour("backgroundColour");
_gui.addButton("Randomise Circle Position", {callback:positionCircle, width:160});
_gui.addSaveButton();

_gui.addColumn("Noise Options");
_gui.addSlider("noiseBase.x", 10, 200);
_gui.addSlider("noiseBase.y", 10, 200);
_gui.addSlider("noiseSeed", 1, 1000);
_gui.addSlider("noiseOctaves", 1, 4);
_gui.addSlider("turbulence.x", -10, 10);
_gui.addSlider("turbulence.y", -10, 10);

_gui.addGroup("Wave Options");
_gui.addStepper("waveCount", 1, 20);
_gui.addStepper("waveSteps", 2, MAX_WAVE_STEPS);
_gui.addSlider("amplitude", 0, 200);
_gui.addColour("waveColour");

_gui.addColumn("Circle Options");
_gui.addRange("minCircleSize", "maxCircleSize", 10, 120, {label:"Circle Size Range"});
_gui.addSlider("rotationSpeed", -10, 10);
_gui.addComboBox("circle.blendMode", [

	{label:"Normal",	data:BlendMode.NORMAL},
	{label:"Darken",	data:BlendMode.DARKEN},
	{label:"Overlay",	data:BlendMode.OVERLAY},
	{label:"Difference",	data:BlendMode.DIFFERENCE},

]);

_gui.addFileChooser("Circle Texture", textureFileRef, textureLoaded, [
	new FileFilter("Image Files", "*.jpg;*.jpeg;*.png")
]);

_gui.addToggle("animateCircle");

_gui.addColumn("Instructions:");
_gui.addLabel("Press 'C' to toggle GUI");
_gui.addLabel("Press 'S' to copy setup code to clipboard");

_gui.show();
</pre>
<p>So, SimpelGUI is really just a timesaver for developers looking to quickly prototype something in Flash, or for releasing demos with controls. The actual hard work has been done by <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.bit-101.com/"  target="_blank">Keith</a> in building and maintaining his deservedly popular <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/hhttp://www.minimalcomps.com/"  target="_blank">Minimal Comps</a>.</p>
<p>You can browse the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://github.com/soulwire/SoulwireAS3Framework/blob/master/src/uk/co/soulwire/gui/SimpleGUI.as/"  target="_blank">source code</a> or download the <strong>SimpleGUI</strong> class below. SimpleGUI is part of the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/https://github.com/soulwire/SoulwireAS3Framework"  target="_blank" title="Soulwire AS3 Framework">Soulwire AS3 Framework</a>.</p>
<a href="http://blog.soulwire.co.uk/wp-content/plugins/download-monitor/download.php?id=SimpleGUI.zip" class="download" title="SimpleGUI: AS3 utility class for easily creating GUIs for prototypes and demos"  rel="nofollow"><strong>Download:</strong> SimpleGUI</a>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/code/open-source/as3-drag-drop-shuffle-grid-menu' rel='bookmark' title='Permanent Link: AS3 Shuffle Grid Class'>AS3 Shuffle Grid Class</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/as3-group94-style-scrolling-menu' rel='bookmark' title='Permanent Link: AS3 Group94 Menu'>AS3 Group94 Menu</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/webcam-motion-detection-tracking' rel='bookmark' title='Permanent Link: AS3 Webcam Motion Tracking'>AS3 Webcam Motion Tracking</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/code/actionscript-3/simple-flash-prototype-gui-tool/feed</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
		<item>
		<title>AS3 Particle Node Sequencer</title>
		<link>http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer</link>
		<comments>http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer#comments</comments>
		<pubDate>Sat, 09 Oct 2010 12:31:40 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Generative]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[Autonomous]]></category>
		<category><![CDATA[Biology]]></category>
		<category><![CDATA[Experiments]]></category>
		<category><![CDATA[Flash Player 10]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Visualisation]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1177</guid>
		<description><![CDATA[An experimental particle based audio sequencer, created in Flash using Tonfall; the new open source AS3 audio engine produced by Andre Michelle


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-flocking-steering-behaviors' rel='bookmark' title='Permanent Link: Flipping you the Boid'>Flipping you the Boid</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision' rel='bookmark' title='Permanent Link: Recursive Polygon Subdivision'>Recursive Polygon Subdivision</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/2d-cellular-automata' rel='bookmark' title='Permanent Link: 2D Cellular Automata'>2D Cellular Automata</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/10/tonfall-sequencer.swf" rel="lightbox;width=900;height=620;" ><img src="http://blog.soulwire.co.uk/wp-content/uploads/2010/10/tonfall-sequencer.jpg" alt="Tonfall Sequencer" title="Tonfall Sequencer"/></a></p>
<p>(You can <strong>drag</strong> each node and switch off the <em>wander</em> behaviour to create your own compositions).</p>
<p>At <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://flashonthebeach.com/"  target="_blank">Flash on the Beach</a> this year, I had the privilege of seeing <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.andre-michelle.com/"  target="_blank">Andre Michelle</a> speak. It was great to hear him explain some of his fantastic work behind <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.audiotool.com/"  target="_blank">audiotool</a> and to see and hear some more of his audio experiments.<span id="more-1177"></span></p>
<p>He also introduced <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/tonfall/"  target="_blank">Tonfall</a>, which is an open source AS3 framework designed to get people started with Audio programming in Flash. From the horses mouth; &#8220;Tonfall introduces only a vague design of an audio engine and is rather focussed on readability and simplicity than performance optimizations&#8221;.</p>
<p>I know that I&#8217;m not alone in feeling inspired by what Andre has done for the Flash platform, particularly when it comes to audio, yet lack the knowledge he has invested so much time and hard work in acquiring. The fact that he&#8217;s now sharing it with the ret of us for free was more than enough impetus to have a crack at it myself.</p>
<p>So this is my first test with the framework, which although not extensively documented (at the time of writing), was quite easy to pick up and get going with.</p>
<p>This <a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/10/synthesiser.swf" rel="lightbox;width=900;height=650;" >sequencer</a> is based around physical nodes, which connect to produce a variety of tones. There are two types of node, a <em>neuron</em> and a <em>receptor</em>, which are connected by <em>synapses</em> (apologies for the trite analogies). Neurons fire periodically, and if within a certain proximity of a receptor, this message is sent at a fixed speed along the bridging synapse. When the message arrives, the receptor is activated and responds by queuing it&#8217;s individual tone within the audio engine. Each receptor owns a randomly assigned note, and each neuron a randomly assigned octave; therefor a receptor will play it&#8217;s note in several different octaves depending on which neuron causes it to fire.</p>
<p>The download includes the builds of <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/tonfall/"  target="_blank">Tonfall</a> by Andre Michelle and <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.minimalcomps.com/"  target="_blank">Minimal Comps</a> by Keith Peters that I&#8217;m using.</p>
<a href="http://blog.soulwire.co.uk/wp-content/plugins/download-monitor/download.php?id=ParticleSequencer.zip" class="download" title="Particle Sequencer: AS3 Particle Audio Sequencer built with Tonfall Audio Engine"  rel="nofollow"><strong>Download:</strong> Particle Sequencer</a>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-flocking-steering-behaviors' rel='bookmark' title='Permanent Link: Flipping you the Boid'>Flipping you the Boid</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision' rel='bookmark' title='Permanent Link: Recursive Polygon Subdivision'>Recursive Polygon Subdivision</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/2d-cellular-automata' rel='bookmark' title='Permanent Link: 2D Cellular Automata'>2D Cellular Automata</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer/feed</wfw:commentRss>
		<slash:comments>48</slash:comments>
		</item>
		<item>
		<title>Recursive Polygon Subdivision</title>
		<link>http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision</link>
		<comments>http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision#comments</comments>
		<pubDate>Thu, 27 May 2010 12:51:48 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Generative]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Experiments]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1131</guid>
		<description><![CDATA[This is a little algorithm I sketched in my moleskin on the train and for once had the free time to build. The idea is to split a convex polygon between two line segments, creating two new polygons. Each shape is pushed into a queue ready to be subdivided itself. Despite the simplicity of the [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/2d-cellular-automata' rel='bookmark' title='Permanent Link: 2D Cellular Automata'>2D Cellular Automata</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/webcam-motion-detection-tracking' rel='bookmark' title='Permanent Link: AS3 Webcam Motion Tracking'>AS3 Webcam Motion Tracking</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/05/SD001.swf"  rel="lightbox;width=900;height=650;" ><img src="http://blog.soulwire.co.uk/wp-content/uploads/2010/05/SD001_001.jpg" alt="Recursive Subdivision" title="Recursive Subdivision" width="710" height="360" class="alignnone size-medium wp-image-1134" /></a></p>
<p>This is a little algorithm I sketched in my <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.moleskine.co.uk/products/"  target="_blank">moleskin</a> on the train and for once had the free time to build. The idea is to split a convex polygon between two line segments, creating two new polygons. Each shape is pushed into a queue ready to be subdivided itself. Despite the simplicity of the algorithm, the results are quite nice and with certain configurations often far removed from what I would have expected &#8211; surprise is always good.<span id="more-1131"></span></p>
<h3>The Subdivide Algorithm</h3>
<p>Here are the basic steps used to create the <a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/05/SD001.swf"  rel="lightbox;width=900;height=650;" >sketch</a> above:</p>
<ul>
<li>Create the first polygon</li>
<li>Pick two adjacent vertices at random</li>
<li>Use linear interpolation to find a point between them <em>(P1)</em></li>
<li>You now have a point on one line segment connecting the two vertices</li>
<li>Choose another line segment from the polygon</li>
<li>Find a point along this line segment <em>(P2)</em></li>
<li>Build a new polygon by moving clockwise from <em>P1</em> to <em>P2</em></li>
<li>Build a second polygon by moving clockwise from <em>P2</em> back to <em>P1</em></li>
<li>Splice the original polygon from the list and insert the two new ones</li>
<li>Choose a polygon from the list and <em>(&uarr;repeat)</em></li>
</ul>
<p>Very simple, but you can start to have fun with each of these steps to produce different results. Here are some of the variations which can be created with the <a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/05/SD001.swf"  rel="lightbox;width=900;height=650;" >demo</a>.</p>
<ul>
<li>Choose line segments to cut at random</li>
<li>Always subdivide between the two longest line segments</li>
<li>Always interpolate (choose points) half way along segments</li>
<li>Choose points at random positions along line segments</li>
<li>Only mark some polygons eligible for subdivision</li>
<li>Vary the minimum area of divisible polygons</li>
</ul>
<h3>Source Code</h3>
<p>The <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/soulwire/source/browse/trunk/projects/Subdivide/SD001/src/geom/Polygon.as"  target="_blank">Polygon</a> class is a DisplayObject (it extends Sprite) and implements it&#8217;s own draw method. I&#8217;ve had a lot of fun filling the shapes with textures, but kept it minimal for the example. One technique which I found worked well was to choose two vertices and compute the angle between them. From this I created a transformation matrix to use with <em>Graphics.beginBitmapFill</em>, giving the sketch a more 3 dimensional feel as if the collection of polygons was a 3D mesh with textures mapped to it. I&#8217;ll put these examples on Flickr soon.</p>
<p>If you&#8217;re interested in the source code, it&#8217;s available in my <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/soulwire/"  target="_blank">code repository</a> or you can download the archive below (for the demo GUI, I am using <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://minimalcomps.com/"  target="_blank">minimal comps</a> courtesy of Keith Peters and for image encoding, Ian McLean&#8217;s <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.auricom.com/devote/an-asynchronous-vector-optimized-jpeg-encoder"  target="_blank">asynchronous JPEG encoder</a> &#8211; thanks guys :).</p>
<a href="http://blog.soulwire.co.uk/wp-content/plugins/download-monitor/download.php?id=Subdivision.zip" class="download" title="Recursive Subdivision: Recursive Polygon Subdivision demo and source code"  rel="nofollow"><strong>Download:</strong> Recursive Subdivision</a>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/2d-cellular-automata' rel='bookmark' title='Permanent Link: 2D Cellular Automata'>2D Cellular Automata</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/webcam-motion-detection-tracking' rel='bookmark' title='Permanent Link: AS3 Webcam Motion Tracking'>AS3 Webcam Motion Tracking</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Hello Dynamic Sprite</title>
		<link>http://blog.soulwire.co.uk/code/actionscript-3/managing-runtime-loaded-dynamic-assets</link>
		<comments>http://blog.soulwire.co.uk/code/actionscript-3/managing-runtime-loaded-dynamic-assets#comments</comments>
		<pubDate>Fri, 21 May 2010 16:56:04 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Utilities]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1080</guid>
		<description><![CDATA[If you are building a multilingual application (or any application that requires dynamic, runtime loaded assets), swapping and managing assets can easily become tedious and messy. Recently, for projects requiring special characters (such as Chinese, Arabic, Japanese and Hindi) and where dynamic or input text is not required, we have been creating library SWFs for [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/code/open-source/two-sided-planes-in-flash-player-10' rel='bookmark' title='Permanent Link: Double Sided 3D Plane in FP10'>Double Sided 3D Plane in FP10</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-flocking-steering-behaviors' rel='bookmark' title='Permanent Link: Flipping you the Boid'>Flipping you the Boid</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/webcam-motion-detection-tracking' rel='bookmark' title='Permanent Link: AS3 Webcam Motion Tracking'>AS3 Webcam Motion Tracking</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/05/DynamicSpriteExample.swf?v=2" rel="lightbox;width=800;height=550;" ><img src="http://blog.soulwire.co.uk/wp-content/uploads/2010/05/dynamic-sprite-demo.jpg" alt="DynamicSprite Demo Application" title="DynamicSprite Demo Application" width="710" height="360" class="size-medium wp-image-1092" /></a></p>
<p>If you are building a multilingual application (or any application that requires dynamic, runtime loaded assets), swapping and managing assets can easily become tedious and messy.</p>
<p>Recently, for projects requiring special characters (such as Chinese, Arabic, Japanese and Hindi) and where dynamic or input text is not required, we have been creating library SWFs for each language and using static textfields to populate content. This saves file size, as unnecessary characters are not embedded, and it eases the process of including different character sets (and even fonts) for each language. It also means that we can include text in the same runtime loaded library as general display assets.<span id="more-1080"></span></p>
<h3>Introducing DynamicSprite</h3>
<p>Using this process, a language specific library SWF is loaded at startup, or at runtime when the users selects a language, and once complete all dynamic assets are updated accordingly. This can get very messy for two reasons. Firstly, it means that each individual asset has to be destroyed and tidied up to release memory before it is replaced. Secondly, if you have a complex application architecture, you will end up dispatching a ton of events and implementing countless methods within every view or component, in order to rollout the update to each desired DisplayObject.</p>
<p>This is where <strong>DynamicSprite</strong> comes in handy. Using DynamicSprite you can effortlessly update any amount of DisplayObjects from any amount of library SWFs at runtime, whilst keeping the SWF loading logic centralised in your proxy or loader class. No events, no asset update APIs in your views and no cleaning up after yourself.</p>
<blockquote><p>Bored? Skip straight to the <a href="#example">examples</a> and download</p></blockquote>
<h3>How It Works</h3>
<p>The concept is very simple. Each instance of DynamicSprite is registered globally at a class level, you need only call a static update method once and all DynamicSprite instances will update themselves automatically. Each instance of DynamicSprite is given a class definition, which can be set or changed at runtime if desired. When a new library is loaded, it will look inside the SWFs <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/system/ApplicationDomain.html"  target="_blank">applicationDomain</a> and if it finds a matching asset, update itself and destroy any existing instances of that asset it might own. You can also create DynamicSprite instances at runtime anytime after an asset library has been loaded &#8211; they will check previously loaded libraries for their class definition when created. This works with any display asset, <strong>Sprites</strong>, <strong>MovieClips</strong>, <strong>Bitmaps</strong> (etc)  &#8211; <strong>BitmapDatas</strong> are also detected and destroyed during the cleanup process.</p>
<p>Furthermore, you can load any amount of libraries per language, at different times if necessary &#8211; DynamicSprites will <em>only update themselves when applicable</em>, making it easy to manage your language specific libraries and even individual libraries per language if you choose to (each type of library has it&#8217;s own ID).</p>
<p>A DynamicSprite instance will also dispatch an event (named <strong>DynamicSprite.INSTANCE_UPDATED</strong>) when it has changed it&#8217;s asset. You can listen for this event if you need to respond to new asset dimensions. You can also listen for two events on the class itself (through a static, encapsulated EventDispatcher) which are dispatched when a library is added or updated but before all instances have changed (<strong>DynamicSprite.LIBRARY_UPDATE_START</strong>) and when all instances have finished updating themselves (if necessary) from the added / updated library SWF (<strong>DynamicSprite.LIBRARY_UPDATE_COMPLETE</strong>).</p>
<h3>Example Implementation<a name="example">&nbsp;</a></h3>
<p>Here is a simple example of how to use DynamicSprite. Although this example only loads one SWF (the code for the multi SWF example is included in the download), it demonstrates how DynamicSprite can also be useful for single language applications where you still choose to load your assets at runtime.</p>
<pre>
public function SimpleExample()
{
	// Create a DynamicSprite instance and provide a class definition for it's asset
	var example : DynamicSprite = new DynamicSprite("assets.example.HelloWorld");
	addChild(example);

	// Load a library SWF
	var loader : Loader = new Loader();
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
	loader.load(new URLRequest("assets_en.swf"));
}

private function onLoadComplete(event : Event) : void
{
	// Call the static update method once to update all DynamicSprites
	DynamicSprite.update("example", LoaderInfo(event.target).content);
}
</pre>
<p>Another advantage of DynamicSprite is that you need not worry about synchronising loading with the update process. Any existing DynamicSprite instance will be updated if required when a library is loaded, however you can also create new instances after a required library has been loaded (useful for highly dynamic content) and any loaded libraries will be searched for matching assets upon creation. This snippet demonstrates this feature.</p>
<pre>
public function SimpleExample()
{
	// Load a library SWF
	var loader : Loader = new Loader();
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
	loader.load(new URLRequest("assets_en.swf"));
}

private function onLoadComplete(event : Event) : void
{
	// Register this library
	DynamicSprite.update("example", LoaderInfo(event.target).content);

	// Creating a DynamicSprite after a library is loaded still works fine
	var example : DynamicSprite = new DynamicSprite("assets.example.HelloWorld");
	addChild(example);
}
</pre>
<h3>Download DynamicSprite</h3>
<p>You can download the DynamicSprite class and the demo below. Also check my code <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/soulwire/source/browse/trunk/projects/DynamicSprite/src/uk/co/soulwire/display/DynamicSprite.as"  title="Soulwire SVN repository" target="_blank">repository</a> for updates. If you find any bugs or have any suggestions please leave them in the comments.</p>
<a href="http://blog.soulwire.co.uk/wp-content/plugins/download-monitor/download.php?id=DynamicSprite.zip" class="download" title="DynamicSprite: DynamicSprite is a utility class for easily managing runtime loaded assets"  rel="nofollow"><strong>Download:</strong> DynamicSprite</a>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/code/open-source/two-sided-planes-in-flash-player-10' rel='bookmark' title='Permanent Link: Double Sided 3D Plane in FP10'>Double Sided 3D Plane in FP10</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-flocking-steering-behaviors' rel='bookmark' title='Permanent Link: Flipping you the Boid'>Flipping you the Boid</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/webcam-motion-detection-tracking' rel='bookmark' title='Permanent Link: AS3 Webcam Motion Tracking'>AS3 Webcam Motion Tracking</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/code/actionscript-3/managing-runtime-loaded-dynamic-assets/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>ASE (Adobe Swatch Exchange) Encoder</title>
		<link>http://blog.soulwire.co.uk/code/actionscript-3/as3-ase-adobe-swatch-exchange-encoder</link>
		<comments>http://blog.soulwire.co.uk/code/actionscript-3/as3-ase-adobe-swatch-exchange-encoder#comments</comments>
		<pubDate>Tue, 30 Mar 2010 14:00:52 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[ASE]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Colour]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1061</guid>
		<description><![CDATA[The Adobe Swatch Exchange (ASE) is a useful file format for importing colour schemes into applications in the Creative Suite (Photoshop, Illustrator etc). I&#8217;ve been optimising the BitmapData colour palette algorithm (coming shortly in another post) and for the demo thought that it would be nice to give you the option to save the extracted [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/code/actionscript-3/extract-average-colours-from-bitmapdata' rel='bookmark' title='Permanent Link: BitmapData Average Colours'>BitmapData Average Colours</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/colourutils-bitmapdata-extract-colour-palette' rel='bookmark' title='Permanent Link: BitmapData Colour Palette'>BitmapData Colour Palette</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-bitmapdata-glitch-generator' rel='bookmark' title='Permanent Link: Smack My Glitch Up'>Smack My Glitch Up</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/03/aseencoder-demo.swf" rel="lightbox;width=800;height=450;" ><img src="http://blog.soulwire.co.uk/wp-content/uploads/2010/03/aseencoder-710x399.jpg" alt="AS3 ASE Adobe Swatch Exchange Encoder Demo" title="AS3 ASE Adobe Swatch Exchange Encoder Demo" width="710" height="399" class="alignnone size-medium wp-image-1073" /></a></p>
<p>The <strong>Adobe Swatch Exchange (ASE)</strong> is a useful file format for importing colour schemes into applications in the Creative Suite (Photoshop, Illustrator etc).<span id="more-1061"></span></p>
<p>I&#8217;ve been optimising the <a href="http://blog.soulwire.co.uk/code/actionscript-3/colourutils-bitmapdata-extract-colour-palette" >BitmapData colour palette algorithm</a> (coming shortly in another post) and for the demo thought that it would be nice to give you the option to save the extracted color palette (a feature that people have been requesting in the comments). I added an option for saving a TXT file containing the hexadecimal and RGB colour values, but thought it would be nice to offer the choice of downloading the palette in <strong>ASE format</strong> so you can quickly incorporate the colour scheme in your artwork or designs, one of the nice features of <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://kuler.adobe.com/" >Kuler</a>.</p>
<p>So the first step was to open up and existing ASE file (created by Photoshop) in a hex editor (I use <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.suavetech.com/0xed/0xed.html" >0xED</a> which is an excellent and free editor for OS X). Looking at the bytes of the file showed that it was evidently a quite simple format and wouldn&#8217;t be difficult to reverse engineer. I also found the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.selapa.net/couleurs/fileformats.php#adobe_ase" >ASE file format specification</a> and a <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.colourlovers.com/web/blog/2007/11/08/color-palettes-in-adobe-swatch-exchange-ase" >PHP implementation</a> over at <strong>Colour Lovers</strong>, both of which were quite helpful.</p>
<p>This AS3 code will take an Array of colours (adding Vectors to the &lt;pre&gt; tag seems to cause problems, though my local source code does use a Vector of uints) and encode the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/ByteArray.html" >ByteArray</a> of an ASE file, ready to save using <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/FileReference.html" >FileReference</a> of <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/filesystem/FileStream.html" >FileStream</a> in AIR&#8230;</p>
<pre>
const FILE_SIGNATURE : String = "ASEF";

function encode ( pixels : Array ):ByteArray
{
	var swatch : ByteArray = new ByteArray();
	var ase : ByteArray = new ByteArray();
	var hex:String;
	var pix:uint;

	ase.writeUTFBytes (FILE_SIGNATURE);// header
	ase.writeInt (0x10000);// version
	ase.writeInt (pixels.length * 2);// blocks

	for (var i : int = 0; i < pixels.length; ++i)
	{
		pix = pixels[i];
		swatch.length = 0;

		// start of group

		ase.writeShort (0xC001);
		ase.writeInt (0);
		ase.writeShort (1);

		// swatch name

		hex = pix.toString(16);
		while (hex.length < 6) hex = "0" + hex;

		swatch.writeShort ((hex = "#" + hex).length + 1);
		for (var n : int = 0; n < hex.length; ++n) swatch.writeShort (hex.charCodeAt(n));
		swatch.writeShort (0);

		// colours

		swatch.writeUTFBytes ("RGB ");
		swatch.writeFloat ((pix >> 16 &#038; 0xFF) / 255);
		swatch.writeFloat ((pix >> 8 &#038; 0xFF) / 255);
		swatch.writeFloat ((pix &#038; 0xFF) / 255);
		swatch.writeShort (2);

		// write swatch

		ase.writeInt (swatch.length);
		ase.writeBytes (swatch);
	}

	return ase;
}
</pre>
<p>I&#8217;ll put the full code in <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/soulwire/" >my repository</a> along with the improved <em>ColourUtils</em> Class which prompted the <strong>ASEEncoder</strong>, though for now you can just copy and paste this snippet and <a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/03/aseencoder-demo.swf" rel="lightbox;width=800;height=450;" >play with the demo</a> above to save the top colour schemes from Colour Lovers as ASE files, which you can then import into Adobe Creative Suite applications.</p>
<p>Here is an example of how to encode a palette and then save it to the file system:</p>
<pre>
var colours : Array = [0xFF0000, 0x00FF00, 0x0000FF];
var aseFile : ByteArray = encode( colours );
var fileRef : FileReference = new FileReference();
fileRef.save( aseFile, "swatch.ase" );
</pre>
<p>The AS3 ASEEncoder currently only encodes swatches as RGB, though saving CMYK should only be a matter of converting the colour space and then changing the swatch declaration.</p>
<p>Going in the other direction, it would be nice to provide a method to decode existing ASE files into a Vector of uints, something which I&#8217;ll look at once the new ColourUtils is online.</p>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/code/actionscript-3/extract-average-colours-from-bitmapdata' rel='bookmark' title='Permanent Link: BitmapData Average Colours'>BitmapData Average Colours</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/colourutils-bitmapdata-extract-colour-palette' rel='bookmark' title='Permanent Link: BitmapData Colour Palette'>BitmapData Colour Palette</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-bitmapdata-glitch-generator' rel='bookmark' title='Permanent Link: Smack My Glitch Up'>Smack My Glitch Up</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/code/actionscript-3/as3-ase-adobe-swatch-exchange-encoder/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Smack My Glitch Up</title>
		<link>http://blog.soulwire.co.uk/laboratory/flash/as3-bitmapdata-glitch-generator</link>
		<comments>http://blog.soulwire.co.uk/laboratory/flash/as3-bitmapdata-glitch-generator#comments</comments>
		<pubDate>Wed, 03 Feb 2010 21:37:51 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Generative]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Transmissions]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Colour]]></category>
		<category><![CDATA[Experiments]]></category>
		<category><![CDATA[Glitch]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=1003</guid>
		<description><![CDATA[Sometimes it&#8217;s good to break things&#8230; During a recent project I needed to find a way of simulating digital interference on an image / video stream. At first, it seemed the best approach might be to use the graphics API or Bitmap effects, but why imitate when you can have the real thing. The principle [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/art-design/generative/webcam-glitch-art' rel='bookmark' title='Permanent Link: Webcam Glitch Art'>Webcam Glitch Art</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/as3-ase-adobe-swatch-exchange-encoder' rel='bookmark' title='Permanent Link: ASE (Adobe Swatch Exchange) Encoder'>ASE (Adobe Swatch Exchange) Encoder</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision' rel='bookmark' title='Permanent Link: Recursive Polygon Subdivision'>Recursive Polygon Subdivision</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/glitchmap.swf" title="AS3 Glitch Generator" rel="lightbox;width=900;height=650;" ><img class="alignnone size-full wp-image-1006" title="Glitchmap - AS3 Glitch Generator" src="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/glitch-generator.jpg" alt="Glitchmap - AS3 Glitch Generator" width="710" height="360" /></a></p>
<p><em>Sometimes it&#8217;s good to break things&#8230;</em></p>
<p>During a recent project I needed to find a way of simulating digital interference on an image / video stream. At first, it seemed the best approach might be to use the graphics API or Bitmap effects, but why imitate when you can have the real thing.<span id="more-1003"></span></p>
<p>The principle is incredibly simple. Corrupt / alter a byte (or several bytes) in the ByteArray of a JPEG and then load this back into a DisplayObject using <em>Loader.loadBytes()</em>. Because of the way in which <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://en.wikipedia.org/wiki/JPEG#Syntax_and_structure" >JPEGs work</a>, the image will still display but the corrupt bytes will mangle the output to varying degrees, depending on how many bytes have been corrupted. The result is an interesting glitch pattern, a bit like those which were accidentally created <a href="http://blog.soulwire.co.uk/art-design/generative/webcam-glitch-art" title="Webcam glitch images" >when my webcam drivers lost the plot</a>.</p>
<p>It is also possible to corrupt other image formats (png, gif etc) in the same way, by first passing the image ByteArray through a <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/as3corelib/source/browse/trunk/src/com/adobe/images/JPGEncoder.as" >JPEGEncoder</a>.</p>
<p>I&#8217;ve implemented this technique in the <strong>Glitchmap</strong> class, which you can download and play with at the bottom of this post. I hope that it will provide a few moments of fun, if not a practical use <em>(I&#8217;m thinking image gallery transitions or <a href="http://blog.soulwire.co.uk/laboratory/flash/actionscript3-dynamic-sound-visualisation" >music </a><a href="http://blog.soulwire.co.uk/art-design/portfolio/more-bandcamp-music-visualisations" >visualisations</a>)</em>.</p>
<p>The small gottcha is that it isn&#8217;t desirable to mess with the JPEG headers, so when the clean ByteArray is passed to the <em>Glitchmap</em> class, it will determine the length of the header by reading through the bytes until it finds the <em>SOS (start of scan)</em> declaration <em>(0xFFDA)</em>. The next two bytes represent the length of the <em>SOS</em>, so it skips forward by this amount &#8211; the resulting position in the ByteArray should be the end of the header, and so between this point and the <em>EOI (end of image)</em> the data corruption takes place. I&#8217;m not sure whether this is the best way of determining the JPEG header size; <em>perhaps any CS graduates / students out there can help me out?</em></p>
<p>After I posted the <a href="http://blog.soulwire.co.uk/art-design/generative/webcam-glitch-art" >webcam glitch images</a>, Jon used them in his title sequences for the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.youtube.com/watch?v=k5scRdXr7wU"  rel="shadowbox[post-1003];player=swf;width=640;height=385;">48 hour film gala</a>. If you find a similar creative use for this script or the <a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/glitchmap.swf" title="AS3 Glitch Generator" rel="lightbox;width=900;height=650;" >glitch generator</a> then please let us all know.</p>
<p>I think the next step is to experiment with merging the bytes of multiple glitched images in order to create transition effects. I may also build an AIR app and see what the best way of outputting video might be (using NativeProcess for screen capture perhaps?).</p>
<a href="http://blog.soulwire.co.uk/wp-content/plugins/download-monitor/download.php?id=Glitchmap.zip" class="download" title="AS3 BitmapData Glitch Generator (Glitchmap): Glitchmap is a class for generating glitch imagery from AS3 BitmapData"  rel="nofollow"><strong>Download:</strong> AS3 BitmapData Glitch Generator (Glitchmap)</a>
<p><em>You can also download the Glitchmap Class and the <a href="http://blog.soulwire.co.uk/wp-content/uploads/2010/02/glitchmap.swf" title="AS3 Glitch Generator" rel="lightbox;width=900;height=650;" >Glitch Generator</a> source code from the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://code.google.com/p/soulwire/" title="Soulwire code repository" >soulwire code repository</a>.</em></p>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/art-design/generative/webcam-glitch-art' rel='bookmark' title='Permanent Link: Webcam Glitch Art'>Webcam Glitch Art</a></li>
<li><a href='http://blog.soulwire.co.uk/code/actionscript-3/as3-ase-adobe-swatch-exchange-encoder' rel='bookmark' title='Permanent Link: ASE (Adobe Swatch Exchange) Encoder'>ASE (Adobe Swatch Exchange) Encoder</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision' rel='bookmark' title='Permanent Link: Recursive Polygon Subdivision'>Recursive Polygon Subdivision</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/laboratory/flash/as3-bitmapdata-glitch-generator/feed</wfw:commentRss>
		<slash:comments>65</slash:comments>
		</item>
		<item>
		<title>Technical Tentacles</title>
		<link>http://blog.soulwire.co.uk/laboratory/flash/pixel-bender-growing-tentacles</link>
		<comments>http://blog.soulwire.co.uk/laboratory/flash/pixel-bender-growing-tentacles#comments</comments>
		<pubDate>Tue, 26 May 2009 19:08:17 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Generative]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Experiments]]></category>
		<category><![CDATA[Flash Player 10]]></category>
		<category><![CDATA[Pixel Bender]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=360</guid>
		<description><![CDATA[I’ve been revisiting one of my favourite topics lately &#8211; recursion &#8211; and have been getting together a bunch of sketches for a big personal project I’m working on (more on that another time). Anyway, I inadvertently stumbled across quite a nice way of making things grow in a convincing manner, and whilst this script [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision' rel='bookmark' title='Permanent Link: Recursive Polygon Subdivision'>Recursive Polygon Subdivision</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/perlin-noise-flow-field' rel='bookmark' title='Permanent Link: Perlin Noise Flow Field'>Perlin Noise Flow Field</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2009/05/tenticles.swf" rel="lightbox;width=900;height=760" title="Pixel Bender Generative Tentacles" ><img src="http://blog.soulwire.co.uk/wp-content/uploads/2009/05/tentacles-cropped-710x326.jpg" alt="Generative Tentacles" title="Generative Tentacles" width="710" height="326" class="alignnone size-medium wp-image-509" /></a></p>
<p>I’ve been revisiting one of my favourite topics lately &#8211; <strong><a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://en.wikipedia.org/wiki/Recursion"  target="_blank">recursion</a></strong> &#8211; and have been getting together a bunch of sketches for a big personal project I’m working on <em>(more on that another time)</em>. Anyway, I inadvertently stumbled across quite a nice way of making things grow in a convincing manner, and whilst this script doesn’t actually use recursion ‘per se’, I thought it was kind of cool so I ran with it.<span id="more-360"></span></p>
<p>It also presented a good opportunity to try out another Flash Player 10 feature that I’ve been eager to try, which is using <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://labs.adobe.com/technologies/pixelbender/"  target="_blank"><strong>Pixel Bender</strong></a> and <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://livedocs.adobe.com/flex/3/langref/flash/display/ShaderJob.html"  target="_blank"><strong>ShaderJob</strong></a>. Although I’ve used Pixel Bender before, I’ve never used it in this way.</p>
<p>Basically, the idea is to exploit Pixel Bender’s performance and ask it to do some of the heavier number crunching for you &#8211; a concept that is currently being used by the Papervision3D team to give some juice to the next release. The other great thing about this approach is that these computations can run in another thread, leaving you more resources for other tasks (like rendering a fishing boat load of tentacles)</p>
<p>So, although this isn’t the best example of using Pixel Bender’s capabilities, it was a nice opportunity to exercise the idea. Each Tentacle starts a new ShaderJob and Pixel Bender whips up some tasty trigonometry for me, before passing it back inside a <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://livedocs.adobe.com/flex/3/langref/Vector.html"  target="_blank">Vector</a> object (typed Array). From there it’s just a question of making those numbers look nice&#8230; Kind of reminds me of the illustrative style used for the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://oreilly.com/"  target="_blank">O&#8217;Reilly</a> book covers&#8230;</p>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/recursive-polygon-subdivision' rel='bookmark' title='Permanent Link: Recursive Polygon Subdivision'>Recursive Polygon Subdivision</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/perlin-noise-flow-field' rel='bookmark' title='Permanent Link: Perlin Noise Flow Field'>Perlin Noise Flow Field</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/laboratory/flash/pixel-bender-growing-tentacles/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Fit DisplayObject into Rectangle</title>
		<link>http://blog.soulwire.co.uk/code/actionscript-3/fit-a-displayobject-into-a-rectangle</link>
		<comments>http://blog.soulwire.co.uk/code/actionscript-3/fit-a-displayobject-into-a-rectangle#comments</comments>
		<pubDate>Mon, 25 May 2009 17:20:20 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Experiments]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=362</guid>
		<description><![CDATA[We’ve all been there. You’re building an image gallery and you need to create consistently sized thumbnails from a set of images, of various sizes and orientations and with differing aspect ratios &#8211; or you need a fullscreen background which always fills the stage, regardless of a user’s screen resolution and browser window size &#8211; [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/code/actionscript-3/webcam-motion-detection-tracking' rel='bookmark' title='Permanent Link: AS3 Webcam Motion Tracking'>AS3 Webcam Motion Tracking</a></li>
<li><a href='http://blog.soulwire.co.uk/code/open-source/two-sided-planes-in-flash-player-10' rel='bookmark' title='Permanent Link: Double Sided 3D Plane in FP10'>Double Sided 3D Plane in FP10</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-flocking-steering-behaviors' rel='bookmark' title='Permanent Link: Flipping you the Boid'>Flipping you the Boid</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2009/05/displayutils.swf" rel="lightbox;width=800;height=550" title="DisplayUtils Demonstration" ><img title="DisplayUtils" src="http://blog.soulwire.co.uk/wp-content/uploads/2009/05/displayutils.jpg" alt="DisplayUtils" /></a></p>
<p>We’ve all been there. You’re building an image gallery and you need to create consistently sized thumbnails from a set of images, of various sizes and orientations and with differing aspect ratios &#8211; or you need a fullscreen background which always fills the stage, regardless of a user’s screen resolution and browser window size &#8211; or maybe you just need to fit a DisplayObject into a rectangular area whilst maintaining the correct proportions of the original image.<span id="more-362"></span></p>
<h3>Introducing DisplayUtils</h3>
<p>Since this is a common task, one that I find myself coding over and over, I&#8217;ve whipped up a little class called <strong>DisplayUtils</strong> which will help with the scenarios mentioned above and more.</p>
<p>The main method in <em>DisplayUtils</em> is <strong>FitIntoRect</strong>. <em>FitIntoRect</em> can work in several ways. You can use it to resize a DisplayObject to fit inside a rectangle, or you can use it to generate a <em>transformation matrix</em>, which can be applied to an object or used with the <em>BitmapData.draw</em> method to create thumbnail previews, or both. There is also another method called <strong>createThumb</strong>, which uses <em>fitIntoRect</em> to quickly and easily create nicely cropped and scaled thumbnails from a source image with any aspect ratio.</p>
<p>Have a play with the demo above to see what you can do with these methods.</p>
<h3>Using DisplayUtils and fitIntoRect</h3>
<p>There are several parameters to control how fitIntoRect works. Here’s what you can pass to the method:</p>
<ul>
<li><strong>displayObject</strong> : The DisplayObject to resize</li>
<li><strong>rectangle</strong> : A Rectangle object representing the space the DisplayObject should fit into.</li>
<li><strong>fillRect</strong> : Whether the DisplayObject should be transformed to fill the entire  rectangle, or whether it should fit completely within it.</li>
<li><strong>align</strong> : The alignment of the DisplayObject within the rectangle, for example Top Left or Middle.</li>
<li><strong>applyTransform</strong> : Whether the calculated transformation matrix should be applied to the DisplayObject within the fitIntoRect method. If false, the DisplayObject will not be modified, but the Matrix returned by the fitIntoRect method can be used to transform objects or modify the draw command on a BitmapData object.</li>
</ul>
<p>The download includes all necessary classes as well as several examples of how to use the <strong>fitIntoRect</strong> method. Here are some code snippets for getting started with&#8230;</p>
<h3>Example Usage</h3>
<p><strong>Fit a DisplayObject into a Rectangle</strong></p>
<pre lang="actionscript">var area:Rectangle = new Rectangle( 0, 0, 200, 100 );
DisplayUtils.fitIntoRect( myDisplayObject, area, true, Alignment.MIDDLE );</pre>
<p><strong>Create a fullscreen background image</strong></p>
<pre lang="actionscript">stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;

function onStageResized( event:Event = null ):void
{
	var area:Rectangle = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight );
	DisplayUtils.fitIntoRect( myDisplayObject, area, true, Alignment.MIDDLE );
}

stage.addEventListener( Event.RESIZE, onStageResized );
onStageResized();</pre>
<p><strong>Create a thumbnail</strong></p>
<pre lang="actionscript">var thumb:Bitmap = DisplayUtils.createThumb( myBitmap.bitmapData, 100, 100, Alignment.MIDDLE, true );
addChild( thumb );</pre>
<h3 id="download">Download</h3>
<p>You can download the <strong>DisplayUtils</strong> class, as well as the <strong>Alignment</strong> class, which simply contains enumeration for the various alignment options when using <em>fitIntoRect</em> and <em>createThumb</em>.</p>
<p>A example of some of the uses discussed above is also available in the zip.</p>
<a href="http://blog.soulwire.co.uk/wp-content/plugins/download-monitor/download.php?id=displayutils.zip" class="download" title="DisplayUtils: Utilities for Creating Thumbnails & Resizing DisplayObjects"  rel="nofollow"><strong>Download:</strong> DisplayUtils</a>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/code/actionscript-3/webcam-motion-detection-tracking' rel='bookmark' title='Permanent Link: AS3 Webcam Motion Tracking'>AS3 Webcam Motion Tracking</a></li>
<li><a href='http://blog.soulwire.co.uk/code/open-source/two-sided-planes-in-flash-player-10' rel='bookmark' title='Permanent Link: Double Sided 3D Plane in FP10'>Double Sided 3D Plane in FP10</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-flocking-steering-behaviors' rel='bookmark' title='Permanent Link: Flipping you the Boid'>Flipping you the Boid</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/code/actionscript-3/fit-a-displayobject-into-a-rectangle/feed</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>Flipping you the Boid</title>
		<link>http://blog.soulwire.co.uk/laboratory/flash/as3-flocking-steering-behaviors</link>
		<comments>http://blog.soulwire.co.uk/laboratory/flash/as3-flocking-steering-behaviors#comments</comments>
		<pubDate>Tue, 05 May 2009 15:12:45 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Autonomous]]></category>
		<category><![CDATA[Emergence]]></category>
		<category><![CDATA[Experiments]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=320</guid>
		<description><![CDATA[I’ve uploaded the Boid source code. Sorry for the delay. I’ve also included some basic examples of how you can create nice behaviors using the Boid class. If you set Main.as as your document class then you’ll see that within that you can specify the demo to run when you compile. The basic demos included [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/perlin-noise-flow-field' rel='bookmark' title='Permanent Link: Perlin Noise Flow Field'>Perlin Noise Flow Field</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
<li><a href='http://blog.soulwire.co.uk/code/open-source/as3-drag-drop-shuffle-grid-menu' rel='bookmark' title='Permanent Link: AS3 Shuffle Grid Class'>AS3 Shuffle Grid Class</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2009/05/boids.swf" title="AS3 Steering Behaviors" rel="lightbox;width=800;height=760" ><img class="alignnone size-full wp-image-519" title="Boids AS3 Demo" src="http://blog.soulwire.co.uk/wp-content/uploads/2009/05/boids.jpg" alt="Boids AS3 Demo" width="710" height="326" /></a></p>
<p>I’ve uploaded the Boid source code. Sorry for the delay. I’ve also included some basic examples of how you can create nice behaviors using the Boid class. If you set <em>Main.as</em> as your document class then you’ll see that within that you can specify the demo to run when you compile.</p>
<p>The basic demos included are:</p>
<ul>
<li><strong>Chase</strong> &#8211; Boids chase each other</li>
<li><strong>Flock</strong> &#8211; Boids flock together with some wander</li>
<li><strong>Graphics</strong> &#8211; How to use custom graphics with a Boid instance</li>
<li><strong>Seek</strong> &#8211; Boids seek the mouse position</li>
<li><strong>Wander</strong> &#8211; You guessed it, they wander</li>
</ul>
<p>I’ve commented all of the methods and properties and there is also documentation (open <strong><em>index.html</em></strong> in the docs folder) to get you started. Before you mention it, yes, there is some redundant code ;) (such as the <em>constrainToRect</em> method which doesn&#8217;t really work) but I need to do some optimisations anyway so I just left it as is for now, rough and ready.</p>
<p><a href="http://blog.soulwire.co.uk/wp-content/plugins/download-monitor/download.php?id=boids.zip" class="download" title="AS3 Boid Class & Demos: AS3 Boid class for creating flocking behavior, with a variety of steering behaviors and examples of how to use the Boid class."  rel="nofollow"><strong>Download:</strong> AS3 Boid Class & Demos</a><span id="more-320"></span></p>
<p>It’s been a little while since I posted! I’m in the process of moving house and office, plus I’ve been repeatedly slammed at work. Apologies to those of you who’ve left comments and haven’t got much by way of reply. I’ll hopefully be visible again over the next few weeks.</p>
<p>I actually coded this experiment back in November, but only recently decided that enough was enough and hijacked an evening so I could tidy up the code and build a UI for the demo.</p>
<p>Since coming across Craig Reynold’s paper; “<a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.red3d.com/cwr/steer/gdc99/"  target="_blank">Steering Behaviors for Autonomous Characters</a>” whilst I was researching complexity theory for a university project (it wasn’t as academic as it sounds!), I’ve found myself becoming fascinated by flocking and swarm beahviors and the notion that you can create complex systems from relatively simple components. Much like the <a href="http://blog.soulwire.co.uk/laboratory/flash/2d-cellular-automata" title="2D Cellular Automata"  target="_blank">Cellular Automata</a>, you can program an agent to have only a limited set of abilities and awareness, define a set rules for it to follow, and then create a multitude of instances of the agent to see what patterns begin to emerge through their interactions.</p>
<p><a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.red3d.com/cwr/boids/" title="Flocking"  target="_blank">Flocking</a> is a great example of this, as Reynolds demonstrated. His agents, or “<a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://en.wikipedia.org/wiki/Boids" title="Boids"  target="_blank">Boids</a>”, could perform certain maneuvers, such as <em>seeking</em> a target, <em>fleeing</em> from a predator, <em>avoiding obstacles</em> or <em>wandering</em> randomly. Combine these behaviors though, and allow each Boid to consider it’s neighbors when deciding on its locomotion, and complex behaviors begin to emerge.</p>
<p>The most infamous of these combinations is that of <em>separation</em>, <em>cohesion</em> and <em>alignment</em>, as it can produce a swarm behavior reminiscent of flocking birds or shoals of fish.</p>
<p><strong>Separation</strong> means that each Boid attempts to maintain a certain distance from its immediate neighbors, <strong>Cohesion</strong> ensures that each Boid attempts to stay close to the centre of the immediate flock and <strong>Alignment</strong> will calculate the average heading of the flock and steer towards this vector.</p>
<p>Each of these behaviors is fairly simple in isolation, but the results can give the impression that some significant AI is at work, when all that’s really going on is some simple vector math.</p>
<p><a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.flight404.com/blog/" title="Flight 404"  target="_blank">Robert Hodgin</a> has done some <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.flight404.com/blog/?p=99"  target="_blank">amazing work with flocking behaviors</a>, so too has <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.psyop.tv/o.php?id=51|0"  target="_blank">Psyop</a>, and of course <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.red3d.com/cwr/"  target="_blank">Reynolds</a> is the daddy of all this stuff. There are some good libraries out there too, such as <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://opensteer.sourceforge.net/"  target="_blank">OpenSteer</a>, and <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://www.bit-101.com/blog/"  target="_blank">Keith Peters</a> talks about this too in <em>Advanced Actionscript Animation</em>.</p>
<p>I’ve been trying to sharpen up my mathematical skills lately though, and was eager to play around with the new (new when I created this experiment anyway!) Flash Player 10 API &#8211; the 3D aspects in particular. So at the core of the Boid class are the native <em>Vector3D</em>, <em>Matrix3D</em> and <em>PerspectiveProjection</em> classes. Ok, so we’ve all got our own Vector3D and Matrix3D class in our library, but I thought it’d be good to use Adobe’s, especially seeing you can then apply the Matrix3D <em>directly to a DisplayObject’s transform property</em>.</p>
<p>Another cool feature I came across was the <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://livedocs.adobe.com/flex/3/langref/flash/geom/Matrix3D.html#pointAt()"  target="_blank">Matrix3D.pointAt()</a> method, which will rotate a Matrix around a given axis and in this case can be used to orientate the Boid to it’s heading vector… Nice!</p>
<p>I’ve had a lot of fun putting together the Boid demo anyway &#8211; tweaking various settings on the individual Boids as well as the group behaviors (my personal favorite is ‘<em>Chase</em>’ mode with ‘<em>Number of Boids</em>’ cranked right up!).</p>
<p>If you have a play with the settings though, you’ll quickly see what I mean about the plethora of different effects that can be accomplished, even by simply adjusting the locomotive abilities of the Boids.</p>
<p>Due to said lack of free time as of late, I haven’t documented the code fully, though I have started and so if anyone is interested in the source code <em>then please say so</em> in the comments and I’ll try and finish the job (after a mere 6 months!) and put it up for download.</p>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/laboratory/flash/perlin-noise-flow-field' rel='bookmark' title='Permanent Link: Perlin Noise Flow Field'>Perlin Noise Flow Field</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
<li><a href='http://blog.soulwire.co.uk/code/open-source/as3-drag-drop-shuffle-grid-menu' rel='bookmark' title='Permanent Link: AS3 Shuffle Grid Class'>AS3 Shuffle Grid Class</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/laboratory/flash/as3-flocking-steering-behaviors/feed</wfw:commentRss>
		<slash:comments>68</slash:comments>
		</item>
		<item>
		<title>More Music Visualisations</title>
		<link>http://blog.soulwire.co.uk/art-design/portfolio/more-bandcamp-music-visualisations</link>
		<comments>http://blog.soulwire.co.uk/art-design/portfolio/more-bandcamp-music-visualisations#comments</comments>
		<pubDate>Tue, 17 Mar 2009 14:07:44 +0000</pubDate>
		<dc:creator>Soulwire</dc:creator>
				<category><![CDATA[Animation]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Generative]]></category>
		<category><![CDATA[Illustration]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[Transmissions]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[Visualisation]]></category>

		<guid isPermaLink="false">http://blog.soulwire.co.uk/?p=322</guid>
		<description><![CDATA[Just a quick (and slightly belated) announcement. The distinguished Bandcamp has recently been regaled with another round of audio-visual snacks. I&#8217;ve had a lot of fun working on them, and there will be even more in the not too distant future. The whole Bandcamp site in fact is bursting with more and more tasty new [...]


Related posts:<ol><li><a href='http://blog.soulwire.co.uk/art-design/portfolio/bandcamp-music-visualisations' rel='bookmark' title='Permanent Link: Bandcamp Music Visualisations'>Bandcamp Music Visualisations</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/actionscript3-dynamic-sound-visualisation' rel='bookmark' title='Permanent Link: AS3 Music Visualisation'>AS3 Music Visualisation</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-525" title="Bandcamp Music Visualisations" src="http://blog.soulwire.co.uk/wp-content/uploads/2009/03/bandcamp.jpg" alt="Bandcamp Music Visualisations" width="710" height="352" /></p>
<p><strong>Just a quick</strong> (and slightly belated) <strong>announcement</strong>.</p>
<p>The distinguished <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://bandcamp.com/" title="Bandcamp"  target="_blank">Bandcamp</a> has recently been regaled with another round of audio-visual snacks. I&#8217;ve had a lot of fun working on them, and there will be even more in the not too distant future.</p>
<p>The whole Bandcamp site in fact is bursting with more and more <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://bandcamp.com/features"  target="_blank">tasty new features</a> which you should check out. In terms of my little contribution on the music visualistions front, there are currently four new full fat flavors to feast on…<span id="more-322"></span></p>
<p><strong>Ribbons</strong> » which uses my <a href="http://blog.soulwire.co.uk/code/actionscript-3/papervision3d-ribbons" title="Papervision3D Ribbon Class" >Papervision3D Ribbons Class</a> and is designed for crunching riffs and hard beats.</p>
<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2009/03/ribbons-big.jpg" rel="lightbox[bandcamp]" ><img class="alignnone size-medium wp-image-528" title="Ribbons Visualisation" src="http://blog.soulwire.co.uk/wp-content/uploads/2009/03/ribbons-big-710x177.jpg" alt="Ribbons Visualisation" width="710" height="177" /></a></p>
<p><strong>Strata</strong> » which was inspired by stream-graphs and rock formations, and flows like a charred pizza in a log-flume along an imaginary Teflon oven dish.</p>
<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2009/03/strata-big.jpg" rel="lightbox[bandcamp]" ><img class="alignnone size-medium wp-image-529" title="Strata Visualisation" src="http://blog.soulwire.co.uk/wp-content/uploads/2009/03/strata-big-710x177.jpg" alt="Strata Visualisation" width="710" height="177" /></a></p>
<p><strong>Plughole</strong> » which comprises of disembodied appendages and iconography encapsulating the zeitgeist of generation stupid &#8211; mashes the aforementioned archetypes up into crumbs before offering them to the esophagus of oblivion.</p>
<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2009/03/plughole-big.jpg" rel="lightbox[bandcamp]" ><img class="alignnone size-medium wp-image-527" title="Plughole Visualisation" src="http://blog.soulwire.co.uk/wp-content/uploads/2009/03/plughole-big-710x177.jpg" alt="Plughole Visualisation" width="710" height="177" /></a></p>
<p><strong>Hypno</strong> » which was designed to bring about universal harmony and spiritual equilibrium but accidentally caused the credit crunch.</p>
<p><a href="http://blog.soulwire.co.uk/wp-content/uploads/2009/03/hypno-big.jpg" rel="lightbox[bandcamp]" ><img class="alignnone size-medium wp-image-526" title="Hypno Visualisation" src="http://blog.soulwire.co.uk/wp-content/uploads/2009/03/hypno-big-710x177.jpg" alt="Hypno Visualisation" width="710" height="177" /></a></p>
<p>You can see them in action by visiting an <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://bandcamp.com/artists" title="Artists on Bandcamp"  target="_blank">artist&#8217;s</a> page (such as <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://hotbitcharsenal.bandcamp.com/" title="Hot Bitch Arsenal on Bandcamp"  target="_blank">Hot Bitch Arsenal</a> or <a rel="nofollow" href="http://blog.soulwire.co.uk//goto/http://patttten.bandcamp.com/" title="Patterns on Bandcamp"  target="_blank">Pattern</a>), hitting play and selecting a visualisation from the pop-out menu underneath the cover art.</p>


<p>Related posts:<ol><li><a href='http://blog.soulwire.co.uk/art-design/portfolio/bandcamp-music-visualisations' rel='bookmark' title='Permanent Link: Bandcamp Music Visualisations'>Bandcamp Music Visualisations</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/actionscript3-dynamic-sound-visualisation' rel='bookmark' title='Permanent Link: AS3 Music Visualisation'>AS3 Music Visualisation</a></li>
<li><a href='http://blog.soulwire.co.uk/laboratory/flash/as3-tonfall-particle-node-sequencer' rel='bookmark' title='Permanent Link: AS3 Particle Node Sequencer'>AS3 Particle Node Sequencer</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.soulwire.co.uk/art-design/portfolio/more-bandcamp-music-visualisations/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

