<?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/"
		xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>LEESEAN.NET &#187; ICM</title>
	<atom:link href="http://leesean.net/category/icm/feed/" rel="self" type="application/rss+xml" />
	<link>http://leesean.net</link>
	<description>The Life of an Artist-Activist-Musician-Nerd</description>
	<lastBuildDate>Wed, 01 Feb 2012 14:09:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<copyright>2006-2009 </copyright>
	<managingEditor>ls@leesean.net (LEESEAN.NET)</managingEditor>
	<webMaster>ls@leesean.net (LEESEAN.NET)</webMaster>
	<ttl>1440</ttl>
	<image>
		<url>http://leesean.net/wp-content/plugins/podpress/images/powered_by_podpress.png</url>
		<title>LEESEAN.NET</title>
		<link>http://leesean.net</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>the adventures of lee-sean: life, media, music, art, politics, activism, style, travel, cuisine, and more...</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &#38; Culture" />
	<itunes:author>LEESEAN.NET</itunes:author>
	<itunes:owner>
		<itunes:name>LEESEAN.NET</itunes:name>
		<itunes:email>ls@leesean.net</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://leesean.net/wp-content/plugins/podpress/images/powered_by_podpress.png" />
		<item>
		<title>ICM Final: Post-Modern Poster Child (Musical Typeface Reinvention)</title>
		<link>http://leesean.net/2008/12/02/icm-final-source-code/</link>
		<comments>http://leesean.net/2008/12/02/icm-final-source-code/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 19:03:40 +0000</pubDate>
		<dc:creator>leesean</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[HEPNOVA]]></category>
		<category><![CDATA[ICM]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[NYU]]></category>
		<category><![CDATA[Podcasting]]></category>
		<category><![CDATA[Podcasts]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[YouTube]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://leesean.net/?p=1397</guid>
		<description><![CDATA[Post-Modern Poster Child (Musical Typewriter Mix) from lee-sean on Vimeo. [Blip.tv] [YouTube] [Vimeo] I presented my final project for Intro to Computational Media today.  Building on the work I did with the Musical Typewriter, I ended up making some last minute tweaks to my &#8220;musical typeface,&#8221; which consists of audio samples corresponding to each letter [...]]]></description>
			<content:encoded><![CDATA[<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="377" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=2414146&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="500" height="377" src="http://vimeo.com/moogaloop.swf?clip_id=2414146&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<a href="http://vimeo.com/2414146">Post-Modern Poster Child (Musical Typewriter Mix)</a> from <a href="http://vimeo.com/hepnova">lee-sean</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p><a href="http://blip.tv/file/1532628/">[Blip.tv]</a> <a href="http://www.youtube.com/watch?v=GdgqCgwQrL0">[YouTube]</a> <a href="http://vimeo.com/2414146">[Vimeo]</a></p>
<p>I presented my final project for <a href="http://itp.nyu.edu/varwiki/Syllabus/ICM-Danny-Rozin-F08">Intro to Computational Media</a> today.  Building on the work I did with the <a href="http://leesean.net/2008/11/13/icm-final-in-progress-musical-typewriter/">Musical Typewriter</a>, I ended up making some last minute tweaks to my &#8220;musical typeface,&#8221; which consists of audio samples corresponding to each letter of the alphabet.  Originally I had used all single-hit percussion sounds, but I reworked the alphabet to include short musical phrases or gestures, and brought in wind and string instrument samples for greater musicality and richness.  The final version of my <a href="http://processing.org/">Processing</a> program reads a text file and &#8220;translates&#8221; the text into music by playing back the samples corresponding to the letters of the words as musical phrase &#8220;cluster.&#8221;</p>
<p><img class="alignnone size-full wp-image-1403" title="existential_pomo_posterchild_web500" src="http://leesean.net/wp-content/uploads/2008/12/existential_pomo_posterchild_web500.jpg" alt="" /></p>
<p>While playing back a text as a song, the <a href="http://processing.org/">Processing </a>sketch also simultaneously displays the word corresponding to the musical sample cluster being played and visualizes the frequency waves of the music on the screen.  Refer to the screenshot above.</p>
<p>For my in-class performance, I used the lyrics to the <a href="http://www.hepnova.com/music.php?lyrics&amp;artist=Hepnova&amp;album=Tourist%20You%20Are%20The%20Terrorist&amp;track=Post-Modern%20Poster%20Child">HEPNOVA track Post-Modern Poster Child</a> and reinterpreted words through the Musical Typewriter.  <a href="http://leesean.net/podcast/Post-Modern%20Posterchild%20(Musical%20Typeface%20Reinvention).mp3">[MP3]</a> <a href="http://leesean.net/podcast/Post-Modern%20Posterchild%20(Musical%20Typeface%20Reinvention).aif">[AIFF]</a></p>
<p>During my presentation, I also <a href="http://www.youtube.com/watch?v=oHg5SJYRHA0">Rick Rolled</a> the class with <a href="http://www.youtube.com/watch?v=oHg5SJYRHA0">Rick Astley&#8217;s</a> immortal lyrics played through my program.</p>
<p>Source code after the jump.<span id="more-1397"></span></p>
<p>My source code for my ICM final project, a self-playing version of the <a href="http://leesean.net/2008/11/13/icm-final-in-progress-musical-typewriter/">Musical Typewriter</a> <a href="http://leesean.net/2008/11/13/icm-final-musical-typewriter-take-2/">[2]</a> <a href="http://leesean.net/2008/11/14/icm-final-musical-typewriter-screenshot/">[3]</a>.</p>
<blockquote><p>import ddf.minim.signals.*;<br />
import ddf.minim.*;<br />
import ddf.minim.analysis.*;<br />
import ddf.minim.effects.*;<br />
import processing.video.*;</p>
<p>// Declare MovieMaker object<br />
//MovieMaker mm;<br />
Minim minim;<br />
WaveformRenderer waveform;<br />
//AudioSample objects for each letter of the alphabet<br />
AudioSample play_a;<br />
AudioSample play_b;<br />
AudioSample play_c;<br />
AudioSample play_d;<br />
AudioSample play_e;<br />
AudioSample play_f;<br />
AudioSample play_g;<br />
AudioSample play_h;<br />
AudioSample play_i;<br />
AudioSample play_j;<br />
AudioSample play_k;<br />
AudioSample play_l;<br />
AudioSample play_m;<br />
AudioSample play_n;<br />
AudioSample play_o;<br />
AudioSample play_p;<br />
AudioSample play_q;<br />
AudioSample play_r;<br />
AudioSample play_s;<br />
AudioSample play_t;<br />
AudioSample play_u;<br />
AudioSample play_v;<br />
AudioSample play_w;<br />
AudioSample play_x;<br />
AudioSample play_y;<br />
AudioSample play_z;</p>
<p>// Variable to store text currently being typed<br />
//String typing = &#8220;&#8221;;<br />
String[] lyrics;<br />
// Variable to store saved text when return is hit<br />
String saved = &#8220;&#8221;;<br />
int i;<br />
int counter = 0;  //frame counter for vibration<br />
int play = 0;</p>
<p>void setup()<br />
{<br />
minim = new Minim(this);<br />
size(1440,800);<br />
//mm = new MovieMaker(this, width, height, &#8220;pomo.mov&#8221; , 30, MovieMaker.H263,<br />
//MovieMaker.HIGH);<br />
background(0);<br />
textFont(createFont(&#8220;Courier&#8221;, 60));<br />
textAlign(CENTER);</p>
<p>play_a = minim.loadSample(&#8220;A.mp3&#8243;, 1440);<br />
play_b = minim.loadSample(&#8220;B.mp3&#8243;, 1440);<br />
play_c = minim.loadSample(&#8220;C.mp3&#8243;, 1440);<br />
play_d = minim.loadSample(&#8220;D.mp3&#8243;, 1440);<br />
play_e = minim.loadSample(&#8220;E.mp3&#8243;, 1440);<br />
play_f = minim.loadSample(&#8220;F.mp3&#8243;, 1440);<br />
play_g = minim.loadSample(&#8220;G.mp3&#8243;, 1440);<br />
play_h = minim.loadSample(&#8220;H.mp3&#8243;, 1440);<br />
play_i = minim.loadSample(&#8220;I.mp3&#8243;, 1440);</p>
<p>play_j = minim.loadSample(&#8220;J.mp3&#8243;, 1440);<br />
play_k = minim.loadSample(&#8220;K.mp3&#8243;, 1440);<br />
play_l = minim.loadSample(&#8220;L.mp3&#8243;, 1440);<br />
play_m = minim.loadSample(&#8220;M.mp3&#8243;, 1440);<br />
play_n = minim.loadSample(&#8220;N.mp3&#8243;, 1440);<br />
play_o = minim.loadSample(&#8220;O.mp3&#8243;, 1440);<br />
play_p = minim.loadSample(&#8220;P.mp3&#8243;, 1440);<br />
play_q = minim.loadSample(&#8220;Q.mp3&#8243;, 1440);<br />
play_r = minim.loadSample(&#8220;R.mp3&#8243;, 1440);<br />
play_s = minim.loadSample(&#8220;S.mp3&#8243;, 1440);<br />
play_t = minim.loadSample(&#8220;T.mp3&#8243;, 1440);<br />
play_u = minim.loadSample(&#8220;U.mp3&#8243;, 1440);<br />
play_v = minim.loadSample(&#8220;V.mp3&#8243;, 1440);<br />
play_w = minim.loadSample(&#8220;W.mp3&#8243;, 1440);<br />
play_x = minim.loadSample(&#8220;X.mp3&#8243;, 1440);<br />
play_y = minim.loadSample(&#8220;Y.mp3&#8243;, 1440);<br />
play_z = minim.loadSample(&#8220;Z.mp3&#8243;, 1440);</p>
<p>waveform = new WaveformRenderer();<br />
play_a.addListener(waveform);<br />
play_b.addListener(waveform);<br />
play_c.addListener(waveform);<br />
play_d.addListener(waveform);<br />
play_e.addListener(waveform);<br />
play_f.addListener(waveform);<br />
play_g.addListener(waveform);<br />
play_h.addListener(waveform);<br />
play_i.addListener(waveform);<br />
play_j.addListener(waveform);<br />
play_k.addListener(waveform);<br />
play_l.addListener(waveform);<br />
play_m.addListener(waveform);<br />
play_n.addListener(waveform);<br />
play_o.addListener(waveform);<br />
play_p.addListener(waveform);<br />
play_q.addListener(waveform);<br />
play_r.addListener(waveform);<br />
play_s.addListener(waveform);<br />
play_t.addListener(waveform);<br />
play_u.addListener(waveform);<br />
play_v.addListener(waveform);<br />
play_w.addListener(waveform);<br />
play_x.addListener(waveform);<br />
play_y.addListener(waveform);<br />
play_z.addListener(waveform);</p>
<p>noStroke();<br />
lyrics = loadStrings(&#8220;lyrics.txt&#8221;);<br />
i = 0;<br />
background(0);<br />
}</p>
<p>void draw()<br />
{<br />
if (play == 1){<br />
counter = (counter+1)%25;<br />
noStroke();<br />
fill(255);<br />
//text (lyrics[i],width/2, height/2);<br />
//mm.addFrame();<br />
if (counter == 0) {<br />
if (i &lt; lyrics.length)<br />
{<br />
background(0);<br />
text (lyrics[i],width/2, height/2);<br />
int wordLength = lyrics[i].length();<br />
for (int j=0; j &lt; wordLength; j++)<br />
{<br />
for(int k=0; k &lt; wordLength; k++)<br />
{<br />
char letter = lyrics[i].charAt(k);<br />
playLetter(letter);<br />
waveform.draw();<br />
}<br />
}<br />
waveform.draw();<br />
i++;<br />
}<br />
else {<br />
background(0);<br />
//mm.finish();<br />
//noLoop();<br />
}<br />
}<br />
}<br />
}</p>
<p>void playLetter (char letter_)<br />
{<br />
if ((letter_ == &#8216;a&#8217;) || (letter_ == &#8216;A&#8217;))<br />
{<br />
play_a.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;b&#8217;) || (letter_ == &#8216;B&#8217;))<br />
{<br />
play_b.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;c&#8217;) || (letter_ == &#8216;C&#8217;))<br />
{<br />
play_c.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;d&#8217;) || (letter_ == &#8216;D&#8217;))<br />
{<br />
play_d.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;e&#8217;) || (letter_ == &#8216;E&#8217;))<br />
{<br />
play_e.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;f&#8217;) || (letter_ == &#8216;F&#8217;))<br />
{<br />
play_f.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;g&#8217;) || (letter_ == &#8216;G&#8217;))<br />
{<br />
play_g.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;h&#8217;) || (letter_ == &#8216;H&#8217;))<br />
{<br />
play_h.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;i&#8217;) || (letter_ == &#8216;I&#8217;))<br />
{<br />
play_i.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;j&#8217;) || (letter_ == &#8216;J&#8217;))<br />
{<br />
play_j.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;k&#8217;) || (letter_ == &#8216;K&#8217;))<br />
{<br />
play_k.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;l&#8217;) || (letter_ == &#8216;L&#8217;))<br />
{<br />
play_l.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;m&#8217;) || (letter_ == &#8216;M&#8217;))<br />
{<br />
play_m.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;n&#8217;) || (letter_ == &#8216;N&#8217;))<br />
{<br />
play_n.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;o&#8217;) || (letter_ == &#8216;O&#8217;))<br />
{<br />
play_o.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;p&#8217;) || (letter_ == &#8216;P&#8217;))<br />
{<br />
play_p.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;q&#8217;) || (letter_ == &#8216;Q&#8217;))<br />
{<br />
play_q.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;r&#8217;) || (letter_ == &#8216;R&#8217;))<br />
{<br />
play_r.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;s&#8217;) || (letter_ == &#8216;S&#8217;))<br />
{<br />
play_s.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;t&#8217;) || (letter_ == &#8216;T&#8217;))<br />
{<br />
play_t.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;u&#8217;) || (letter_ == &#8216;U&#8217;))<br />
{<br />
play_u.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;v&#8217;) || (letter_ == &#8216;V&#8217;))<br />
{<br />
play_v.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;w&#8217;) || (letter_ == &#8216;W&#8217;))<br />
{<br />
play_w.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;x&#8217;) || (letter_ == &#8216;X&#8217;))<br />
{<br />
play_x.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;y&#8217;) || (letter_ == &#8216;Y&#8217;))<br />
{<br />
play_y.trigger();<br />
}</p>
<p>if ((letter_ == &#8216;z&#8217;) || (letter_ == &#8216;Z&#8217;))<br />
{<br />
play_z.trigger();<br />
}<br />
}</p>
<p>void stop()<br />
{<br />
play_a.close();<br />
minim.stop();<br />
super.stop();<br />
}</p>
<p>class WaveformRenderer implements AudioListener<br />
{<br />
private float[] left;<br />
private float[] right;</p>
<p>WaveformRenderer()<br />
{<br />
left = null;<br />
right = null;<br />
}</p>
<p>synchronized void samples(float[] samp)<br />
{<br />
left = samp;<br />
}</p>
<p>synchronized void samples(float[] sampL, float[] sampR)<br />
{<br />
left = sampL;<br />
right = sampR;<br />
}</p>
<p>synchronized void draw()<br />
{<br />
// we&#8217;ve got a stereo signal if right or left are not null<br />
if ( left != null &amp;&amp; right != null )<br />
{<br />
noFill();<br />
stroke(255);<br />
beginShape();<br />
for ( int i = 0; i &lt; left.length; i++ )<br />
{<br />
vertex(i, height/4 + left[i]*120);<br />
}<br />
endShape();<br />
beginShape();<br />
for ( int i = 0; i &lt; right.length; i++ )<br />
{<br />
vertex(i, 3*(height/4) + right[i]*120);<br />
}<br />
endShape();<br />
}<br />
else if ( left != null )<br />
{<br />
noFill();<br />
stroke(255);<br />
beginShape();<br />
for ( int i = 0; i &lt; left.length; i++ )<br />
{<br />
vertex(i, height/2 + left[i]*120);<br />
}<br />
endShape();<br />
}<br />
}<br />
}</p>
<p>void keyPressed(){<br />
play = 1;<br />
}</p></blockquote>
<div id="crp_related"><h4>Related Posts</h4><ul><li><a href="http://leesean.net/2008/11/14/icm-final-musical-typewriter-screenshot/" rel="bookmark" class="crp_title">ICM Final: Musical Typewriter Screenshot</a></li><li><a href="http://leesean.net/2008/11/13/icm-final-musical-typewriter-take-2/" rel="bookmark" class="crp_title">ICM Final: Musical Typewriter &#8211; take 2</a></li><li><a href="http://leesean.net/2008/12/16/headbangerphones-final/" rel="bookmark" class="crp_title">head(banger)phones &#8211; FINAL</a></li><li><a href="http://leesean.net/2008/11/13/icm-final-in-progress-musical-typewriter/" rel="bookmark" class="crp_title">ICM Final in Progress: Musical Typewriter</a></li><li><a href="http://leesean.net/2008/12/06/headbangerphones-part-2/" rel="bookmark" class="crp_title">head(banger)phones part 2</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://leesean.net/2008/12/02/icm-final-source-code/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
			<enclosure url="http://leesean.net/podcast/Post-Modern%20Posterchild%20(Musical%20Typeface%20Reinvention).mp3" length="1" type="audio/mpeg" />
		<itunes:duration>0:00:01</itunes:duration>
		<itunes:subtitle>
Post-Modern Poster Child (Musical Typewriter Mix) from lee-sean on Vimeo.
[Blip.tv] [YouTube] [Vimeo]
I presented my final project for Intro to Computational Media today.  Building on the work I did with the Musical Typewriter, I ended up making so[...]</itunes:subtitle>
		<itunes:summary>
Post-Modern Poster Child (Musical Typewriter Mix) from lee-sean on Vimeo.
[Blip.tv] [YouTube] [Vimeo]
I presented my final project for Intro to Computational Media today.  Building on the work I did with the Musical Typewriter, I ended up making some last minute tweaks to my &#8220;musical typeface,&#8221; which consists of audio samples corresponding to each letter of the alphabet.  Originally I had used all single-hit percussion sounds, but I reworked the alphabet to include short musical phrases or gestures, and brought in wind and string instrument samples for greater musicality and richness.  The final version of my Processing program reads a text file and &#8220;translates&#8221; the text into music by playing back the samples corresponding to the letters of the words as musical phrase &#8220;cluster.&#8221;

While playing back a text as a song, the Processing sketch also simultaneously displays the word corresponding to the musical sample cluster being played and visualizes the frequency waves of the music on the screen.  Refer to the screenshot above.
For my in-class performance, I used the lyrics to the HEPNOVA track Post-Modern Poster Child and reinterpreted words through the Musical Typewriter.  [MP3] [AIFF]
During my presentation, I also Rick Rolled the class with Rick Astley&#8217;s immortal lyrics played through my program.
Source code after the jump.
My source code for my ICM final project, a self-playing version of the Musical Typewriter [2] [3].
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import processing.video.*;
// Declare MovieMaker object
//MovieMaker mm;
Minim minim;
WaveformRenderer waveform;
//AudioSample objects for each letter of the alphabet
AudioSample play_a;
AudioSample play_b;
AudioSample play_c;
AudioSample play_d;
AudioSample play_e;
AudioSample play_f;
AudioSample play_g;
AudioSample play_h;
AudioSample play_i;
AudioSample play_j;
AudioSample play_k;
AudioSample play_l;
AudioSample play_m;
AudioSample play_n;
AudioSample play_o;
AudioSample play_p;
AudioSample play_q;
AudioSample play_r;
AudioSample play_s;
AudioSample play_t;
AudioSample play_u;
AudioSample play_v;
AudioSample play_w;
AudioSample play_x;
AudioSample play_y;
AudioSample play_z;
// Variable to store text currently being typed
//String typing = &#8220;&#8221;;
String[] lyrics;
// Variable to store saved text when return is hit
String saved = &#8220;&#8221;;
int i;
int counter = 0;  //frame counter for vibration
int play = 0;
void setup()
{
minim = new Minim(this);
size(1440,800);
//mm = new MovieMaker(this, width, height, &#8220;pomo.mov&#8221; , 30, MovieMaker.H263,
//MovieMaker.HIGH);
background(0);
textFont(createFont(&#8220;Courier&#8221;, 60));
textAlign(CENTER);
play_a = minim.loadSample(&#8220;A.mp3&#8243;, 1440);
play_b = minim.loadSample(&#8220;B.mp3&#8243;, 1440);
play_c = minim.loadSample(&#8220;C.mp3&#8243;, 1440);
play_d = minim.loadSample(&#8220;D.mp3&#8243;, 1440);
play_e = minim.loadSample(&#8220;E.mp3&#8243;, 1440);
play_f = minim.loadSample(&#8220;F.mp3&#8243;, 1440);
play_g = minim.loadSample(&#8220;G.mp3&#8243;, 1440);
play_h = minim.loadSample(&#8220;H.mp3&#8243;, 1440);
play_i = minim.loadSample(&#8220;I.mp3&#8243;, 1440);
play_j = minim.loadSample(&#8220;J.mp3&#8243;, 1440);
play_k = minim.loadSample(&#8220;K.mp3&#8243;, 1440);
play_l = minim.loadSample(&#8220;L.mp3&#8243;, 1440);
play_m = minim.loadSample(&#8220;M.mp3&#8243;, 1440);
play_n = minim.loadSample(&#8220;N.mp3&#8243;, 1440);
play_o = minim.loadSample(&#8220;O.mp3&#8243;, 1440);
play_p = minim.loadSample(&#8220;P.mp3&#8243;, 1440);
play_q = minim.loadSample(&#8220;Q.mp3&#8243;, 1440);
play_r = minim.loadSample(&#8220;R.mp3&#8243;, 1440);
play_s = minim.loadSample(&#8220;S.mp3&#8243;, 1440);
play_t = minim.loadSample(&#8220;T.mp3&#8243;, 1440);
play_u = minim.loadSample(&#8220;U.mp3&#8243;, 1440);
play_v = minim.loadSample(&#8220;V.mp3&#8243;, 1440);
play_w = minim.loadSample([...]</itunes:summary>
		<itunes:keywords>Art, Audio, DIY, HEPNOVA, ICM, ITP, Music, NYU, Podcasting, Podcasts, Video, YouTube</itunes:keywords>
		<itunes:author>ls@leesean.net</itunes:author>
		<itunes:explicit>no</itunes:explicit>
		<itunes:block>no</itunes:block>
		<enclosure url="http://leesean.net/podcast/pomoposterchild_typewriter_mix.mp3" length="1275264" type="audio/mpeg" />
		<enclosure url="http://leesean.net/podcast/pomoposterchild_typewriter_mix.aif" length="28133632" type="audio/x-aiff" />
	</item>
		<item>
		<title>ICM Final: Musical Typewriter Screenshot</title>
		<link>http://leesean.net/2008/11/14/icm-final-musical-typewriter-screenshot/</link>
		<comments>http://leesean.net/2008/11/14/icm-final-musical-typewriter-screenshot/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 08:40:42 +0000</pubDate>
		<dc:creator>leesean</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[ICM]]></category>
		<category><![CDATA[Interactive]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[NYU]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Musical Instrument]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Typewriter]]></category>

		<guid isPermaLink="false">http://leesean.net/?p=1349</guid>
		<description><![CDATA[I got the audio visualization to work.  The waves represent the audio waveforms of the percussion alphabet.  The letters fade out gradually after you type them to in order to help pace the user and to represent the &#8220;life cycle&#8221; of each note through time.  Here is a screenshot: Source code after the jump: import [...]]]></description>
			<content:encoded><![CDATA[<p>I got the audio visualization to work.  The waves represent the audio waveforms of the percussion alphabet.  The letters fade out gradually after you type them to in order to help pace the user and to represent the &#8220;life cycle&#8221; of each note through time.  Here is a screenshot:</p>
<p><img class="alignnone size-full wp-image-1350" title="typewriter" src="http://leesean.net/wp-content/uploads/2008/11/typewriter.jpg" alt="" /></p>
<p>Source code after the jump:</p>
<p><span id="more-1349"></span></p>
<blockquote><p>import ddf.minim.signals.*;<br />
import ddf.minim.*;<br />
import ddf.minim.analysis.*;<br />
import ddf.minim.effects.*;</p>
<p>Minim minim;<br />
WaveformRenderer waveform;<br />
//AudioSample objects for each letter of the alphabet<br />
AudioSample play_a;<br />
AudioSample play_b;<br />
AudioSample play_c;<br />
AudioSample play_d;<br />
AudioSample play_e;<br />
AudioSample play_f;<br />
AudioSample play_g;<br />
AudioSample play_h;<br />
AudioSample play_i;<br />
AudioSample play_j;<br />
AudioSample play_k;<br />
AudioSample play_l;<br />
AudioSample play_m;<br />
AudioSample play_n;<br />
AudioSample play_o;<br />
AudioSample play_p;<br />
AudioSample play_q;<br />
AudioSample play_r;<br />
AudioSample play_s;<br />
AudioSample play_t;<br />
AudioSample play_u;<br />
AudioSample play_v;<br />
AudioSample play_w;<br />
AudioSample play_x;<br />
AudioSample play_y;<br />
AudioSample play_z;</p>
<p>void setup()<br />
{<br />
minim = new Minim(this);<br />
size(500,500);</p>
<p>background(0);<br />
textFont(createFont(&#8220;Courier&#8221;, 50));<br />
text(&#8220;Type letters&#8221;, 50, height/2-30);<br />
text(&#8220;to play&#8221;, 50, height/2+45);</p>
<p>play_a = minim.loadSample(&#8220;A.mp3&#8243;, 512);<br />
play_b = minim.loadSample(&#8220;B.mp3&#8243;, 512);<br />
play_c = minim.loadSample(&#8220;C.mp3&#8243;, 512);<br />
play_d = minim.loadSample(&#8220;D.mp3&#8243;, 512);<br />
play_e = minim.loadSample(&#8220;E.mp3&#8243;, 512);<br />
play_f = minim.loadSample(&#8220;F.mp3&#8243;, 512);<br />
play_g = minim.loadSample(&#8220;G.mp3&#8243;, 512);<br />
play_h = minim.loadSample(&#8220;H.mp3&#8243;, 512);<br />
play_i = minim.loadSample(&#8220;I.mp3&#8243;, 512);<br />
play_j = minim.loadSample(&#8220;J.mp3&#8243;, 512);<br />
play_k = minim.loadSample(&#8220;K.mp3&#8243;, 512);<br />
play_l = minim.loadSample(&#8220;L.mp3&#8243;, 512);<br />
play_m = minim.loadSample(&#8220;M.mp3&#8243;, 512);<br />
play_n = minim.loadSample(&#8220;N.mp3&#8243;, 512);<br />
play_o = minim.loadSample(&#8220;O.mp3&#8243;, 512);<br />
play_p = minim.loadSample(&#8220;P.mp3&#8243;, 512);<br />
play_q = minim.loadSample(&#8220;Q.mp3&#8243;, 512);<br />
play_r = minim.loadSample(&#8220;R.mp3&#8243;, 512);<br />
play_s = minim.loadSample(&#8220;S.mp3&#8243;, 512);<br />
play_t = minim.loadSample(&#8220;T.mp3&#8243;, 512);<br />
play_u = minim.loadSample(&#8220;U.mp3&#8243;, 512);<br />
play_v = minim.loadSample(&#8220;V.mp3&#8243;, 512);<br />
play_w = minim.loadSample(&#8220;W.mp3&#8243;, 512);<br />
play_x = minim.loadSample(&#8220;X.mp3&#8243;, 512);<br />
play_y = minim.loadSample(&#8220;Y.mp3&#8243;, 512);<br />
play_z = minim.loadSample(&#8220;Z.mp3&#8243;, 512);</p>
<p>waveform = new WaveformRenderer();<br />
play_a.addListener(waveform);<br />
play_b.addListener(waveform);<br />
play_c.addListener(waveform);<br />
play_d.addListener(waveform);<br />
play_e.addListener(waveform);<br />
play_f.addListener(waveform);<br />
play_g.addListener(waveform);<br />
play_h.addListener(waveform);<br />
play_i.addListener(waveform);<br />
play_j.addListener(waveform);<br />
play_k.addListener(waveform);<br />
play_l.addListener(waveform);<br />
play_m.addListener(waveform);<br />
play_n.addListener(waveform);<br />
play_o.addListener(waveform);<br />
play_p.addListener(waveform);<br />
play_q.addListener(waveform);<br />
play_r.addListener(waveform);<br />
play_s.addListener(waveform);<br />
play_t.addListener(waveform);<br />
play_u.addListener(waveform);<br />
play_v.addListener(waveform);<br />
play_w.addListener(waveform);<br />
play_x.addListener(waveform);<br />
play_y.addListener(waveform);<br />
play_z.addListener(waveform);</p>
<p>textFont(createFont(&#8220;Courier&#8221;, 200));<br />
noStroke();<br />
frameRate(30);<br />
}</p>
<p>void draw()<br />
{<br />
noStroke();<br />
fill(0,0,0,20);<br />
rect(0,0,width,height);<br />
waveform.draw();<br />
}</p>
<p>void keyPressed()<br />
{<br />
fill(255);<br />
if ( key == &#8216;a&#8217;)<br />
{<br />
play_a.trigger();<br />
text(&#8220;A&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;b&#8217;)<br />
{<br />
play_b.trigger();<br />
text(&#8220;B&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;c&#8217;)<br />
{<br />
play_c.trigger();<br />
text(&#8220;C&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;d&#8217;)<br />
{<br />
play_d.trigger();<br />
text(&#8220;D&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;e&#8217;)<br />
{<br />
play_e.trigger();<br />
text(&#8220;E&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;f&#8217;)<br />
{<br />
play_f.trigger();<br />
text(&#8220;F&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;g&#8217;)<br />
{<br />
play_g.trigger();<br />
text(&#8220;G&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;h&#8217;)<br />
{<br />
play_h.trigger();<br />
text(&#8220;H&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;i&#8217;)<br />
{<br />
play_i.trigger();<br />
text(&#8220;I&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;j&#8217;)<br />
{<br />
play_j.trigger();<br />
text(&#8220;J&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;k&#8217;)<br />
{<br />
text(&#8220;K&#8221;, width/2-60, height/2+50);<br />
play_k.trigger();<br />
}</p>
<p>if ( key == &#8216;l&#8217;)<br />
{<br />
play_l.trigger();<br />
text(&#8220;L&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;m&#8217;)<br />
{<br />
text(&#8220;M&#8221;, width/2-60, height/2+50);<br />
play_m.trigger();<br />
}</p>
<p>if ( key == &#8216;n&#8217;)<br />
{<br />
play_n.trigger();<br />
text(&#8220;N&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;o&#8217;)<br />
{<br />
play_o.trigger();<br />
text(&#8220;O&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;p&#8217;)<br />
{<br />
play_p.trigger();<br />
text(&#8220;P&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;q&#8217;)<br />
{<br />
play_q.trigger();<br />
text(&#8220;Q&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;r&#8217;)<br />
{<br />
play_r.trigger();<br />
text(&#8220;R&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;s&#8217;)<br />
{<br />
play_s.trigger();<br />
text(&#8220;S&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;t&#8217;)<br />
{<br />
play_t.trigger();<br />
text(&#8220;T&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;u&#8217;)<br />
{<br />
play_u.trigger();<br />
text(&#8220;U&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;v&#8217;)<br />
{<br />
play_v.trigger();<br />
text(&#8220;V&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;w&#8217;)<br />
{<br />
play_w.trigger();<br />
text(&#8220;W&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;x&#8217;)<br />
{<br />
play_x.trigger();<br />
text(&#8220;X&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;y&#8217;)<br />
{<br />
play_y.trigger();<br />
text(&#8220;Y&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if ( key == &#8216;z&#8217;)<br />
{<br />
play_z.trigger();<br />
text(&#8220;Z&#8221;, width/2-60, height/2+50);<br />
}</p>
<p>if (key == &#8216; &#8216;)<br />
{<br />
fill(0,0,0,20);<br />
noStroke();<br />
rect(0,0,width,height);<br />
}<br />
}</p>
<p>void stop()<br />
{<br />
play_a.close();<br />
minim.stop();<br />
super.stop();<br />
}</p>
<p>class WaveformRenderer implements AudioListener<br />
{<br />
private float[] left;<br />
private float[] right;</p>
<p>WaveformRenderer()<br />
{<br />
left = null;<br />
right = null;<br />
}</p>
<p>synchronized void samples(float[] samp)<br />
{<br />
left = samp;<br />
}</p>
<p>synchronized void samples(float[] sampL, float[] sampR)<br />
{<br />
left = sampL;<br />
right = sampR;<br />
}</p>
<p>synchronized void draw()<br />
{<br />
// we&#8217;ve got a stereo signal if right or left are not null<br />
if ( left != null &amp;&amp; right != null )<br />
{<br />
noFill();<br />
stroke(255);<br />
beginShape();<br />
for ( int i = 0; i &lt; left.length; i++ )<br />
{<br />
vertex(i, height/4 + left[i]*120);<br />
}<br />
endShape();<br />
beginShape();<br />
for ( int i = 0; i &lt; right.length; i++ )<br />
{<br />
vertex(i, 3*(height/4) + right[i]*120);<br />
}<br />
endShape();<br />
}<br />
else if ( left != null )<br />
{<br />
noFill();<br />
stroke(255);<br />
beginShape();<br />
for ( int i = 0; i &lt; left.length; i++ )<br />
{<br />
vertex(i, height/2 + left[i]*120);<br />
}<br />
endShape();<br />
}<br />
}<br />
}</p></blockquote>
<div id="crp_related"><h4>Related Posts</h4><ul><li><a href="http://leesean.net/2008/11/13/icm-final-musical-typewriter-take-2/" rel="bookmark" class="crp_title">ICM Final: Musical Typewriter &#8211; take 2</a></li><li><a href="http://leesean.net/2008/12/02/icm-final-source-code/" rel="bookmark" class="crp_title">ICM Final: Post-Modern Poster Child (Musical Typeface Reinvention)</a></li><li><a href="http://leesean.net/2008/11/13/icm-final-in-progress-musical-typewriter/" rel="bookmark" class="crp_title">ICM Final in Progress: Musical Typewriter</a></li><li><a href="http://leesean.net/2008/12/16/headbangerphones-final/" rel="bookmark" class="crp_title">head(banger)phones &#8211; FINAL</a></li><li><a href="http://leesean.net/2008/12/06/headbangerphones-part-2/" rel="bookmark" class="crp_title">head(banger)phones part 2</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://leesean.net/2008/11/14/icm-final-musical-typewriter-screenshot/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ICM Final: Musical Typewriter &#8211; take 2</title>
		<link>http://leesean.net/2008/11/13/icm-final-musical-typewriter-take-2/</link>
		<comments>http://leesean.net/2008/11/13/icm-final-musical-typewriter-take-2/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 21:59:08 +0000</pubDate>
		<dc:creator>leesean</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[ICM]]></category>
		<category><![CDATA[Interactive]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[NYU]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://leesean.net/?p=1343</guid>
		<description><![CDATA[Update to my two previous posts: ICM Final in Progress: Musical Typewriter ICM Final Project Proposal: Text2Drum After getting help from the ICM email list, I changed my AudioPlayer objects to AudioSamples, which only need to be triggered once, as opposed to AudioPlayer objects that require play and rewind functions.  This tweak solved my latency [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update to my two previous posts:</strong></p>
<p><a href="http://leesean.net/2008/11/13/icm-final-in-progress-musical-typewriter/">ICM Final in Progress: Musical Typewriter</a></p>
<p><a href="http://leesean.net/2008/11/08/icm-final-project-proposal-text2drum/">ICM Final Project Proposal: Text2Drum</a></p>
<p>After getting help from the ICM email list, I changed my AudioPlayer objects to AudioSamples, which only need to be triggered once, as opposed to AudioPlayer objects that require play and rewind functions.  This tweak solved my latency and crackle issues.</p>
<p>Testing out the new version has reminded me of the aural pleasure of typing on analog typewriters.  The rhythmic, percussive quality of clanking keys is now lost on contemporary computer keyboards that make more muted sounds when used.</p>
<p>I also thought it would be cool to visualize the waveform of the audio output and display that along with the letter on the screen.  Well, back to work&#8230;</p>
<p><strong>New code after the jump:</strong></p>
<p><span id="more-1343"></span></p>
<blockquote><p>import ddf.minim.signals.*;<br />
import ddf.minim.*;<br />
import ddf.minim.analysis.*;<br />
import ddf.minim.effects.*;</p>
<p>Minim minim;<br />
//AudioSample objects for each letter of the alphabet<br />
AudioSample play_a;<br />
AudioSample play_b;<br />
AudioSample play_c;<br />
AudioSample play_d;<br />
AudioSample play_e;<br />
AudioSample play_f;<br />
AudioSample play_g;<br />
AudioSample play_h;<br />
AudioSample play_i;<br />
AudioSample play_j;<br />
AudioSample play_k;<br />
AudioSample play_l;<br />
AudioSample play_m;<br />
AudioSample play_n;<br />
AudioSample play_o;<br />
AudioSample play_p;<br />
AudioSample play_q;<br />
AudioSample play_r;<br />
AudioSample play_s;<br />
AudioSample play_t;<br />
AudioSample play_u;<br />
AudioSample play_v;<br />
AudioSample play_w;<br />
AudioSample play_x;<br />
AudioSample play_y;<br />
AudioSample play_z;</p>
<p>void setup()<br />
{<br />
minim = new Minim(this);<br />
size(500,500);</p>
<p>background(0);<br />
textFont(createFont(&#8220;Courier&#8221;, 50));<br />
text(&#8220;Type letters&#8221;, 30, height/2-50);<br />
text(&#8220;to play&#8221;, 30, height/2+25);</p>
<p>play_a = minim.loadSample(&#8220;A.mp3&#8243;, 512);<br />
play_b = minim.loadSample(&#8220;B.mp3&#8243;, 512);<br />
play_c = minim.loadSample(&#8220;C.mp3&#8243;, 512);<br />
play_d = minim.loadSample(&#8220;D.mp3&#8243;, 512);<br />
play_e = minim.loadSample(&#8220;E.mp3&#8243;, 512);<br />
play_f = minim.loadSample(&#8220;F.mp3&#8243;, 512);<br />
play_g = minim.loadSample(&#8220;G.mp3&#8243;, 512);<br />
play_h = minim.loadSample(&#8220;H.mp3&#8243;, 512);<br />
play_i = minim.loadSample(&#8220;I.mp3&#8243;, 512);<br />
play_j = minim.loadSample(&#8220;J.mp3&#8243;, 512);<br />
play_k = minim.loadSample(&#8220;K.mp3&#8243;, 512);<br />
play_l = minim.loadSample(&#8220;L.mp3&#8243;, 512);<br />
play_m = minim.loadSample(&#8220;M.mp3&#8243;, 512);<br />
play_n = minim.loadSample(&#8220;N.mp3&#8243;, 512);<br />
play_o = minim.loadSample(&#8220;O.mp3&#8243;, 512);<br />
play_p = minim.loadSample(&#8220;P.mp3&#8243;, 512);<br />
play_q = minim.loadSample(&#8220;Q.mp3&#8243;, 512);<br />
play_r = minim.loadSample(&#8220;R.mp3&#8243;, 512);<br />
play_s = minim.loadSample(&#8220;S.mp3&#8243;, 512);<br />
play_t = minim.loadSample(&#8220;T.mp3&#8243;, 512);<br />
play_u = minim.loadSample(&#8220;U.mp3&#8243;, 512);<br />
play_v = minim.loadSample(&#8220;V.mp3&#8243;, 512);<br />
play_w = minim.loadSample(&#8220;W.mp3&#8243;, 512);<br />
play_x = minim.loadSample(&#8220;X.mp3&#8243;, 512);<br />
play_y = minim.loadSample(&#8220;Y.mp3&#8243;, 512);<br />
play_z = minim.loadSample(&#8220;Z.mp3&#8243;, 512);</p>
<p>textFont(createFont(&#8220;Courier&#8221;, 200));<br />
}</p>
<p>void draw()<br />
{</p>
<p>}</p>
<p>void keyPressed()<br />
{<br />
if ( key == &#8216;a&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;A&#8221;, width/2-60, height/2+20);<br />
play_a.trigger();<br />
}</p>
<p>if ( key == &#8216;b&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;B&#8221;, width/2-60, height/2+20);<br />
play_b.trigger();<br />
}</p>
<p>if ( key == &#8216;c&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;C&#8221;, width/2-60, height/2+20);<br />
play_c.trigger();<br />
}</p>
<p>if ( key == &#8216;d&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;D&#8221;, width/2-60, height/2+20);<br />
play_d.trigger();<br />
}</p>
<p>if ( key == &#8216;e&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;E&#8221;, width/2-60, height/2+20);<br />
play_e.trigger();<br />
}</p>
<p>if ( key == &#8216;f&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;F&#8221;, width/2-60, height/2+20);<br />
play_f.trigger();<br />
}</p>
<p>if ( key == &#8216;g&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;G&#8221;, width/2-60, height/2+20);<br />
play_g.trigger();<br />
}</p>
<p>if ( key == &#8216;h&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;H&#8221;, width/2-60, height/2+20);<br />
play_h.trigger();<br />
}</p>
<p>if ( key == &#8216;i&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;I&#8221;, width/2-60, height/2+20);<br />
play_i.trigger();<br />
}</p>
<p>if ( key == &#8216;j&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;J&#8221;, width/2-60, height/2+20);<br />
play_j.trigger();<br />
}</p>
<p>if ( key == &#8216;k&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;K&#8221;, width/2-60, height/2+20);<br />
play_k.trigger();<br />
}</p>
<p>if ( key == &#8216;l&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;L&#8221;, width/2-60, height/2+20);<br />
play_l.trigger();<br />
}</p>
<p>if ( key == &#8216;m&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;M&#8221;, width/2-60, height/2+20);<br />
play_m.trigger();<br />
}</p>
<p>if ( key == &#8216;n&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;N&#8221;, width/2-60, height/2+20);<br />
play_n.trigger();<br />
}</p>
<p>if ( key == &#8216;o&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;O&#8221;, width/2-60, height/2+20);<br />
play_o.trigger();<br />
}</p>
<p>if ( key == &#8216;p&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;P&#8221;, width/2-60, height/2+20);<br />
play_p.trigger();<br />
}</p>
<p>if ( key == &#8216;q&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;Q&#8221;, width/2-60, height/2+20);<br />
play_q.trigger();<br />
}</p>
<p>if ( key == &#8216;r&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;R&#8221;, width/2-60, height/2+20);<br />
play_r.trigger();<br />
}</p>
<p>if ( key == &#8216;s&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;S&#8221;, width/2-60, height/2+20);<br />
play_s.trigger();<br />
}</p>
<p>if ( key == &#8216;t&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;T&#8221;, width/2-60, height/2+20);<br />
play_t.trigger();<br />
}</p>
<p>if ( key == &#8216;u&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;U&#8221;, width/2-60, height/2+20);<br />
play_u.trigger();<br />
}</p>
<p>if ( key == &#8216;v&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;V&#8221;, width/2-60, height/2+20);<br />
play_v.trigger();<br />
}</p>
<p>if ( key == &#8216;w&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;W&#8221;, width/2-60, height/2+20);<br />
play_w.trigger();<br />
}</p>
<p>if ( key == &#8216;x&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;X&#8221;, width/2-60, height/2+20);<br />
play_x.trigger();<br />
}</p>
<p>if ( key == &#8216;y&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;Y&#8221;, width/2-60, height/2+20);<br />
play_y.trigger();<br />
}</p>
<p>if ( key == &#8216;z&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;Z&#8221;, width/2-60, height/2+20);<br />
play_z.trigger();<br />
}</p>
<p>if (key == &#8216; &#8216;)<br />
{<br />
background(0);<br />
}<br />
}</p>
<p>void stop()<br />
{<br />
minim.stop();<br />
super.stop();<br />
}</p></blockquote>
<div id="crp_related"><h4>Related Posts</h4><ul><li><a href="http://leesean.net/2008/11/14/icm-final-musical-typewriter-screenshot/" rel="bookmark" class="crp_title">ICM Final: Musical Typewriter Screenshot</a></li><li><a href="http://leesean.net/2008/11/13/icm-final-in-progress-musical-typewriter/" rel="bookmark" class="crp_title">ICM Final in Progress: Musical Typewriter</a></li><li><a href="http://leesean.net/2008/12/16/headbangerphones-final/" rel="bookmark" class="crp_title">head(banger)phones &#8211; FINAL</a></li><li><a href="http://leesean.net/2008/12/02/icm-final-source-code/" rel="bookmark" class="crp_title">ICM Final: Post-Modern Poster Child (Musical Typeface Reinvention)</a></li><li><a href="http://leesean.net/2008/12/06/headbangerphones-part-2/" rel="bookmark" class="crp_title">head(banger)phones part 2</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://leesean.net/2008/11/13/icm-final-musical-typewriter-take-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ICM Final in Progress: Musical Typewriter</title>
		<link>http://leesean.net/2008/11/13/icm-final-in-progress-musical-typewriter/</link>
		<comments>http://leesean.net/2008/11/13/icm-final-in-progress-musical-typewriter/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 21:03:21 +0000</pubDate>
		<dc:creator>leesean</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[ICM]]></category>
		<category><![CDATA[Interactive]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[NYU]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Musical Instrument]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Typewriter]]></category>

		<guid isPermaLink="false">http://leesean.net/?p=1341</guid>
		<description><![CDATA[I have completed phase 1 of my ICM final project, Text2Drum,  which involves me creating a new &#8220;percussion alphabet&#8221;, perhaps another way to describe it is &#8220;a musical Morse code.&#8221;  I have assigned a unique percussion sample to each letter of the alphabet.  I have assigned &#8216;A&#8217; through &#8216;G&#8217; pitched percussion hits that correspond to [...]]]></description>
			<content:encoded><![CDATA[<p>I have completed phase 1 of my <a href="http://itp.nyu.edu/varwiki/Syllabus/ICM-Danny-Rozin-F08">ICM</a> final project, <a href="http://leesean.net/2008/11/08/icm-final-project-proposal-text2drum/">Text2Drum</a>,  which involves me creating a new &#8220;percussion alphabet&#8221;, perhaps another way to describe it is &#8220;a musical Morse code.&#8221;  I have assigned a unique percussion sample to each letter of the alphabet.  I have assigned &#8216;A&#8217; through &#8216;G&#8217; pitched percussion hits that correspond to the white keys on a piano, but voiced at different octaves.  All of the other letters are un-pitched percussion sounds.  I have not assigned sounds to punctuation marks or numbers (yet).  I&#8217;m not sure if I want to or if this is necessary for my new language.</p>
<p>I have written a <a href="http://processing.org/">Processing</a> sketch, with the help of the <a href="http://code.compartmental.net/tools/minim/">Minim</a> library, that that plays back the &#8220;percussion letters&#8221; when the user types on the keyboard.  There is a bit of latency and audio &#8220;crackle&#8221; that still needs to be worked out, but for the most part, the musical typewriter works.  The next step is to build a related program that can read a text file as a musical score, translate the letters into percussion alphabet, play back the results, and save the audio playback as a file.</p>
<p>For more info, refer to <a href="http://leesean.net/2008/11/08/icm-final-project-proposal-text2drum/">my previous post about Text2Drum</a>, or see my source code for the musical typewriter after the jump.</p>
<p><span id="more-1341"></span><br />
<strong>Musical Typewriter source code:</strong></p>
<blockquote><p>import ddf.minim.signals.*;<br />
import ddf.minim.*;<br />
import ddf.minim.analysis.*;<br />
import ddf.minim.effects.*;</p>
<p>Minim minim;<br />
//AudioPlayer objects for each letter of the alphabet<br />
AudioPlayer play_a;<br />
AudioPlayer play_b;<br />
AudioPlayer play_c;<br />
AudioPlayer play_d;<br />
AudioPlayer play_e;<br />
AudioPlayer play_f;<br />
AudioPlayer play_g;<br />
AudioPlayer play_h;<br />
AudioPlayer play_i;<br />
AudioPlayer play_j;<br />
AudioPlayer play_k;<br />
AudioPlayer play_l;<br />
AudioPlayer play_m;<br />
AudioPlayer play_n;<br />
AudioPlayer play_o;<br />
AudioPlayer play_p;<br />
AudioPlayer play_q;<br />
AudioPlayer play_r;<br />
AudioPlayer play_s;<br />
AudioPlayer play_t;<br />
AudioPlayer play_u;<br />
AudioPlayer play_v;<br />
AudioPlayer play_w;<br />
AudioPlayer play_x;<br />
AudioPlayer play_y;<br />
AudioPlayer play_z;</p>
<p>void setup()<br />
{<br />
minim = new Minim(this);<br />
size(500,500);</p>
<p>background(0);<br />
textFont(createFont(&#8220;Courier&#8221;, 50));<br />
text(&#8220;Type letters&#8221;, 30, height/2-50);<br />
text(&#8220;to play&#8221;, 30, height/2+25);</p>
<p>play_a = minim.loadFile(&#8220;A.mp3&#8243;, 512);<br />
play_b = minim.loadFile(&#8220;B.mp3&#8243;, 512);<br />
play_c = minim.loadFile(&#8220;C.mp3&#8243;, 512);<br />
play_d = minim.loadFile(&#8220;D.mp3&#8243;, 512);<br />
play_e = minim.loadFile(&#8220;E.mp3&#8243;, 512);<br />
play_f = minim.loadFile(&#8220;F.mp3&#8243;, 512);<br />
play_g = minim.loadFile(&#8220;G.mp3&#8243;, 512);<br />
play_h = minim.loadFile(&#8220;H.mp3&#8243;, 512);<br />
play_i = minim.loadFile(&#8220;I.mp3&#8243;, 512);<br />
play_j = minim.loadFile(&#8220;J.mp3&#8243;, 512);<br />
play_k = minim.loadFile(&#8220;K.mp3&#8243;, 512);<br />
play_l = minim.loadFile(&#8220;L.mp3&#8243;, 512);<br />
play_m = minim.loadFile(&#8220;M.mp3&#8243;, 512);<br />
play_n = minim.loadFile(&#8220;N.mp3&#8243;, 512);<br />
play_o = minim.loadFile(&#8220;O.mp3&#8243;, 512);<br />
play_p = minim.loadFile(&#8220;P.mp3&#8243;, 512);<br />
play_q = minim.loadFile(&#8220;Q.mp3&#8243;, 512);<br />
play_r = minim.loadFile(&#8220;R.mp3&#8243;, 512);<br />
play_s = minim.loadFile(&#8220;S.mp3&#8243;, 512);<br />
play_t = minim.loadFile(&#8220;T.mp3&#8243;, 512);<br />
play_u = minim.loadFile(&#8220;U.mp3&#8243;, 512);<br />
play_v = minim.loadFile(&#8220;V.mp3&#8243;, 512);<br />
play_w = minim.loadFile(&#8220;W.mp3&#8243;, 512);<br />
play_x = minim.loadFile(&#8220;X.mp3&#8243;, 512);<br />
play_y = minim.loadFile(&#8220;Y.mp3&#8243;, 512);<br />
play_z = minim.loadFile(&#8220;Z.mp3&#8243;, 512);</p>
<p>textFont(createFont(&#8220;Courier&#8221;, 200));<br />
}</p>
<p>void draw()<br />
{</p>
<p>}</p>
<p>void keyPressed()<br />
{<br />
if ( key == &#8216;a&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;A&#8221;, width/2-60, height/2+20);<br />
play_a.play();<br />
play_a.rewind();<br />
}</p>
<p>if ( key == &#8216;b&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;B&#8221;, width/2-60, height/2+20);<br />
play_b.play();<br />
play_b.rewind();<br />
}</p>
<p>if ( key == &#8216;c&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;C&#8221;, width/2-60, height/2+20);<br />
play_c.play();<br />
play_c.rewind();<br />
}</p>
<p>if ( key == &#8216;d&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;D&#8221;, width/2-60, height/2+20);<br />
play_d.play();<br />
play_d.rewind();<br />
}</p>
<p>if ( key == &#8216;e&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;E&#8221;, width/2-60, height/2+20);<br />
play_e.play();<br />
play_e.rewind();<br />
}</p>
<p>if ( key == &#8216;f&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;F&#8221;, width/2-60, height/2+20);<br />
play_f.play();<br />
play_f.rewind();<br />
}</p>
<p>if ( key == &#8216;g&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;G&#8221;, width/2-60, height/2+20);<br />
play_g.play();<br />
play_g.rewind();<br />
}</p>
<p>if ( key == &#8216;h&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;H&#8221;, width/2-60, height/2+20);<br />
play_h.play();<br />
play_h.rewind();<br />
}</p>
<p>if ( key == &#8216;i&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;I&#8221;, width/2-60, height/2+20);<br />
play_i.play();<br />
play_i.rewind();<br />
}</p>
<p>if ( key == &#8216;j&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;J&#8221;, width/2-60, height/2+20);<br />
play_j.play();<br />
play_j.rewind();<br />
}</p>
<p>if ( key == &#8216;k&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;K&#8221;, width/2-60, height/2+20);<br />
play_k.play();<br />
play_k.rewind();<br />
}</p>
<p>if ( key == &#8216;l&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;L&#8221;, width/2-60, height/2+20);<br />
play_l.play();<br />
play_l.rewind();<br />
}</p>
<p>if ( key == &#8216;m&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;M&#8221;, width/2-60, height/2+20);<br />
play_m.play();<br />
play_m.rewind();<br />
}</p>
<p>if ( key == &#8216;n&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;N&#8221;, width/2-60, height/2+20);<br />
play_n.play();<br />
play_n.rewind();<br />
}</p>
<p>if ( key == &#8216;o&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;O&#8221;, width/2-60, height/2+20);<br />
play_o.play();<br />
play_o.rewind();<br />
}</p>
<p>if ( key == &#8216;p&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;P&#8221;, width/2-60, height/2+20);<br />
play_p.play();<br />
play_p.rewind();<br />
}</p>
<p>if ( key == &#8216;q&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;Q&#8221;, width/2-60, height/2+20);<br />
play_q.play();<br />
play_q.rewind();<br />
}</p>
<p>if ( key == &#8216;r&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;R&#8221;, width/2-60, height/2+20);<br />
play_r.play();<br />
play_r.rewind();<br />
}</p>
<p>if ( key == &#8216;s&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;S&#8221;, width/2-60, height/2+20);<br />
play_s.play();<br />
play_s.rewind();<br />
}</p>
<p>if ( key == &#8216;t&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;T&#8221;, width/2-60, height/2+20);<br />
play_t.play();<br />
play_t.rewind();<br />
}</p>
<p>if ( key == &#8216;u&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;U&#8221;, width/2-60, height/2+20);<br />
play_u.play();<br />
play_u.rewind();<br />
}</p>
<p>if ( key == &#8216;v&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;V&#8221;, width/2-60, height/2+20);<br />
play_v.play();<br />
play_v.rewind();<br />
}</p>
<p>if ( key == &#8216;w&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;W&#8221;, width/2-60, height/2+20);<br />
play_w.play();<br />
play_w.rewind();<br />
}</p>
<p>if ( key == &#8216;x&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;X&#8221;, width/2-60, height/2+20);<br />
play_x.play();<br />
play_x.rewind();<br />
}</p>
<p>if ( key == &#8216;y&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;Y&#8221;, width/2-60, height/2+20);<br />
play_y.play();<br />
play_y.rewind();<br />
}</p>
<p>if ( key == &#8216;z&#8217;)<br />
{<br />
background(0);<br />
text(&#8220;Z&#8221;, width/2-60, height/2+20);<br />
play_z.play();<br />
play_z.rewind();<br />
}</p>
<p>if (key == &#8216; &#8216;)<br />
{<br />
background(0);<br />
}<br />
}</p></blockquote>
<div id="crp_related"><h4>Related Posts</h4><ul><li><a href="http://leesean.net/2008/11/13/icm-final-musical-typewriter-take-2/" rel="bookmark" class="crp_title">ICM Final: Musical Typewriter &#8211; take 2</a></li><li><a href="http://leesean.net/2008/11/14/icm-final-musical-typewriter-screenshot/" rel="bookmark" class="crp_title">ICM Final: Musical Typewriter Screenshot</a></li><li><a href="http://leesean.net/2008/12/02/icm-final-source-code/" rel="bookmark" class="crp_title">ICM Final: Post-Modern Poster Child (Musical Typeface Reinvention)</a></li><li><a href="http://leesean.net/2008/12/16/headbangerphones-final/" rel="bookmark" class="crp_title">head(banger)phones &#8211; FINAL</a></li><li><a href="http://leesean.net/2008/12/06/headbangerphones-part-2/" rel="bookmark" class="crp_title">head(banger)phones part 2</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://leesean.net/2008/11/13/icm-final-in-progress-musical-typewriter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ICM Final Project Proposal: Text2Drum</title>
		<link>http://leesean.net/2008/11/08/icm-final-project-proposal-text2drum/</link>
		<comments>http://leesean.net/2008/11/08/icm-final-project-proposal-text2drum/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 21:53:23 +0000</pubDate>
		<dc:creator>leesean</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[ICM]]></category>
		<category><![CDATA[Interactive]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[NYU]]></category>
		<category><![CDATA[Drums]]></category>
		<category><![CDATA[Language]]></category>
		<category><![CDATA[Linguistics]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Text2Drum]]></category>

		<guid isPermaLink="false">http://leesean.net/?p=1323</guid>
		<description><![CDATA[For my ICM final project, which I am calling Text2Drum, I seek to explore the rhythmic qualities of language.  Text2Drum will read text from a file, and convert each letter of the text to a drum/percussion that I will assign to correspond to each letter of the alphabet.  Spaces and punctuation marks will be interpreted [...]]]></description>
			<content:encoded><![CDATA[<p>For my <a href="http://itp.nyu.edu/varwiki/Syllabus/ICM-Danny-Rozin-F08">ICM</a> final project, which I am calling Text2Drum, I seek to explore the rhythmic qualities of language.  Text2Drum will read text from a file, and convert each letter of the text to a drum/percussion that I will assign to correspond to each letter of the alphabet.  Spaces and punctuation marks will be interpreted as a musical rest, that is to say a period of silence.  The program will also display the text on screen while playing back the drum samples.  In using Text2Drum to generate percussion patterns, I aim to translate text into a new musical language and seek to reclaim the rhythmic nature of language found in oral communication that is lost in written language.</p>
<p>I also hope to make a second version of Text2Drum which will be interactive, which will have an interface that will allow a user to type in text that Text2Drum will then convert into a rhythmic pattern.</p>
<div id="crp_related"><h4>Related Posts</h4><ul><li><a href="http://leesean.net/2008/11/13/icm-final-in-progress-musical-typewriter/" rel="bookmark" class="crp_title">ICM Final in Progress: Musical Typewriter</a></li><li><a href="http://leesean.net/2008/11/13/icm-final-musical-typewriter-take-2/" rel="bookmark" class="crp_title">ICM Final: Musical Typewriter &#8211; take 2</a></li><li><a href="http://leesean.net/2008/10/15/icm-midterm-proposal/" rel="bookmark" class="crp_title">ICM Midterm Proposal</a></li><li><a href="http://leesean.net/2008/10/29/icm-midterm-portrait-of-mao/" rel="bookmark" class="crp_title">ICM Midterm: Portrait of Mao</a></li><li><a href="http://leesean.net/2008/12/02/icm-final-source-code/" rel="bookmark" class="crp_title">ICM Final: Post-Modern Poster Child (Musical Typeface Reinvention)</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://leesean.net/2008/11/08/icm-final-project-proposal-text2drum/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>ICM Midterm: Portrait of Mao</title>
		<link>http://leesean.net/2008/10/29/icm-midterm-portrait-of-mao/</link>
		<comments>http://leesean.net/2008/10/29/icm-midterm-portrait-of-mao/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 23:17:20 +0000</pubDate>
		<dc:creator>leesean</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[China]]></category>
		<category><![CDATA[ICM]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[NYU]]></category>
		<category><![CDATA[Communism]]></category>
		<category><![CDATA[Little Red Book]]></category>
		<category><![CDATA[Mao]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://leesean.net/?p=1263</guid>
		<description><![CDATA[UPDATE 22 Feb 2009: I have written a new concise description of the Portrait of Mao: The Portrait of Mao is a 42 inch by 42 inch color print on archival paper. The image was generated by a Processing sketch I wrote, which reads pixel color data from an image file and replaces each pixel [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE 22 Feb 2009:</strong><br />
<strong>I have written a new concise description of the Portrait of Mao:<br />
</strong></p>
<p>The Portrait of Mao is a 42 inch by 42 inch color print on archival paper. The image was generated by a Processing sketch I wrote, which reads pixel color data from an image file and replaces each pixel with a text character with the same color as the original pixel. In the case of the Portrait of Mao, the source image was obtained from a Cultural Revolution-era LP cover of revolutionary songs featuring Chinese leader Mao Zedong and a bright, motley array of proletarian workers, representing different ethnic groups in China. My Processing sketch used this source image and replaced the pixels with the Chinese-language text of The Little Red Book AKA Quotations from Chairman Mao Zedong, a required text for every Chinese citizen during the Cultural Revolution.</p>
<p>In creating the Portrait, I wished to explore how text and images play a role in political propaganda and how they serve to construct a cult of personality around a paternal and pop-cultural icon. We know that words and images have persuasive and seductive powers, but how, and why? In reappropriating the propagandistic images and text and by depicting the controversial leader in an irreverently kitsch, Pop-Art way (Andy Warhol’s Mao paintings are an obvious point of reference), I sought to deconstruct the aura surrounding such a well-known figure who is still revered by millions in China.</p>
<p>The fusing of words and images also plays on the pictographic and ideographic nature of the graphemes used in the Chinese language. Chinese characters are simultaneously words, images, and symbols. In the Portrait of Mao they become both semantic and graphic building blocks of a text, an image, and an ideology.</p>
<p><img class="alignnone size-full wp-image-1264" title="mao_print" src="http://leesean.net/wp-content/uploads/2008/10/mao_print.jpg" alt="" /></p>
<p><strong>Original blog post from 29 Oct 2008:</strong></p>
<p>I presented my <a href="http://itp.nyu.edu/varwiki/Syllabus/ICM-Danny-Rozin-F08">ICM</a> midterm project yesterday.  I wanted to explore how text and images play a role in political propaganda and how they serve to construct a cult of personality.</p>
<p>The image above is just a scaled-down version, the real version is a 42 inch x 42 inch poster.  The poster consists of a text mosaic derived from a scan of a Cultural Revolution era LP cover of propaganda songs.  My <a href="http://processing.org/">Processing</a> program reads the color information in the pixels of the source JPG and replaces it with characters from the Chinese version of <a href="http://en.wikipedia.org/wiki/Quotations_from_Chairman_Mao_Zedong">The Little Red Book</a>.</p>
<p>Here is a close up of the text mosaic, taken from the Technicolor Dream Coat guy on the bottom right.</p>
<p><img class="alignnone size-full wp-image-1265" title="mao_close" src="http://leesean.net/wp-content/uploads/2008/10/mao_close.jpg" alt="" /></p>
<p>I hope to one day present the poster in an over-the-top kitsch setting.  I want to frame it with red Christmas lights and build a &#8220;shrine&#8221; to the Chairman, with flowers and Tsing Dao beer bottles.  I also have another poster in the works featuring the <a href="http://en.wikipedia.org/wiki/Kim_Jong-il">Dear Leader</a> composed out of the Korean-language text of his <a href="http://www1.korea-np.co.jp/pk/062nd_issue/98092410.htm">On the Juche Idea</a>.  Ultimately, I want to create a triptych, but I haven&#8217;t decided on a third subject yet.  <a href="http://en.wikipedia.org/wiki/Ho_Chi_Minh">Uncle Ho</a>?  Or maybe <a href="http://en.wikipedia.org/wiki/Karl_Marx">Grandpa Marx</a>?</p>
<p>Here is a snapshot of me presenting the piece to my class.  Photo credit: <a href="http://itp.nyu.edu/~clw336/myblog/">Catherine White</a>.</p>
<p><img class="alignnone size-full wp-image-1267" title="presenting" src="http://leesean.net/wp-content/uploads/2008/10/presenting.jpg" alt="" /></p>
<div id="crp_related"><h4>Related Posts</h4><ul><li><a href="http://leesean.net/2008/10/15/icm-midterm-proposal/" rel="bookmark" class="crp_title">ICM Midterm Proposal</a></li><li><a href="http://leesean.net/2008/11/08/icm-final-project-proposal-text2drum/" rel="bookmark" class="crp_title">ICM Final Project Proposal: Text2Drum</a></li><li><a href="http://leesean.net/2008/10/05/icm-sakura-revisited-and-koyo/" rel="bookmark" class="crp_title">ICM: Sakura (Revisited) and Koyo</a></li><li><a href="http://leesean.net/2008/11/13/icm-final-in-progress-musical-typewriter/" rel="bookmark" class="crp_title">ICM Final in Progress: Musical Typewriter</a></li><li><a href="http://leesean.net/2008/09/22/icm-week-3-sakura/" rel="bookmark" class="crp_title">ICM: Week 3 &#8211; Sakura</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://leesean.net/2008/10/29/icm-midterm-portrait-of-mao/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ICM Midterm Proposal</title>
		<link>http://leesean.net/2008/10/15/icm-midterm-proposal/</link>
		<comments>http://leesean.net/2008/10/15/icm-midterm-proposal/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 00:22:30 +0000</pubDate>
		<dc:creator>leesean</dc:creator>
				<category><![CDATA[ICM]]></category>
		<category><![CDATA[NYU]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[Midterm]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://leesean.net/?p=1201</guid>
		<description><![CDATA[For my midterm project, I want to escape from the computer screen and work in a medium that has the potential to be larger format, more tactile, and less ethereal.  Using the text mirror example from Learning Processing as a departure point, I am working on a Processing program that will allow me to create [...]]]></description>
			<content:encoded><![CDATA[<p>For my midterm project, I want to escape from the computer screen and work in a medium that has the potential to be larger format, more tactile, and less ethereal.  Using the <a href="http://www.learningprocessing.com/examples/chapter-17/example-17-4/">text mirror example from Learning Processing</a> as a departure point, I am working on a Processing program that will allow me to create high resolution image files that will allow me to print a series large format posters.  Perhaps it is easier to show than to tell, so here is an example of a work in progress.</p>
<p><img src="http://leesean.net/itp/icm/midterm/proposal/mao_cropped.jpg" alt="" /></p>
<p>I started with the iconic image of Mao Zedong in Tiananmen Square.  Then I redrew the image using the text of the <a href="http://en.wikipedia.org/wiki/Quotations_from_Chairman_Mao_Zedong">The Little Red Book</a>.</p>
<p><img src="http://leesean.net/itp/icm/midterm/proposal/mao_screenshot_web.jpg" alt="" /></p>
<p>Here is a close up:</p>
<p><img src="http://leesean.net/itp/icm/midterm/proposal/close_up.jpg" alt="" /></p>
<p>I still have some work to do to address the spacing issues around the punctuation marks, which creates too much black space.  Ultimately, I intend to provoke a dialogue about the relationship between text and images, especially in the Chinese ideographic writing system, as well as explore the the roles that text and images play in political propaganda and the construction of ideology.</p>
<div id="crp_related"><h4>Related Posts</h4><ul><li><a href="http://leesean.net/2008/10/29/icm-midterm-portrait-of-mao/" rel="bookmark" class="crp_title">ICM Midterm: Portrait of Mao</a></li><li><a href="http://leesean.net/2008/11/08/icm-final-project-proposal-text2drum/" rel="bookmark" class="crp_title">ICM Final Project Proposal: Text2Drum</a></li><li><a href="http://leesean.net/2008/10/05/icm-sakura-revisited-and-koyo/" rel="bookmark" class="crp_title">ICM: Sakura (Revisited) and Koyo</a></li><li><a href="http://leesean.net/2008/09/22/icm-week-3-sakura/" rel="bookmark" class="crp_title">ICM: Week 3 &#8211; Sakura</a></li><li><a href="http://leesean.net/2008/11/13/icm-final-musical-typewriter-take-2/" rel="bookmark" class="crp_title">ICM Final: Musical Typewriter &#8211; take 2</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://leesean.net/2008/10/15/icm-midterm-proposal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ICM: Sakura (Revisited) and Koyo</title>
		<link>http://leesean.net/2008/10/05/icm-sakura-revisited-and-koyo/</link>
		<comments>http://leesean.net/2008/10/05/icm-sakura-revisited-and-koyo/#comments</comments>
		<pubDate>Sun, 05 Oct 2008 04:59:25 +0000</pubDate>
		<dc:creator>leesean</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[ICM]]></category>
		<category><![CDATA[Interactive]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[Japan]]></category>
		<category><![CDATA[Japanese]]></category>
		<category><![CDATA[NYU]]></category>
		<category><![CDATA[こうよう]]></category>
		<category><![CDATA[さくら]]></category>
		<category><![CDATA[紅葉]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tisch]]></category>
		<category><![CDATA[桜]]></category>

		<guid isPermaLink="false">http://leesean.net/?p=1185</guid>
		<description><![CDATA[This week in Intro to Computational Media @ ITP, we learned how to add text into a Processing sketch.  I used my Sakura (cherry blossom) sketch from week 3 as a departure point and added the Japanese characters for sakura さくら into the new version of the sketch (above). I wanted to create a kind [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://leesean.net/itp/icm/week5/sakura/"><img src="http://leesean.net/itp/icm/week5/sakura_screenshot.jpg" alt="" /></a></p>
<p>This week in <a href="http://itp.nyu.edu/varwiki/Syllabus/ICM-Danny-Rozin-F08">Intro to Computational Media @ ITP</a>, we learned how to add text into a <a href="http://processing.org/">Processing</a> sketch.  I used my <a href="http://leesean.net/2008/09/22/icm-week-3-sakura/">Sakura (cherry blossom) sketch from week 3</a> as a departure point and added the Japanese characters for <em>sakura</em> さくら into the <a href="http://leesean.net/itp/icm/week5/sakura/">new version of the sketch (above)</a>. I wanted to create a kind of &#8220;digital calligraphy&#8221; that explored the relationship between words and abstract shapes and set everything in motion. I also made an <a href="http://leesean.net/itp/icm/week5/koyo/">autumn leaves (<em>koyo</em>) sketch</a> with the Japanese characters for <em>koyo</em> 紅葉 and an autumn color story.  To make things more visually appealing, I increased the size of the triangles and added some transparency to the background to create a more stylized sense of the passage of time in the animation and to create an illusion of three-dimensional depth.</p>
<p>There was a slight problem in getting the sketches to execute correctly though.  Although Processing is able to deal with Unicode-8 character sets, I was unable to get the Japanese characters to display correctly in the calligraphy font that I wanted.  The Japanese characters were showing, but in a default san-serif font and not the font that I created and specified in Processing.  I realized that I had to import the full character set and not just the default characters that Processing turns into bitmaps when you create a font.  However, when I checked &#8220;all characters&#8221; in the Create Font menu and clicked on &#8220;Create&#8221;, my computer froze up, probably because Japanese fonts have literally thousands of different characters, unlike the 26 letters and handful of punctuation marks we have in English.  Since I was only using 3 different characters in the Sakura sketch and 2 different characters in the Koyo sketch, I thought I that I might try creating <a href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics">SVG files</a> in Adobe Illustrator for each character and then importing the <a href="http://processing.org/reference/libraries/candy/index.html">Candy SVG library</a> into my Processing sketches, which would then allow me to import the Japanese characters as vectors instead of bitmapped fonts.  Also, I only had to load the characters that I needed, and not the entire character set of the font.  As you can see from the screenshots, this approach worked!  I got the Japanese chracters to display in the calligraphy font instead of the default Processing font which didn&#8217;t work in the context of the sketches.</p>
<p>Click on the screenshots above and below to play with the sketches.  Drag the mouse around the frame and hold down any key on the keyboard to scatter cherry blossoms petals/autumn leaves.</p>
<p><a href="http://leesean.net/itp/icm/week5/koyo/"><img src="http://leesean.net/itp/icm/week5/koyo_screenshot.jpg" alt="" /></a></p>
<div id="crp_related"><h4>Related Posts</h4><ul><li><a href="http://leesean.net/2008/09/22/icm-week-3-sakura/" rel="bookmark" class="crp_title">ICM: Week 3 &#8211; Sakura</a></li><li><a href="http://leesean.net/2008/09/04/intro-to-computational-media-week-1-assignment/" rel="bookmark" class="crp_title">Intro to Computational Media Week 1 Assignment</a></li><li><a href="http://leesean.net/2008/09/12/icm-week-2-assignment/" rel="bookmark" class="crp_title">ICM Week 2 Assignment</a></li><li><a href="http://leesean.net/2008/10/15/icm-midterm-proposal/" rel="bookmark" class="crp_title">ICM Midterm Proposal</a></li><li><a href="http://leesean.net/2008/10/29/icm-midterm-portrait-of-mao/" rel="bookmark" class="crp_title">ICM Midterm: Portrait of Mao</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://leesean.net/2008/10/05/icm-sakura-revisited-and-koyo/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ICM: Week 3 &#8211; Sakura</title>
		<link>http://leesean.net/2008/09/22/icm-week-3-sakura/</link>
		<comments>http://leesean.net/2008/09/22/icm-week-3-sakura/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 02:22:50 +0000</pubDate>
		<dc:creator>leesean</dc:creator>
				<category><![CDATA[ICM]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[NYU]]></category>
		<category><![CDATA[Cherry Blossoms]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Sakura]]></category>

		<guid isPermaLink="false">http://leesean.net/?p=1119</guid>
		<description><![CDATA[In week 3 of Intro to Computational Media at ITP, we learned about functions and objects in Processing.  I also peaked ahead to arrays so I could execute my idea.  I was inspired by my t-shirt (below), which is a Japanese design of cherry blossom petals (sakura in Japanese) blowing in the wind. Here is [...]]]></description>
			<content:encoded><![CDATA[<p>In week 3 of <a href="http://itp.nyu.edu/varwiki/Syllabus/ICM-Danny-Rozin-F08">Intro to Computational Media at ITP</a>, we learned about <a href="http://www.processing.org/learning/examples/functions.html">functions</a> and <a href="http://www.processing.org/learning/examples/objects.html">objects</a> in <a href="http://processing.org/">Processing</a>.  I also peaked ahead to <a href="http://processing.org/learning/examples/array.html">arrays</a> so I could execute my idea.  I was inspired by my t-shirt (below), which is a Japanese design of cherry blossom petals (<em>sakura</em> in Japanese) blowing in the wind.</p>
<p><a href="http://leesean.net/wp-content/uploads/2008/09/sakura_t-shirt1.jpg"><img class="alignnone size-medium wp-image-1122" title="sakura_t-shirt1" src="http://leesean.net/wp-content/uploads/2008/09/sakura_t-shirt1.jpg" alt="" /></a></p>
<p><a href="http://leesean.net/itp/icm/week3/">Here</a> is my abstract Processing version (or click on the screenshot below to view). Press any key or click the mouse in the square to scatter cherry blossom petals.</p>
<p><a href="http://leesean.net/itp/icm/week3/"><img src="http://leesean.net/itp/icm/week3/sakura_screenshot.png" alt="" /></a></p>
<p><a href="http://leesean.net/itp/icm/week3/ICM_week3A.pde">View source code</a></p>
<div id="crp_related"><h4>Related Posts</h4><ul><li><a href="http://leesean.net/2008/09/12/icm-week-2-assignment/" rel="bookmark" class="crp_title">ICM Week 2 Assignment</a></li><li><a href="http://leesean.net/2008/10/05/icm-sakura-revisited-and-koyo/" rel="bookmark" class="crp_title">ICM: Sakura (Revisited) and Koyo</a></li><li><a href="http://leesean.net/2008/09/04/intro-to-computational-media-week-1-assignment/" rel="bookmark" class="crp_title">Intro to Computational Media Week 1 Assignment</a></li><li><a href="http://leesean.net/2008/10/15/icm-midterm-proposal/" rel="bookmark" class="crp_title">ICM Midterm Proposal</a></li><li><a href="http://leesean.net/2009/02/12/flash-assignment-2/" rel="bookmark" class="crp_title">Flash Assignment 2</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://leesean.net/2008/09/22/icm-week-3-sakura/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ICM Week 2 Assignment</title>
		<link>http://leesean.net/2008/09/12/icm-week-2-assignment/</link>
		<comments>http://leesean.net/2008/09/12/icm-week-2-assignment/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 02:23:51 +0000</pubDate>
		<dc:creator>leesean</dc:creator>
				<category><![CDATA[ICM]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[NYU]]></category>
		<category><![CDATA[Processing]]></category>

		<guid isPermaLink="false">http://leesean.net/?p=1081</guid>
		<description><![CDATA[Here is my Processing assignment from week 2 of Intro to Computational Media at ITP.  If it looks familiar, it is because I used my design from week 1 as a starting point.  Then I used variables and conditionals to animate the drawing.  Click here or on the screenshot below to view it in action.  [...]]]></description>
			<content:encoded><![CDATA[<p>Here is my <a href="http://processing.org/">Processing</a> assignment from week 2 of <a href="http://itp.nyu.edu/varwiki/Syllabus/ICM-Danny-Rozin-F08">Intro to Computational Media</a> at ITP.  If it looks familiar, it is because I used <a href="http://leesean.net/2008/09/04/intro-to-computational-media-week-1-assignment/">my design from week 1</a> as a starting point.  Then I used variables and conditionals to animate the drawing.  <a href="http://leesean.net/itp/icm/week2/">Click here</a> or on the screenshot below to view it in action.  While viewing the piece, press any key or click the mouse and drag the design and see what happens.  Enjoy the hypnosis!  Also, for Mac users, Processing isn&#8217;t playing well with Firefox, so make sure to use Safari to view.</p>
<p><a href="http://leesean.net/itp/icm/week2/"><img src="http://leesean.net/itp/icm/week1/screenshot.jpg" alt="" /></a></p>
<div id="crp_related"><h4>Related Posts</h4><ul><li><a href="http://leesean.net/2008/09/04/intro-to-computational-media-week-1-assignment/" rel="bookmark" class="crp_title">Intro to Computational Media Week 1 Assignment</a></li><li><a href="http://leesean.net/2008/09/22/icm-week-3-sakura/" rel="bookmark" class="crp_title">ICM: Week 3 &#8211; Sakura</a></li><li><a href="http://leesean.net/2008/10/05/icm-sakura-revisited-and-koyo/" rel="bookmark" class="crp_title">ICM: Sakura (Revisited) and Koyo</a></li><li><a href="http://leesean.net/2008/11/08/icm-final-project-proposal-text2drum/" rel="bookmark" class="crp_title">ICM Final Project Proposal: Text2Drum</a></li><li><a href="http://leesean.net/2008/10/15/icm-midterm-proposal/" rel="bookmark" class="crp_title">ICM Midterm Proposal</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://leesean.net/2008/09/12/icm-week-2-assignment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Intro to Computational Media Week 1 Assignment</title>
		<link>http://leesean.net/2008/09/04/intro-to-computational-media-week-1-assignment/</link>
		<comments>http://leesean.net/2008/09/04/intro-to-computational-media-week-1-assignment/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 22:48:37 +0000</pubDate>
		<dc:creator>leesean</dc:creator>
				<category><![CDATA[ICM]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[NYU]]></category>
		<category><![CDATA[Processing]]></category>

		<guid isPermaLink="false">http://leesean.net/?p=1036</guid>
		<description><![CDATA[Here is my first week&#8217;s assignment for my Intro to Computational Media class at ITP with Danny Rozin.  We are learning the Processing programming language.  The assignment was to create our own beautiful drawing with Processing using only 2D primitive shapes. My drawing is a study of form, colors, and composition.  I used only circles, [...]]]></description>
			<content:encoded><![CDATA[<p>Here is my first week&#8217;s assignment for my <a href="http://itp.nyu.edu/varwiki/Syllabus/ICM-Danny-Rozin-F08">Intro to Computational Media class at ITP with Danny Rozin</a>.  We are learning the Processing programming language.  The assignment was to create our own beautiful drawing with Processing using only 2D primitive shapes.</p>
<p>My drawing is a study of form, colors, and composition.  I used only circles, rectangles/squares and triangles.  I played with different degrees of color transparency (alpha) to layer shapes and colors.  As Scott McCloud pointed out in Understanding Comics (assigned reading in my <a href="http://itp.nyu.edu/~mp51/commlab/moncommlab.html">Communications Lab</a> class), circles/dots interact with the other random shapes to create eyes, faces, and breasts in the human mind, even in seemingly abstract drawings, which points to the anthro-centric hard-wiring of the human brain&#8217;s visual processing systems.</p>
<p><a href="http://leesean.net/itp/icm/week1/">Click</a> on the screenshot below to play with the interactive version.  Move your mouse around the drawing and see how it reacts.</p>
<p><a href="http://leesean.net/itp/icm/week1/"><img src="http://leesean.net/itp/icm/week1/screenshot.jpg" alt="" /></a></p>
<div id="crp_related"><h4>Related Posts</h4><ul><li><a href="http://leesean.net/2008/09/12/icm-week-2-assignment/" rel="bookmark" class="crp_title">ICM Week 2 Assignment</a></li><li><a href="http://leesean.net/2008/09/22/icm-week-3-sakura/" rel="bookmark" class="crp_title">ICM: Week 3 &#8211; Sakura</a></li><li><a href="http://leesean.net/2008/10/05/icm-sakura-revisited-and-koyo/" rel="bookmark" class="crp_title">ICM: Sakura (Revisited) and Koyo</a></li><li><a href="http://leesean.net/2008/11/08/icm-final-project-proposal-text2drum/" rel="bookmark" class="crp_title">ICM Final Project Proposal: Text2Drum</a></li><li><a href="http://leesean.net/2008/09/22/comm-lab-week-3-30-minute-film-festival/" rel="bookmark" class="crp_title">Comm Lab Week 3: 30 Minute Film Festival</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://leesean.net/2008/09/04/intro-to-computational-media-week-1-assignment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

