<?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>Luke Loeffler</title>
	<atom:link href="http://lukeloeffler.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://lukeloeffler.com</link>
	<description></description>
	<lastBuildDate>Fri, 26 Feb 2010 02:58:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ephemeral Recordings</title>
		<link>http://lukeloeffler.com/2010/ephemeral-recordings/</link>
		<comments>http://lukeloeffler.com/2010/ephemeral-recordings/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 00:48:10 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[Work in Progress]]></category>
		<category><![CDATA[sculpture]]></category>
		<category><![CDATA[sound]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=671</guid>
		<description><![CDATA[A system for imprecise, ephemeral transmission of sound data]]></description>
			<content:encoded><![CDATA[<p>One recent idea I&#8217;ve been investigating is the transmission of data by ephemeral, imperfect, mechanical means. It began as the thought of using a knotted cord to transmit a sequence of notes around a room for a physical sonic sculpture, but has taken other directions as I have given more thought to what it means to make a mark.</p>
<p>Mark making can be broken into three categories: addition of material, removal of material, and the modification of a material (although there is a fair amount of overlap between the categories).  Examples of addition were to clamp a bead onto a passing string, to add a blob of glue, or to add a drop of water. Removal of material could mean cutting away, notching, or burning a substrate as it passes. Modification could be knotting the material as it passes, staining it, raising the temperature, etc.</p>
<p>Most media strive to be precise and permanent. By soaking portions of a passing rope with saline, these regions can be detected as they pass &#8220;listeners&#8221; further down the line. Due to the capillarity of the rope, however, the saline spreads out in several directions which causes slight conductivity and more gently ramping (as opposed to digital) signal. Due to evaporation, the signals get weaker and weaker as they progress through the system yielding unexpected results. Looping everything back around will allow one continuous rope to be used.</p>
<p>Additional possible methods could use a heating element to apply varying amounts of heat to a passing wire. As the heat spreads, the crispness of the signal is diminished and bleeds into adjoining signals. As the heat is transferred to the environment, the overall signal diminishes and returns the wire to its original state.</p>
<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2010/01/c59a24b7f9a2d7eccfa3dd16e680132c.jpg"><img class="alignleft size-medium wp-image-674" title="c59a24b7f9a2d7eccfa3dd16e680132c" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2010/01/c59a24b7f9a2d7eccfa3dd16e680132c-240x360.jpg" alt="c59a24b7f9a2d7eccfa3dd16e680132c" width="240" height="360" /></a><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2010/01/b522d2fd5c9ebf78b2d0c45ae8a1c027.jpg"><img class="alignleft size-medium wp-image-675" title="b522d2fd5c9ebf78b2d0c45ae8a1c027" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2010/01/b522d2fd5c9ebf78b2d0c45ae8a1c027-318x360.jpg" alt="b522d2fd5c9ebf78b2d0c45ae8a1c027" width="318" height="360" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2010/ephemeral-recordings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visualizations for new Display</title>
		<link>http://lukeloeffler.com/2010/fiberoptic-visualizations/</link>
		<comments>http://lukeloeffler.com/2010/fiberoptic-visualizations/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 21:22:38 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[puredata]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=604</guid>
		<description><![CDATA[Over the last couple months I&#8217;ve had the chance to develop a series of &#8220;paintings&#8221; for the fiberoptic tapestry, a new display system developed by artists Ligorano/Reese. It is essentially a hand-woven canvas of optic fibers, each illuminated by an electronically-controlled LED. The result is incredibly beautiful and expressive, producing a painterly effect. I was [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/12/IMG_1463.JPG"><img class="alignleft size-medium wp-image-608" style="padding-right: .5em" title="IMG_1463" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/12/IMG_1463-360x249.jpg" alt="IMG_1463" width="360" height="249" /></a>Over the last couple months I&#8217;ve had the chance to develop a series of &#8220;paintings&#8221; for the <em>fiberoptic tapestry</em>, a new display system developed by artists <a href="http://ligoranoreese.net">Ligorano/Reese</a>. It is essentially a hand-woven canvas of optic fibers, each illuminated by an electronically-controlled LED. The result is incredibly beautiful and expressive, producing a painterly effect. I was mesmerized by the gently-glowing canvases the first time I saw them and was very excited to get the chance to create content for them.</p>
<p>My work has been developing visualizations that utilize the new physical display in different ways. The first visualizes air traffic over four major airports in the US, drawing moving lines to indicate aircraft taking off and landing. The second aggregates a number of sources for natural disaster information and draws the disasters as &#8220;tears in the fabric&#8221; of the world, represented by a rainbow gradient. Two forces &#8220;compete&#8221; for the tapestry, one creative and one destructive. Lastly, I am working to create software that reacts to the environment and responds by flashing a series of animations developed by Marshall Reese.</p>
<p>A program in Processing communicates with the hardware and serves as a hub accepting drawing commands from other software via OSC. A number of scripts in Python perform data aggregation, scraping, parsing and animation for the flight tracker. A patch in Pd performs sound analysis and drives the canvases through OSC.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2010/fiberoptic-visualizations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reverse Engineering the Speaking Piano</title>
		<link>http://lukeloeffler.com/2010/speaking-piano/</link>
		<comments>http://lukeloeffler.com/2010/speaking-piano/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 23:18:33 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[puredata]]></category>
		<category><![CDATA[sound]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=648</guid>
		<description><![CDATA[How Puredata can be used to translate sound to a restricted sequence of discrete notes.]]></description>
			<content:encoded><![CDATA[<p>I was really intrigued by Peter Ablinger&#8217;s <a href="http://createdigitalmusic.com/2009/10/06/the-speaking-piano-and-transforming-audio-to-midi/">Speaking Piano</a> (officially titled <a href="http://ablinger.mur.at/docu11.html">Quadraturen</a>, auf Deutsch)–a system that takes human speech and translates it to a sequence of notes to be played on a piano by a bunch of solenoids, or &#8220;mechanical fingers.&#8221;</p>
<p>Since I&#8217;ve been learning Puredata, I thought it would be a fun exercise to attempt to recreate the software Ablinger wrote to translate speech to midi notes. The secondary purpose was to turn my oft-idle digital piano into an interactive sound piece, translating sound from another part of the house into music downstairs. The result isn&#8217;t perfect, but I think it still achieves the same ambiguous result where you are able to hear the voice once you see the transcript. The biggest difference is obviously that I&#8217;m using a digital piano, not a mechanically-actuated analog piano. However, the Roland has a fairly sophisticated physical model with things like dampening and string resonance, so it&#8217;s better than nothing.</p>
<p>Below are the two components to the software. Clicking the image will link to the pd file if you&#8217;d like to experiment yourself. You can either load in a pre-recorded wave file and play it back, or set the gain to the adc~ to 1 and use a microphone to drive it in real time (although I set up a delay of about 3 seconds so I could evaluate the results without hearing my own voice).  <em>delread~ </em>passes the data into <em>fiddle~</em> which does all the hard work of Fourier analysis. A metronome set to 15 ms samples the outputs of the individual sine components and creates midi notes.  The blocks that create the actual notes are <em>partial_key</em>.  The highest key on the piano is midi 108, which corresponds to 4186 Hz, so I added a low pass filter to remove frequencies that couldn&#8217;t be reproduced.</p>
<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2010/01/talking_piano.pd"><img class=" size-large wp-image-649" title="talking_piano.pd" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2010/01/talking_piano.pd-681x800.jpg" alt="talking_piano.pd" width="681" height="800" /></a></p>
<p>partial_key.pd creates the midi notes which are sent to the piano. The signal makenote_b is received from the metronome, which causes the note to be made. Additionally, no note is sent if the midi key number is higher than 108, the limit of my piano, or if the amplitude is too small (&lt; 0.01).</p>
<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2010/01/partial_key.pd"><img class=" size-full wp-image-653" title="partial_key.pd" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2010/01/partial_key.pd1.jpg" alt="partial_key.pd" width="377" height="378" /></a></p>
<p>Here is <a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2010/01/talkingpiano01.mp3">a sample of the result</a>, speaking the following: &#8220;these are very profound words, which is why they are being spoken by a piano. I hope you are forever moved by these profound words.&#8221;</p>
<p>I&#8217;d love any feedback from Puredata or DSP gurus on how the software could be improved. I&#8217;m not quite sure what sorts of additional analysis and synthesis steps are being taken in the Quadraturen software as it is not available.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2010/speaking-piano/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://lukeloeffler.com/wordpress/wp-content/uploads/2010/01/talkingpiano01.mp3" length="215863" type="audio/mpeg" />
		</item>
		<item>
		<title>Wind Carol</title>
		<link>http://lukeloeffler.com/2009/wind-carol/</link>
		<comments>http://lukeloeffler.com/2009/wind-carol/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 02:20:04 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[puredata]]></category>
		<category><![CDATA[sound]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=620</guid>
		<description><![CDATA[It&#8217;s that time of year again. Christmas is coming, snow is falling outside my window, and the wind is whistling.  Maybe it&#8217;s late, or my mind is playing tricks on me, but the wind seems a bit more coherent than usual&#8230; Musical, even. Creepy.
windsong.mp3
This is how I&#8217;d like to imagine the first Christmas–even the wind [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s that time of year again. Christmas is coming, snow is falling outside my window, and the wind is whistling.  Maybe it&#8217;s late, or my mind is playing tricks on me, but the wind seems a bit more coherent than usual&#8230; Musical, even. Creepy.</p>
<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/12/windsong.mp3">windsong.mp3</a></p>
<p>This is how I&#8217;d like to imagine the first Christmas–even the wind crying out. And doing so subtly, not unlike the whispering symbolic language of babies and cattle stalls.</p>
<p>The idea came about from the desire to manipulate various parts of the built environment to create music as the wind is blowing. Maybe change the orientation of a sheet of metal, the size of some opening, etc. With a feedback loop, the system could progress through a melody once it detected that the desired notes of the sequence had been played. Although a composer could control the content, the weather would determine the tempo. A listener may have to wait weeks or months for the piece to complete without sufficient wind.</p>
<p>In the meantime, I created the above synthetic version of what I imagine it could sound like (though the song above would probably have to be recorded somewhere in Antarctica).</p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/wind-carol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/12/windsong.mp3" length="3048050" type="audio/mpeg" />
		</item>
		<item>
		<title>Pure Data: The Swiss Army Knife of Audio</title>
		<link>http://lukeloeffler.com/2009/pure-data/</link>
		<comments>http://lukeloeffler.com/2009/pure-data/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 06:30:16 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[experiment]]></category>
		<category><![CDATA[puredata]]></category>
		<category><![CDATA[sound]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=597</guid>
		<description><![CDATA[After a weekend workshop (thanks to Hans-Christoph Steiner and Eyebeam) on Pure Data, I&#8217;ve been tinkering with it quite a bit lately and geeking out on old signal processing stuff I haven&#8217;t touched since college.
Over the years I&#8217;ve played with a number of tools for audio processing: Matlab, jMusic, a Java library for algorithmic composition, Nyquist, a [...]]]></description>
			<content:encoded><![CDATA[<p>After a weekend workshop (thanks to Hans-Christoph Steiner and Eyebeam) on <a href="http://puredata.info">Pure Data</a>, I&#8217;ve been tinkering with it quite a bit lately and geeking out on old signal processing stuff I haven&#8217;t touched since college.</p>
<p>Over the years I&#8217;ve played with a number of tools for audio processing: Matlab, <a href="http://jmusic.ci.qut.edu.au/">jMusic</a>, a Java library for algorithmic composition, <a href="http://www.cs.cmu.edu/~music/nyquist/">Nyquist</a>, a Lisp-based synthesis/analysis environment, <a href="http://beadsproject.net">Beads</a>, another Java library for synthesis and analysis, and <a href="http://www.audiosynth.com/">Supercollider</a>, another synth/analysis environment with smalltalk-like syntax. All of these are powerful tools, but aren&#8217;t as engaging in terms of interactivity. Having been forced to use LabVIEW in the past, another dataflow language, I was initially reluctant to pick up another, but for audio work, it&#8217;s been great. It is so easy to try new ideas without any need to recompile. It&#8217;s a lot like playing with a running circuit.</p>
<p>So far I&#8217;ve used to to analyze sound and control some lighting panels to create a reactive environment, synthesize tones for my invisible chimes project, and do some other synth experiments. This brief <a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/12/pd-subtractive-synth-test.mp3">subtractive synth</a> test uses filters to shape pink noise into hazy tones forming a chord. <a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/12/Mac-Audio_recording-7.mp3">synth2</a> tinkers with sample playback and ring modulation. Next up, granular synthesis to build some instrumental Christmas music?</p>
<h3>Other Useful Audio Software</h3>
<p><a href="http://www.jackosx.com/">Jack</a> is a great tool for routing inputs and outputs on your system. It has made it really simple, for example, to send the output of iTunes to Pure Data, which allows me to sample chunks, process them, and mix it back into songs playing. I made a small program that samples chunks of the last song and then injects them into the new song when it detects beats. It also supports plugins, so you could use Pure Data as a signal processor for other programs like Logic.</p>
<p><a href="http://www.ambrosiasw.com/utilities/wiretap/">Wiretap Studio</a> is really useful for capturing any sound source on your system, doing basic waveform editing, fades, effects, and exporting to any other sound file format.</p>
<p><a href="http://rjdj.me/">RjDj</a> for the iPhone is a program that lets you download (and create, using Pd) &#8220;scenes&#8221; that generate music or process environmental sound and play it through the headphones. For example, one might identify that fan humming along at 300 Hz and re-inject overtones to change its timbre.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/pure-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/12/pd-subtractive-synth-test.mp3" length="659490" type="audio/mpeg" />
<enclosure url="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/12/Mac-Audio_recording-7.mp3" length="1274076" type="audio/mpeg" />
		</item>
		<item>
		<title>Invisible Chimes</title>
		<link>http://lukeloeffler.com/2009/intangible-invisible-interactions/</link>
		<comments>http://lukeloeffler.com/2009/intangible-invisible-interactions/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 05:15:29 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[Completed Work]]></category>
		<category><![CDATA[gallery]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[interactive]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[puredata]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=572</guid>
		<description><![CDATA[How would we experience interaction with objects that provide no visual or tactile feedback?]]></description>
			<content:encoded><![CDATA[<p>Lately I have been exploring the idea of invisible, intangible interactive systems and how they would be experienced. So much of everyday interaction deals with sight and touch.  We rely on visual and tactile feedback to manipulate and understand physical systems. How difficult is it to understand and know a system when these two components are removed leaving only sound? Everyone has had the experience of stumbling through a dark house at night to get a glass of water, but relied primarily on the sense of touch to get by. What happens when Newton&#8217;s 3rd law no longer guides us and the glass we grasp doesn&#8217;t press back on our hand? The closest experience I can think of is the theremin, although the underlying system is limited in potential complexity.</p>
<p>The first piece I have made to explore this concept features invisible wind chimes.  When a person walks through the space occupied by the virtual chimes, they begin to ring.  Should the actor stop to explore the source of the sound, he will uncover a fine-grained, predictable, knowable system. Using computer vision techniques to detect movement in a space, real, physical objects are able to interact with virtual, &#8220;physical&#8221; ones. Although not concrete, they are still physical because a physics simulation ensures the individual chimes still hang behave in ways we know and expect.  They hang from the ceiling by strings, collide with each other (causing them to ring), swing and respond to gravity by eventually settling back to rest, and respond to touch by a soft body (muting any ringing).</p>
<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/12/Screen-shot-2009-12-14-at-12.18.57-AM.png"><img class="alignleft size-medium wp-image-585" title="Screen shot 2009-12-14 at 12.18.57 AM" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/12/Screen-shot-2009-12-14-at-12.18.57-AM-360x288.png" alt="Screen shot 2009-12-14 at 12.18.57 AM" width="360" height="288" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/intangible-invisible-interactions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Topographic Mirror</title>
		<link>http://lukeloeffler.com/2009/topographic-mirror/</link>
		<comments>http://lukeloeffler.com/2009/topographic-mirror/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 04:29:26 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[Completed Work]]></category>
		<category><![CDATA[gallery]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=574</guid>
		<description><![CDATA[Software that dismantles and reconstructs the human vision system by finding edges of different value levels and recombining the sequentially sans value.]]></description>
			<content:encoded><![CDATA[<p><em>Topographic Mirror</em> is an interactive program that decomposes and reintegrates the elements of human vision.  We normally see by finding gradations of value in a scene.  The contrast between shadows, midtones, and highlights allows us to distinguish one region from another.  However, by moving a Nintendo Wii, the viewer is able to slice the image into rings of different values and generate a sort of real-time topographic map of the scene allowing us to see things in a new way.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="267" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashvars" value="intl_lang=en-us&amp;photo_secret=4d4f0ebd63&amp;photo_id=4156082139" /><param name="bgcolor" value="#000000" /><param name="allowFullScreen" value="true" /><param name="src" value="http://www.flickr.com/apps/video/stewart.swf?v=71377" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="400" height="267" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" allowfullscreen="true" bgcolor="#000000" flashvars="intl_lang=en-us&amp;photo_secret=4d4f0ebd63&amp;photo_id=4156082139"></embed></object></p>
<p>The persistence of the lines could be affected by altering the opacity and the radius of the contour lines could be changed by setting the thresholding point, which is the cutoff point or &#8220;line in the sand&#8221; by which we determine what white and black are. Imagine flooding a mountainous area with water: everything above the water line is considered &#8220;dry&#8221; and everything below, &#8220;wet.&#8221;  If you walk along the shoreline, or contour, add more water and then walk the shore line again, you will find a much smaller ring the second time.  If you were to plot the path you took for each of these rings, you would have a topographic map.</p>
<p>Continuing with this idea, I automated the process and drew all the contours on each image, leading to a series of images like this:</p>
<p><a href="http://www.flickr.com/photos/ukle/4173932918/"><img class="alignleft size-medium wp-image-575" title="4173932918_6fb2b66a89_o" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/12/4173932918_6fb2b66a89_o-360x269.jpg" alt="4173932918_6fb2b66a89_o" width="360" height="269" /></a><br />
Next I added all the points to 3D space and set up some basic camera controls to allow exploring the mesh and ended up with a video like this, which felt a lot like those old-school flight simulators from the 80&#8217;s.  There&#8217;s something very amusing about flying over your face&#8230;<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashvars" value="intl_lang=en-us&amp;photo_secret=05bbe79165&amp;photo_id=4174231525" /><param name="bgcolor" value="#000000" /><param name="allowFullScreen" value="true" /><param name="src" value="http://www.flickr.com/apps/video/stewart.swf?v=71377" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" allowfullscreen="true" bgcolor="#000000" flashvars="intl_lang=en-us&amp;photo_secret=05bbe79165&amp;photo_id=4174231525"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/topographic-mirror/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tangible Drawing Interfaces</title>
		<link>http://lukeloeffler.com/2009/tangible-drawing-interfaces/</link>
		<comments>http://lukeloeffler.com/2009/tangible-drawing-interfaces/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 23:36:11 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[experiment]]></category>
		<category><![CDATA[interactive]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[trackmate]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=556</guid>
		<description><![CDATA[An experiment with tangible interfaces allowing on-screen drawing using assorted physical objects, each of which have a specific function.]]></description>
			<content:encoded><![CDATA[<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/12/3601289505_23738aab71_b.jpg"><img class="alignleft size-medium wp-image-557" title="3601289505_23738aab71_b" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/12/3601289505_23738aab71_b-360x239.jpg" alt="3601289505_23738aab71_b" width="360" height="239" /></a>This is a screenshot of one of the resulting paintings from an experiment using <a href="http://trackmate.media.mit.edu/">trackmate</a> to create a tangible drawing interface. By placing special coded labels on the bottom of miscellaneous objects I had lying around my desk, I was able to assign a different function to each object. For example, a green candle drew green lines and a yellow one drew in yellow. Another one was a &#8220;universal&#8221; brush that took on the color determined by the rotation of a fourth object. Another object only erased, and one final one controlled the opacity of the brushes by its position.</p>
<p>The trackmate system examines an image (in this case coming from a cheap webcam) and looks for special coded labels. Each label contains a unique ID and also encodes its rotational direction. When trackmate identifies a label, it sends the id, position, and rotation to my software in processing which in turn draws lines.</p>
<p>The screenshot was taking during an interactive session where one person was controlling the color, the other was controlling the opacity, and the third was moving the brush.</p>
<p>The lines in the drawing are broken up due to the low resolution of the camera (this could have possibly been solved with interpolation).  I need to calibrate the camera again (and really, buy a cam with a res higher than 640&#215;480), and find a better surface that will filter some of the &#8216;noise&#8217; from the scene.  Still, trackmate behaved remarkably well given the circumstances.</p>
<p>The trackmate website has good tutorials on how to get a system up and running. My <a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/12/trackmate_tangible_drawing_interface.pde">source code</a> is provided to help get you started if you want to play around with the system, although I accidentally lost the final revision, so the code provided may not function as expected.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/tangible-drawing-interfaces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Cam Heart Rate Monitor</title>
		<link>http://lukeloeffler.com/2009/web-cam-heart-rate-monitor/</link>
		<comments>http://lukeloeffler.com/2009/web-cam-heart-rate-monitor/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 02:34:18 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[experiment]]></category>
		<category><![CDATA[processing]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=463</guid>
		<description><![CDATA[How to measure your heart rate with a webcam and some Processing code.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been experimenting with methods to determine my heart rate in order to add bio-feedback to software. This Processing sketch uses the same principle as the devices in the doctor&#8217;s office that clip on to your finger. When your heart beats, more blood is pumped through the capillaries in your fingertip, thus absorbing more light and causing a slight darkening of your fingertip.</p>
<p>To use the code you&#8217;ll need a copy of <a href="http://processing.org">Processing</a>. Shine a bright flashlight against your thumbnail (I used a bright LED flashlight) and place your thumb over the webcam lens so it completely blocks it. Try to hold as still as possible.  The brightness of the red channel is measured each frame and a running average is kept. If the brightness drops below the recent average, a small circle is drawn representing a contracting heart.</p>
<p>If it is unreliable, you may need to tweak the navg parameter and/or find a way to stabilize the light source, finger, and camera, as small shifts will cause a change in the amount of light detected by the camera.</p>
<p><a href='http://lukeloeffler.com/wordpress/wp-content/uploads/2009/11/heartrate_monitor_camera.pde'>Download the Code</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/web-cam-heart-rate-monitor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moving Sound</title>
		<link>http://lukeloeffler.com/2009/moving-sound/</link>
		<comments>http://lukeloeffler.com/2009/moving-sound/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 02:12:40 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[gallery]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[interactive]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[sound]]></category>
		<category><![CDATA[synthesis]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=420</guid>
		<description><![CDATA[An interactive piece translating 2D forms to sound.]]></description>
			<content:encoded><![CDATA[<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/10/Screen-shot-2009-10-18-at-10.00.18-PM.png"><img class="alignleft size-medium wp-image-421" title="Screen shot 2009-10-18 at 10.00.18 PM" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/10/Screen-shot-2009-10-18-at-10.00.18-PM-360x269.png" alt="Screen shot 2009-10-18 at 10.00.18 PM" width="360" height="269" /></a>I&#8217;ve been interested lately in the concept of giving abstract things a voice and answering the question of what something would sound like if it made noise. This project aims to create sound from movement.</p>
<p>In a <a href="http://www.ted.com/talks/lang/eng/golan_levin_ted2009.html">TED talk</a> by Golan Levin, he presented an interactive project that highlighted the negative (or interstitial) spaces of cast shadows. This idea seemed like a natural way to segment a generic image, so I decided to use blobs (uninterrupted regions of an image) as the basis for generating tones. In this processing sketch, the system finds three areas of a particular size and assigns each a tone according to its size associating larger pieces with lower tones.  The colors indicate the three sound-generating regions.</p>
<p>The <a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/10/sound_of_shape.html">applet</a> has been posted along with the source, although you may have to run it locally in processing to work properly.  You will need a video camera attached to your computer.  <a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/10/interstitial-synth-recording.mp3">Listen to a sound clip</a> from the synth.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/moving-sound/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/10/interstitial-synth-recording.mp3" length="176098" type="audio/mpeg" />
		</item>
		<item>
		<title>Colorspace Synthesizer</title>
		<link>http://lukeloeffler.com/2009/colorspace-synthesizer/</link>
		<comments>http://lukeloeffler.com/2009/colorspace-synthesizer/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 00:59:00 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[gallery]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[interactive]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[sound]]></category>
		<category><![CDATA[synthesis]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=404</guid>
		<description><![CDATA[An experimental, interactive audio synthesizer in which independent generators combine to create an ambient soundscape as they try to reach a state of equilibrium.]]></description>
			<content:encoded><![CDATA[<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/10/colorspace.html"><img style="float: left; border: 0px initial initial; margin-right: 1em;" title="color_space1" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/10/color_space1-360x349.png" alt="color_space1" width="360" height="349" /></a></p>
<p>An experimental, interactive audio synthesizer in which independent generators combine to create an ambient soundscape as they try to reach a state of equilibrium.</p>
<p>Click to listen to a <a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/10/cs_test.mp3">sample clip</a>, play with the <a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/10/colorspace.html">applet</a>, or view the <a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/10/color_space.pde">source</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/colorspace-synthesizer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/10/cs_test.mp3" length="4227051" type="audio/mpeg" />
		</item>
		<item>
		<title>Visualizing Discussion</title>
		<link>http://lukeloeffler.com/2009/visualizing-discussion/</link>
		<comments>http://lukeloeffler.com/2009/visualizing-discussion/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 00:05:31 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[gallery]]></category>
		<category><![CDATA[flare]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=394</guid>
		<description><![CDATA[An animation visualizing four groups discussing a variety of topics over the course of the evening.]]></description>
			<content:encoded><![CDATA[<p>I just wrapped up work on a visualization for the <a href="http://thought-processor.com/lastsupper/">2009 Last Supper Festival</a>. The work visualized a series of conversations during a <a href="http://www.goodmeet.org/SaltMeans_Documentation.html">symposium</a> on the topic <em>Identifying Our Means</em>.  After three short presentations, four groups were formed to discuss a number of topics, periodically rotating the group members from one table to the next. At each table was a note taker who recorded as close to verbatim who was saying what and when, with the help of an automatically time-stamping spreadsheet.</p>
<p>Once the data was collected, a number of scripts were written in Python to extract, convert, clean, and export the data in addition to performing some basic analysis. Finally, I used the Prefuse <a href="http://flare.prefuse.org">Flare</a> library to create an animation at 40x real time of the interaction between people and key topics. Below is a still frame from the animation.  Click to load the animation.<br />
<a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/09/vis_screenshot.png"><img class="alignleft size-large wp-image-397" title="vis_screenshot" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/09/vis_screenshot-800x745.png" alt="vis_screenshot" width="800" height="745" /></a></p>
<p>Special thanks to David Friedlander, Chris Kennedy, Stephanie Nikolopoulos, and Reid Rogers for collecting the data (taking notes) during the event!</p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/visualizing-discussion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Text on a Curve</title>
		<link>http://lukeloeffler.com/2009/text-on-a-curve/</link>
		<comments>http://lukeloeffler.com/2009/text-on-a-curve/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 22:57:03 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[typography]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=383</guid>
		<description><![CDATA[I&#8217;m researching methods to render text along a path, like you can easily do in Illustrator. Unfortunately, it&#8217;s not so simple in Processing (unless someone knows of a library that does this).

You can find a demo and the source here. Click four times to set the curve points and handles. Move the mouse left and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m researching methods to render text along a path, like you can easily do in Illustrator. Unfortunately, it&#8217;s not so simple in Processing (unless someone knows of a library that does this).</p>
<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/09/Screen-shot-2009-09-01-at-5.57.37-PM.png"><img class="alignnone size-medium wp-image-392" title="Screen shot 2009-09-01 at 5.57.37 PM" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/09/Screen-shot-2009-09-01-at-5.57.37-PM-360x157.png" alt="Screen shot 2009-09-01 at 5.57.37 PM" width="360" height="157" /></a></p>
<p>You can find a demo and the source <a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/09/growing_text_tree.html">here</a>. Click four times to set the curve points and handles. Move the mouse left and right to alter the curve tightness.</p>
<p>In a nutshell, the algorithm computes the approximate length of the line segment by chopping it into smaller segments and computing the linear distance between points.  Once the length of the segment is known in pixels, <em>textWidth()</em> is called to obtain the width in pixels of each character. This width divided by the length of the curve determines the percentage of the curve the character occupies. Once this is know, the amount to increment the variable <em>t</em> in the parametric <em>curvePoint(&#8230;)</em> function is known. From here, we can find the starting point, determine the tangent, and draw the letter.</p>
<p>All straightforward, right? For whatever reason, though, the kerning is severely off under certain conditions. When there is a slight curve in the line segment, it seems to be balanced. When the curve tightness is altered and becomes very flat, or very curved, the letters become overly spaced out at one end, and overly compressed at the other.  Does anyone have any suggestions as to why this is happening?</p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/text-on-a-curve/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making a Stacked Area Chart With Processing</title>
		<link>http://lukeloeffler.com/2009/stacked_area_chart/</link>
		<comments>http://lukeloeffler.com/2009/stacked_area_chart/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 06:37:25 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=370</guid>
		<description><![CDATA[In order to visualize multiple variables in a single time series, a stacked area (sometimes called a &#8220;stream&#8221;) chart is often useful. I am currently doing research for an upcoming visualization that will trace the development of ideas through a conversation. Unable to find processing code to create an area chart, I decided to write [...]]]></description>
			<content:encoded><![CDATA[<p>In order to visualize multiple variables in a single time series, a stacked area (sometimes called a &#8220;stream&#8221;) chart is often useful. I am currently doing research for an upcoming visualization that will trace the development of ideas through a conversation. Unable to find <a href="http://processing.org">processing</a> code to create an area chart, I decided to write my own. I imagine if I looked, there is something out there, but I also wanted something I could completely control to change the appearance of. Hopefully you will find <a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/river.pde">the source</a> useful in a project of your own.  The image below is an example of the output from the code.</p>
<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/river1.png"><img style="border: 0px initial initial;" title="river1" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/river1-360x155.png" alt="river1" width="360" height="155" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/stacked_area_chart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Van Gogh, Remixed</title>
		<link>http://lukeloeffler.com/2009/van-gogh-remixed/</link>
		<comments>http://lukeloeffler.com/2009/van-gogh-remixed/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 05:18:25 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[illustrator]]></category>
		<category><![CDATA[remix]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=357</guid>
		<description><![CDATA[When you find old van Gogh images on your computer, what could be more logical than to shatter them into a thousand abstract pieces and rearrange?
This image was the first experimenting with this process. Pretty ugly. I don&#8217;t know what I was going for. It was late.

The second in the series came from a cell image. [...]]]></description>
			<content:encoded><![CDATA[<p>When you find old van Gogh images on your computer, what could be more logical than to shatter them into a thousand abstract pieces and rearrange?</p>
<p>This image was the first experimenting with this process. Pretty ugly. I don&#8217;t know what I was going for. It was late.</p>
<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/vg_remix-02.png"><img style="border: 0px initial initial;" title="vg_remix-02" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/vg_remix-02-220x360.png" alt="vg_remix-02" width="220" height="360" /></a></p>
<p>The second in the series came from a <a href="http://www.flickr.com/photos/ukle/3799782642/">cell image</a>. The fragments from this image seemed to lend themselves to new kinds of creatures. Or maybe it was just the weather, or what I had for dinner. Who knows.</p>
<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/abstract-03.png"><img style="border: 0px initial initial;" title="abstract-03" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/abstract-03.png" alt="abstract-03" width="484" height="161" /></a></p>
<p>And next, tasty:</p>
<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/abstract4-04.png"><img class="alignnone size-full wp-image-364" title="abstract4-04" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/abstract4-04.png" alt="abstract4-04" width="250" height="168" /></a></p>
<p>Finally, some abstract patterns (one friend saw a headless, demonic horseman–wow):</p>
<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/pattern-05.png"><img class="alignnone size-medium wp-image-365" title="pattern-05" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/pattern-05-360x289.png" alt="pattern-05" width="360" height="289" /></a></p>
<p>And finally, these are some fragments from another van gogh, which I decided to turn into a fake map of somewhere.</p>
<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/fake_scand-01.png"><img style="border: 0px initial initial;" title="fake_scand-01" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/fake_scand-01-360x236.png" alt="fake_scand-01" width="360" height="236" /></a></p>
<p>I think I like this process for the same reasons I enjoyed shuffling around scraps of paper on my desk, or playing with my mashed potatoes as a kid.  Creating meaning from the abstract.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/van-gogh-remixed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Color of Rhyme</title>
		<link>http://lukeloeffler.com/2009/the-color-of-rhyme/</link>
		<comments>http://lukeloeffler.com/2009/the-color-of-rhyme/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 02:42:57 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[linguistics]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=344</guid>
		<description><![CDATA[Over the last few weeks I&#8217;ve been exploring language and words and how to deal with them algorithmically. Lately I&#8217;ve been thinking about ways to visualize various aspects of language, and one of the first that came to mind was the idea of representing the sound of words with color.
I am using the Carnegie Mellon [...]]]></description>
			<content:encoded><![CDATA[<p>Over the last few weeks I&#8217;ve been exploring language and words and how to deal with them algorithmically. Lately I&#8217;ve been thinking about ways to visualize various aspects of language, and one of the first that came to mind was the idea of representing the sound of words with color.</p>
<p>I am using the Carnegie Mellon Pronouncing Dictionary to encode each word. The CMUPD provides a list of 39 phonemes, the unique sounds that comprise spoken English. These are as follows:</p>
<div style="height: 150px; width: 300px; overflow-x: hidden; overflow-y: scroll;">
<pre>Phoneme Example Translation
AA	odd     AA D
AE	at	AE T
AH	hut	HH AH T
AO	ought	AO T
AW	cow	K AW
AY	hide	HH AY D
B 	be	B IY
CH	cheese	CH IY Z
D 	dee	D IY
DH	thee	DH IY
EH	Ed	EH D
ER	hurt	HH ER T
EY	ate	EY T
F 	fee	F IY
G 	green	G R IY N
HH	he	HH IY
IH	it	IH T
IY	eat	IY T
JH	gee	JH IY
K 	key	K IY
L 	lee	L IY
M 	me	M IY
N 	knee	N IY
NG	ping	P IH NG
OW	oat	OW T
OY	toy	T OY
P 	pee	P IY
R 	read	R IY D
S 	sea	S IY
SH	she	SH IY
T 	tea	T IY
TH	theta	TH EY T AH
UH	hood	HH UH D
UW	two	T UW
V 	vee	V IY
W 	we	W IY
Y 	yield	Y IY L D
Z 	zee	Z IY
ZH	seizure	S IY ZH ER</pre>
</div>
<p>Initially I gave each phoneme a different hue (from 1-360 degrees) by spreading each phoneme out on the color wheel equidistantly. Using this mapping, the phrase &#8220;Who knew sniffing glue could give you the flu?&#8221; translates to the following image: <a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/phrase1.png"><img class="alignnone size-full wp-image-345" title="phrase1" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/phrase1.png" alt="phrase1" width="215" height="23" /></a>.  You can clearly see the phoneme UW in magenta appearing at the end of each word.  Unfortunately, there is a lot of visual noise introduced by displaying all the other phonemes.</p>
<p>Realizing not all phonemes are going to be equally represented in the corpus, I decided to find the distribution of each. The sound AH (the &#8220;uhh&#8221; in the word &#8220;hut&#8221;) is the  most commonly occurring, accounting for nearly 10% of phonemes (this may be different if the most common 10% of words are analyzed, haven&#8217;t looked). This also happens to answer the question I asked my linguistics studies cousin at Christmas dinner some years back after doing imitations of other languages: &#8220;So, what does a non-English speaker hear when an American speaks?&#8221; It sounds like the answer may be &#8220;uhh&#8230; duh.. buh&#8230; fuh.&#8221;</p>
<div style="height: 150px; width: 300px; overflow-x: hidden; overflow-y: scroll;">
<pre>Phon.   Count   Prob.
AH	70564	0.0938934151927
N	53577	0.0712902826622
L	44148	0.0587439274124
S	43349	0.0576807671786
T	41698	0.0554839241923
R	40794	0.0542810495348
K	38174	0.0507948420096
IH	33779	0.0449467954168
IY	30957	0.0411918039527
D	28491	0.0379105109157
M	26330	0.0350350550142
ER	25871	0.0344243033905
EH	24564	0.0326851914686
Z	23955	0.0318748478111
AA	22175	0.0295063556757
AE	19151	0.0254825802726
B	18943	0.0252058126523
P	17305	0.0230262676423
OW	17147	0.0228160306999
G	12248	0.0162973548733
F	12147	0.0161629629038
EY	11851	0.0157691012903
AO	10059	0.0133846417922
AY	9838	0.0130905761956
V	9349	0.0124399061651
NG	8692	0.0115656930567
UW	8579	0.0114153337245
HH	8439	0.0112290478262
W	7737	0.0102949571077
SH	7730	0.0102856428128
JH	5461	0.00726648064689
Y	4392	0.00584405475209
CH	4378	0.00582542616226
AW	2932	0.00390135895563
TH	2597	0.00345560341329
UH	2021	0.00268917000318
OY	1124	0.00149560964056
DH	504	0.000670629233846
ZH	482	0.000641355735543</pre>
</div>
<p>The next step is to take the frequency distribution into account&#8230; Before diving any farther into palette selection, I created a simple <a href="http://lukeloeffler.com/labs/WordDna.html">test application</a> which you may play with (though be warned, it may be broken and may be an older version).</p>
<p>In this screen shot, syllable stress was taken into account as I experiment with the pre-attentive characteristic of height to aid visualization.<br />
<a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/Safari.png"><img src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/Safari.png" alt="test with stress" title="test with stress" width="423" height="149" class="alignnone size-full wp-image-350" /></a></p>
<p>In the following version the previous phrase was repeated with a palette restricted to vowels only and colors assigned according to probability. Phonemes with a higher rate of occurrence received hues that were more distinct from others.<br />
<a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/Safari1.png"><img src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/08/Safari1.png" alt="palette restriction" title="palette restriction" width="413" height="40" class="alignnone size-full wp-image-353" /></a></p>
<p>This change appears to have improved the legibility somewhat. More experimentation will be necessary.  I suspect this linear format will be a failed experiment. It seems there is little improvement in recognition of rhyme, as the viewer must use working memory to hold what amounts to merely a new representation of sound rather than use pre-attentive factors to quickly match sounds together.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/the-color-of-rhyme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gesture</title>
		<link>http://lukeloeffler.com/2009/gesture/</link>
		<comments>http://lukeloeffler.com/2009/gesture/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 03:40:34 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[gallery]]></category>
		<category><![CDATA[dance]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=320</guid>
		<description><![CDATA[In this short animation of a dancer, a series of frames is rendered as gestural sketches.]]></description>
			<content:encoded><![CDATA[<p>Gesture is an animation generated by custom video processing software that seeks to unite the movements of dance and drawing by distilling the dancer&#8217;s poses into a sequence fluid lines. As a spotlight follows the dancer across the new stage, indications of movement are left behind by soft erased lines.</p>
<p><object classid="clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b" width="320" height="215" codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"><param name="autoplay" value="false" /><param name="src" value="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/07/master-comp.mp4" /><embed type="video/quicktime" width="320" height="215" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/07/master-comp.mp4" autoplay="false"></embed></object></p>
<p>The music is &#8220;Glory&#8221; by The Acorn.</p>
<p>If you&#8217;re interested in a technical description of the code, read on. The main hurdle to getting this completed was implementing a fast &#8220;nearest neighbor&#8221; system. From the chroma-key footage (&#8221;green screen&#8221; as it&#8217;s often called), I threshold it (which means turn it to black and white). Next, I perform edge detection which leaves just the outline to the dancer. By altering the edge detector&#8217;s &#8220;kernel,&#8221; a mathematical term for a table of numbers, I can degrade the outline so it is a series of dots rather than one solid line. Next, I go through the image and make note of the locations of all the points. All that&#8217;s left to do is to connect them with a continuous line. However, if you simply connect the dots in the order they were found (top to bottom, left to right), you will get a zig-zag line that fills the area of the dancer. The next logical step is to take a starting point and ask for it&#8217;s nearest neighbor and connect the two. Then continue the line to the nearest neighbor after that, and so on. Unfortunately, this naive approach does not scale well and takes an enormous amount of time to compute. Enter the <a href="http://en.wikipedia.org/wiki/Kd-tree">KD Tree</a>, a method of storing the points for fast retrieval. I had started to write my own implementation last year and got distracted. Thankfully, I found a simple <a href="http://www.cs.wlu.edu/~levy/software/kd/">implementation</a> for Java which worked perfectly. It&#8217;s beautiful to see a series of techniques converge to produce something entirely new.</p>
<p>The source code is provided in two files: <a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/07/dancers_outlined.pde">dancers_outlined.pde</a> and <a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/07/Tree.java">Tree.java</a> for reference. Please be warned&#8211;it is very rough and not intended for public consumption, although I tried to comment as much as possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/gesture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/07/master-comp.mp4" length="3807034" type="video/mp4" />
		</item>
		<item>
		<title>Natural Language Processing</title>
		<link>http://lukeloeffler.com/2009/natural-language-processing/</link>
		<comments>http://lukeloeffler.com/2009/natural-language-processing/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 05:07:08 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=314</guid>
		<description><![CDATA[I have become increasingly interested in tools to perform natural language processing. So much of how we approach and see problems is tied up in the words we find to describe them. I am currently exploring ways to use language to help define and understand problems as well as get out of creative blocks.
Below are [...]]]></description>
			<content:encoded><![CDATA[<p>I have become increasingly interested in tools to perform natural language processing. So much of how we approach and see problems is tied up in the words we find to describe them. I am currently exploring ways to use language to help define and understand problems as well as get out of creative blocks.</p>
<p>Below are a few useful tools:</p>
<p>Princeton&#8217;s <a href="http://wordnet.princeton.edu/">Wordnet</a> is a massive linguistic database containing not just definitions, but how words are related to each other.</p>
<p>The Python <a href="http://www.nltk.org/">Natural Language Toolkit</a>, which provides tools for parsing and understanding natural language semantics.</p>
<p>The Carnegie Mellon <a href="http://www.speech.cs.cmu.edu/cgi-bin/cmudict">Pronouncing Dictionary</a>, which breaks words down into their phonemes, providing information regarding pronouncing, rhyming, and syllable counts.</p>
<p>Having found no simple resource to provide syllable counts for common words, I want to share a quick solution I wrote in Python, which uses the CMU dictionary. Simply download the dictionary to the same directory as this script, naming it cmu_pron.txt.</p>
<pre>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">f = open("cmu_pron.txt")</div>

f = open("cmu_pron.txt")
lines = f.readlines()
f.close()
words = {}

for line in lines:
	pieces = line.split()
	if pieces[0] == ";;;":
		continue
	words[pieces[0]] = pieces[1:]

def num_syllables(word):
	global words
	key = word.upper()
	plist = words[key]
	return len(filter(lambda c: c in ("0","1","2"),"".join(plist)))

print "alphabet: %s" % num_syllables("alphabet")</pre>
<p>The result for alphabet is indeed 3. There are probably more efficient ways to do this, but it gets the job done.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/natural-language-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nest</title>
		<link>http://lukeloeffler.com/2009/nest/</link>
		<comments>http://lukeloeffler.com/2009/nest/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 22:27:24 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[abstract]]></category>
		<category><![CDATA[graphic]]></category>
		<category><![CDATA[illustrator]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=310</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/07/nest-01.jpg"><img class="alignnone size-full wp-image-309" title="nest-01" src="http://lukeloeffler.com/wordpress/wp-content/uploads/2009/07/nest-01.jpg" alt="nest-01" width="699" height="715" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/nest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enemies of Creating: Consumption, Distraction, and Demoralization</title>
		<link>http://lukeloeffler.com/2009/enemies-of-creating/</link>
		<comments>http://lukeloeffler.com/2009/enemies-of-creating/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 10:20:08 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[creating]]></category>
		<category><![CDATA[creativity]]></category>
		<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://lukeloeffler.com/?p=304</guid>
		<description><![CDATA[Everyone has one of those days at times—you reach the end and wonder where all your time went. Worse, you realize you haven&#8217;t done anything productive at all. And worse still, some of us can look back not just to days, but months or longer periods.
With increasing regularity I have heard the following message in [...]]]></description>
			<content:encoded><![CDATA[<p>Everyone has one of those days at times—you reach the end and wonder where all your time went. Worse, you realize you haven&#8217;t done anything productive at all. And worse still, some of us can look back not just to days, but months or longer periods.</p>
<p>With increasing regularity I have heard the following message in a number of ways from a variety of sources: the key to producing is to… produce! In the context of research, the academic world has long used the phrase &#8220;publish or perish.&#8221; In the realm of design, my architecture studio instructor would tell me to crank out ten iterations of an idea by the next morning—quantity, not quality. Merlin Mann <a href="http://www.maximumfun.org/sound-young-america/maxfuncon-merlin-mann-doing-creative-work-sound-young-america" target="_blank">spoke</a> about the distinction between doing and thinking about doing. Seth Godin, in a talk he gave at the NYC <a href="http://treehouse-nyc.com/jelly-talks-w-seth-godin" target="_blank">Jelly</a> at the Brooklyn Treehouse, said that today we are not faced with a scarcity of ideas, production capability, marketing opportunities, or capital, but an an ability to &#8220;ship,&#8221; i.e. get work done and out the door. In the new book on the psychology of focus, <em>Rapt</em>, Gallagher argues that an increase in distractions has lead to a decrease in the ability to focus, and without steady focus we are unable to finish work.</p>
<p>So why has this become a recurring theme so recently? Perhaps it is an increased sensitivity to the message due to a period of declining output. Going back farther, I would pin it to the massive and sudden increase in the volume and availability of content, tools, and ideas on the internet. The same system that has catalyzed so much creative work and research in recent years has also sapped the ability of so many to create. I believe it works in several different ways.</p>
<p>First, it is easier than ever to simply waste inordinate amounts of time passively consuming content or talking to friends and acquaintances. We can still feel productive because we are learning, experiencing new things, and forming connections. Secondly, we waste more time than ever deciding what to do and how to do it. With so many new mediums, ideas, forms of expression, tools, platforms, and methods, it easier than ever to get distracted. Lastly, the quality and complexity of things being created today is greater than ever. Much of this is due to the availability of information, increased refinement of tools, and increased collaboration, bringing together the strength of disparate components in symphony. Viewed in the wrong way, as competition rather than inspiration, great work can be demoralizing.</p>
<p>How do you overcome the problem of production? Over the course of a long drive with long-time friend and software developer Jeff, we both agreed that setting deadlines and sticking to them is critical—the shorter the better. When you give yourself too much time to complete something, you will end up second-guessing yourself  and spending far too much time thinking about process, rather than doing work. Time spent will expand to fill the time given. Try giving yourself one day to create something rather than one week, knowing in advance you will probably have to throw it away. You will learn more, gain momentum, and start to realize you&#8217;re better equipped than you thought. Additionally, try to schedule work with someone else in advance. This may mean working with a partner or &#8220;foolishly&#8221; committing to a project you don&#8217;t feel quite ready for. Either way, you&#8217;re helping your future self avoid weaseling out. Lastly, turn down the volume on distractions. Limit your exposure to media streams, social bookmarking sites, RSS feed readers, and the like to once a week or less to limit the factors of distraction and demoralization. Instead, turn to first inspirations—the world around you.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukeloeffler.com/2009/enemies-of-creating/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
