<?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>Intermezzo</title>
	<atom:link href="http://www.michelepasin.org/musicblog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.michelepasin.org/musicblog</link>
	<description>Sounds, code, images</description>
	<lastBuildDate>Sun, 15 Apr 2012 17:29:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Composing at the metalevel</title>
		<link>http://www.michelepasin.org/musicblog/2012/03/09/composing-at-the-metalevel/</link>
		<comments>http://www.michelepasin.org/musicblog/2012/03/09/composing-at-the-metalevel/#comments</comments>
		<pubDate>Fri, 09 Mar 2012 12:20:17 +0000</pubDate>
		<dc:creator>magicrebirth</dc:creator>
				<category><![CDATA[livecoding]]></category>
		<category><![CDATA[theory]]></category>
		<category><![CDATA[algorithmiccomposition]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[taube]]></category>

		<guid isPermaLink="false">http://www.michelepasin.org/musicblog/?p=1109</guid>
		<description><![CDATA[I&#8217;ve started reading &#8220;Notes from the Metalevel: An Introduction to Computer Composition&#8220;, by Heinrich Taube, and realised I should have done that a long time ago! &#8220;Notes From the Metalevel is a practical introduction to computer composition. It is primarily intended for student composers interested in learning how computation can provide them with a new [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve started reading &#8220;<a href="http://www.routledge.com/books/details/9789026519758/">Notes from the Metalevel: An Introduction to Computer Composition</a>&#8220;, by Heinrich Taube, and realised I should have done that a long time ago! </p>
<p><img src="http://images.tandf.co.uk/common/jackets/weblarge/978902651/9789026519758.jpg" /></p>
<p>&#8220;Notes From the Metalevel is a practical introduction to computer composition. It is primarily intended for student composers interested in learning how computation can provide them with a new paradigm for musical composition.&#8221; I happened to have a pdf version of the book, but the good news is that there&#8217;s an <a href="http://www.moz.ac.at/sem/lehre/lib/bib/software/cm/Notes_from_the_Metalevel/index.html">html version of it</a> too, which includes also all the midi files of the numerous examples included in the book. So make sure you check that out, if you&#8217;re interested in computer-based composition. You might also be interested in this <a href="http://www.computermusicjournal.org/reviews/29-3/phillips-taube.html">review on computer music journal</a>, and this <a href="http://camil.music.illinois.edu/Classes/404A1/">course materials</a> from Taube&#8217;s class at Illinois. </p>
<p>The preface to the fist chapter contains this suggestive excerpt from Leonard Schlain&#8217;s <em><a href="http://www.alphabetvsgoddess.com/index.html">The Alphabet Versus the Goddess</a></em>:</p>
<blockquote><p>The one crowded space in Father Perry&#8217;s house was his bookshelves. I gradually came to understand that the marks on the pages were trapped words. Anyone could learn to decipher the symbols and turn the trapped words loose again into speech. The ink of the print trapped the thoughts; they could no more get away than a doomboo could get out of a pit. When the full realization of what this meant flooded over me, I experienced the same thrill and amazement as when I had my first glimpse of the bright lights of Konakry. I shivered with the intensity of my desire to learn to do this wondrous thing myself.<br />
(spoken by Prince Modupe, a west African prince who learned to read as an adult)
</p></blockquote>
<p>Taube&#8217;s goes on (page 19-20) and uses it as a metaphor of what algorithmic composition (i.e., metalevel composition) is:</p>
<blockquote><p>
It is impossible to know exactly how Prince Modupe felt when he discovered a process by which his very thoughts could be trapped and released at will again into speech. But I think his epiphany must be close to what I experienced when, as a young composer, I was first shown how I could use a computer to represent my musical ideas and then &#8220;release them&#8221; into musical compositions. […] </p>
<p>At that instant it became clear to me that there was an entire level of notation above the scores that I had been writing in my regular composition classes, a level I knew nothing about! But I could see that in this level it was possible to notate my compositional ideas in a precise manner and work with them in an almost physical way, as &#8220;trapped words&#8221; that could be unleashed into musical sound whenever I wanted. […]</p>
<p>Given the existence of the acoustic and score representations one might ask if there is yet another representation that constitutes a level of abstraction above the performance score? The answer, of course, is yes; it is what this book terms the metalevel. If the score represents the composition then the metalevel represents the composition of the composition. A metalevel representation of music is concerned with representing the activity, or process, of musical composition as opposed to its artifact, or score. […] </p>
<p>This book is about using the computer to instantiate this level: to define, model and represent the compositional processes, formalism and structures that are articulated in a musical score and acoustic performance but are not literally represented there. By using a computer the composer can work with an explicit metalevel notation, or language, that makes the metalevel as tangible as the performance and acoustic levels.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.michelepasin.org/musicblog/2012/03/09/composing-at-the-metalevel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Special issue of CMJ DVD on livecoding</title>
		<link>http://www.michelepasin.org/musicblog/2012/01/13/special-issue-of-cmj-dvd-on-livecoding/</link>
		<comments>http://www.michelepasin.org/musicblog/2012/01/13/special-issue-of-cmj-dvd-on-livecoding/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 10:02:47 +0000</pubDate>
		<dc:creator>magicrebirth</dc:creator>
				<category><![CDATA[livecoding]]></category>
		<category><![CDATA[academic]]></category>
		<category><![CDATA[dvd]]></category>
		<category><![CDATA[journal]]></category>

		<guid isPermaLink="false">http://www.michelepasin.org/musicblog/?p=1103</guid>
		<description><![CDATA[The latest issue of the Computer Music Journal is now available, and it includes a DVD full of livecoding bonanza. Because this is the Winter issue, it includes the annual CMJ DVD, whose program notes appear near the end of the issue. The curators for the compositions on this year’s DVD are specialists in live [...]]]></description>
			<content:encoded><![CDATA[<p>The latest issue of the <a href="http://www.mitpressjournals.org/loi/comj?ai=sj&#038;mi=0&#038;af=R">Computer Music Journal</a> is now available, and it includes a DVD full of livecoding bonanza.</p>
<blockquote><p>Because this is the <a href="http://www.mitpressjournals.org/toc/comj/35/4">Winter issue</a>, it includes the annual CMJ DVD, whose program notes appear near the end of the issue. The curators for the compositions on this year’s DVD are specialists in live cod- ing, the practice of onstage computer programming whose real-time output is an improvised and often collabora- tive musical performance. As always, the DVD also includes sound and video examples to accompany recent articles, as well as related files on the DVD-ROM portion of the disc.</p></blockquote>
<p>A full description of the contents of the DVD is available <a href="http://muse.jhu.edu/journals/computer_music_journal/v035/35.4.notes.html">here</a> (and <a href="http://www.mitpressjournals.org/doi/abs/10.1162/COMJ_x_00112">here</a> if you&#8217;re not benefitting from an academic subscription), and I&#8217;m very proud to say that it includes also one of my livecoding pieces, <a href="http://www.michelepasin.org/artifacts/music/atmevent/">Untitled 12</a>, performed live at the Anatomy Museum livecoding event in 2010. </p>
<p><a href="http://www.flickr.com/photos/mikele/6688959507/" title="CMJ dvd - front by MagIcReBirth, on Flickr"><img src="http://farm8.staticflickr.com/7159/6688959507_b3b76253ba.jpg" width="500" height="500" alt="CMJ dvd - front"></a></p>
<p><a href="http://www.flickr.com/photos/mikele/6688959057/" title="CMJ dvd - back by MagIcReBirth, on Flickr"><img src="http://farm8.staticflickr.com/7027/6688959057_a2faac33a7.jpg" width="500" height="491" alt="CMJ dvd - back"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.michelepasin.org/musicblog/2012/01/13/special-issue-of-cmj-dvd-on-livecoding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Article: Thought and Performance, Live Coding Music, Explained to Anyone</title>
		<link>http://www.michelepasin.org/musicblog/2011/12/26/article-thought-and-performance-live-coding-music-explained-to-anyone/</link>
		<comments>http://www.michelepasin.org/musicblog/2011/12/26/article-thought-and-performance-live-coding-music-explained-to-anyone/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 11:15:09 +0000</pubDate>
		<dc:creator>magicrebirth</dc:creator>
				<category><![CDATA[livecoding]]></category>
		<category><![CDATA[theory]]></category>
		<category><![CDATA[article]]></category>

		<guid isPermaLink="false">http://www.michelepasin.org/musicblog/?p=1093</guid>
		<description><![CDATA[I bookmarked this article on createdigitalmusic.com a while ago (it&#8217;s from Jul 2010) and ran into it again today.. &#8220;Thought and Performance, Live Coding Music, Explained to Anyone – Really&#8221; contains several simple but thought provoking ideas about livecoding and its relevance in the (traditional) music world. Here&#8217;s a couple of excerpts: Secrets such as [...]]]></description>
			<content:encoded><![CDATA[<p>I bookmarked this article on createdigitalmusic.com a while ago (it&#8217;s from Jul 2010) and ran into it again today.. &#8220;<a href="http://createdigitalmusic.com/2010/07/thought-and-performance-live-coding-music-explained-to-anyone-really/#idc-cover">Thought and Performance, Live Coding Music, Explained to Anyone – Really</a>&#8221; contains several simple but thought provoking ideas about livecoding and its relevance in the (traditional) music world.</p>
<p>Here&#8217;s a couple of excerpts:</p>
<blockquote><p>Secrets such as why the programming language Lisp inspires religious devotion, or how someone in their right mind would ever consider programming onstage as a form of musical performance, represent the sort of geekery that would seem to be the domain of an elite.
</p></blockquote>
<blockquote><p>I doubt very seriously that live coding is the right performance medium for all computer musicians. [..] But Ramsay reveals what live coding music is. It’s compositional improvisation, and code simply lays bare the workings of the compositional mind as that process unfolds. Not everyone will understand the precise meaning of what they see, but there’s an intuitive intimacy to the odd sight of watching someone type code. It’s honest; there’s no curtain between you and the wizard.
</p></blockquote>
<p>An interesting comment from a reader (Damon) puts forward what I&#8217;d call the &#8216;livecoding as programming-virtuoso niche&#8221; view:</p>
<blockquote><p>The live coding thing is clearly an amazing talent. I admire anyone who can do that, but it does seem pretty much a sophisticated parlor trick unless the music resulting can stand on its own. </p>
<p>The question becomes, were you to hear the piece without observing the live coding performance, would it stand up, or is the quality of the piece augmented by the way in which it was composed?</p>
<p>Is a decent painting painted by someone who paints blindfolded something I would rather see than an excellent painting by someone who paints in a conventional fashion?</p>
<p>Cause unless the live coder can spin something up that I would enjoy listening to on my portable media player, I feel like music takes a back seat to the musician, which is a truly peculiar something.</p>
<p>[…]</p>
<p>This is not to say live coding is something to be ignored, but where from ever in history have we asked this question? Does the musician matter more than the music?
</p></blockquote>
<p>And another, even more critical comment from another reader:</p>
<blockquote><p>It is not about letting the audience in at all. It&#8217;s about cultivating an stage presence of virtuosic technical wizardry. No one in the audience understands the code and that&#8217;s why everyone marvels at the &#8220;magic&#8221;. Worse still it&#8217;s Lisp, a particularly archaic and obfuscated computer language.</p></blockquote>
<p>=+=</p>
<p>I think this is all very useful to read, as it shows what non specialists may think of livecoding. I&#8217;ve been asking myself similar questions a lot of times, but never really reached a clear conclusion. Is livecoding a music-making activity, or is it best defined as multimedia-oriented programming? </p>
<p>I personally got into livecoding as a musician first, programmer second. As a result I usually see it as some sort of advanced music-making tool; however, funnily enough, in order for that to happen I need to program the livecoding environment and fine-tune it so that it matches better my approach to music. And when I do that, I inevitably lose the closure to the &#8216;instrument&#8217; that would let me approach it as a &#8216;musical&#8217; instrument. And I end up in the role of &#8216;multimedia programmer&#8217;. </p>
<p>It&#8217;s a cyclical process, which makes me think: maybe what&#8217;s so cool about it. Livecoding environments are malleable meta-instruments that let you create (software) music instruments. </p>
<p>So the music &#8211; the end result &#8211; is definitely part of it. But the process, the <em>how</em> in the music creation business is also what we have in focus here. For this process is also eminently creative (and here lies the difference with many other digital music &#8216;creation&#8217; tools) and, maybe most importantly, this process is abstracted and codified and thus potentially reproducible and reusable by others. </p>
<p>Any comments?</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michelepasin.org/musicblog/2011/12/26/article-thought-and-performance-live-coding-music-explained-to-anyone/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using Impromptu to visualize RSS feeds</title>
		<link>http://www.michelepasin.org/musicblog/2011/12/21/using-impromptu-to-visualize-rss-feeds/</link>
		<comments>http://www.michelepasin.org/musicblog/2011/12/21/using-impromptu-to-visualize-rss-feeds/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 13:22:30 +0000</pubDate>
		<dc:creator>magicrebirth</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[visualization]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.michelepasin.org/musicblog/?p=1073</guid>
		<description><![CDATA[Some time ago I&#8217;ve been experimenting with the processing and display of RSS feeds within Impromptu, and as a result I built a small app that retrieves the news feed from The Guardian online and displays on a canvas. I&#8217;ve got a bit of free time in the next couple of weeks, so last night [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago I&#8217;ve been experimenting with the processing and display of <a href="http://www.google.co.uk/url?sa=t&#038;rct=j&#038;q=rss%20feed&#038;source=web&#038;cd=1&#038;ved=0CD0QFjAA&#038;url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FRSS&#038;ei=K9jxTtyyMY-K4gSwibHBAQ&#038;usg=AFQjCNEdBSkFc9gzQ_IRDoz4mZzyuZwfbw">RSS feeds</a> within <a href="http://impromptu.moso.com.au/">Impromptu</a>, and as a result I built a small app that retrieves the news feed from <a href="http://www.guardian.co.uk/">The Guardian</a> online and displays on a canvas.<br />
I&#8217;ve got a bit of free time in the next couple of weeks, so last night I thought it was time to polish it a little and make it available on this blog (who knows maybe someone else will use it as starting point for another project). </p>
<p><a href="http://www.flickr.com/photos/mikele/6549002895/" title="Visualizing rss feeds with Impromptu by MagIcReBirth, on Flickr"><img src="http://farm8.staticflickr.com/7147/6549002895_2b42b95cef.jpg" width="500" height="240" alt="Visualizing rss feeds with Impromptu"></a></p>
<p>There&#8217;re a thousand improvements that could be done to it still, but the core of the application is there: I packaged it as a standalone app that you can <a href="http://www.box.com/s/oprvyybridp0gtij8j5d">download here</a>. (use the &#8216;show package contents&#8217; Finder command to see the source code). </p>
<p>The application relies on a bunch of XML processing functions that I found within Impromptu &#8216;examples&#8217; folder (specifically, it&#8217;s the example named <a href="http://impromptu.moso.com.au/examples_2.5/35_objc_xml_lib.html">35_objc_xml_lib</a>). I pruned that a bit so to fit my purposes and renamed it <span style="font-family:monospace;color:#000000; ">xml_lib.scm</span>. </p>
<p>By using that, I created a function that extracts title and url info from the guardian feed:</p>
<pre style='color:#000000;background:#ffffff;'><span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>load</span> <span style='color:#0000e6; '>"xml_lib.scm"</span><span style='color:#808030; '>)</span>
<span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>define</span> feedurl <span style='color:#0000e6; '>"http://feeds.guardian.co.uk/theguardian/world/rss"</span><span style='color:#808030; '>)</span>

<span style='color:#696969; '>;;</span>
<span style='color:#696969; '>;; loads the feed and extracts title and url</span>
<span style='color:#696969; '>;;</span>

<span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>define</span> get-articles-online
     <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>lambda</span> <span style='color:#808030; '>(</span><span style='color:#808030; '>)</span>
        <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>let*</span> <span style='color:#808030; '>(</span><span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>out</span> <span style='color:#800080; '>'</span><span style='color:#808030; '>(</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
               <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>feed</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>xml:load-url</span> feedurl<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
               <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>titles</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>objc:nsarray->list</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>xml:xpath</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>xml:get-root-node</span> feed<span style='color:#808030; '>)</span>
                                                <span style='color:#0000e6; '>"channel/item/title/text()"</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
               <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>urls</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>objc:nsarray->list</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>xml:xpath</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>xml:get-root-node</span> feed<span style='color:#808030; '>)</span>
                                                <span style='color:#0000e6; '>"channel/item/link/text()"</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
           <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>for-each</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>lambda</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>x</span> y<span style='color:#808030; '>)</span>
                        <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>let</span> <span style='color:#808030; '>(</span><span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>xx</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>objc:nsstring->string</span> x<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
                              <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>yy</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>objc:nsstring->string</span> y<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
                           <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>set!</span> out <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>append</span> out <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>list</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>list</span> xx yy<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
                titles urls<span style='color:#808030; '>)</span>
           out<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
</pre>
<p>Some feed titles are a bit longish, so I added a utility function <span style="font-family:monospace;color:#000000; ">formattext</span> that wraps the titles&#8217; text if they exceed a predefined length. </p>
<pre style='color:#000000;background:#ffffff;'><span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>define</span> formattext
   <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>lambda</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>maxlength</span> txt posx posy<span style='color:#808030; '>)</span>
      <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>let</span> <span style='color:#808030; '>(</span><span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>l</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>string-length</span> txt<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
         <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>if</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>></span> l maxlength<span style='color:#808030; '>)</span>
             <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>let</span> loop <span style='color:#808030; '>(</span><span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>i</span> <span style='color:#008c00; '>0</span><span style='color:#808030; '>)</span>
                        <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>j</span> maxlength<span style='color:#808030; '>)</span> <span style='color:#696969; '>;; comparison value: it decreases at each recursion (except the first one) </span>
                        <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>topvalue</span> maxlength<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span> <span style='color:#696969; '>;; komodo value : must be equal to j at the beginning</span>
                <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>if</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>equal?</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>-</span> topvalue i<span style='color:#808030; '>)</span> j<span style='color:#808030; '>)</span> <span style='color:#696969; '>;; the first time</span>
                    <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>loop</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>+</span> i <span style='color:#008c00; '>1</span><span style='color:#808030; '>)</span> j topvalue<span style='color:#808030; '>)</span>
                    <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>begin</span>   <span style='color:#696969; '>;(print (substring txt (- topvalue i) j))</span>
                             <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>if</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>string=?</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>substring</span> txt <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>-</span> topvalue i<span style='color:#808030; '>)</span> j<span style='color:#808030; '>)</span> <span style='color:#0000e6; '>" "</span><span style='color:#808030; '>)</span>
                                 <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>string-append</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>substring</span> txt <span style='color:#008c00; '>0</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>-</span> topvalue i<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
                                                <span style='color:#0000e6; '>"\n"</span>
                                                <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>substring</span> txt <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>-</span> topvalue i<span style='color:#808030; '>)</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>string-length</span> txt<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
                                 <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>if</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>&lt;</span> i topvalue<span style='color:#808030; '>)</span> <span style='color:#696969; '>;;avoid negative indexes in substring</span>
                                     <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>loop</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>+</span> i <span style='color:#008c00; '>1</span><span style='color:#808030; '>)</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>-</span> j <span style='color:#008c00; '>1</span><span style='color:#808030; '>)</span> topvalue<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
             txt<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
</pre>
<p>And here&#8217;s the <strong>main loop</strong>: it goes through all the feed items at a predefined speed, and displays it on the canvas using a cosine oscillator to vary the colours a bit. At the end of it I&#8217;m also updating 3 global variables that are used for the mouse-click-capturing routine. </p>
<pre style='color:#000000;background:#ffffff;'><span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>define</span> displayloop
   <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>lambda</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>beat</span> feeds<span style='color:#808030; '>)</span>
      <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>let*</span> <span style='color:#808030; '>(</span><span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>dur</span> <span style='color:#008c00; '>5</span><span style='color:#808030; '>)</span>
             <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>posx</span>  <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>random</span> <span style='color:#008c00; '>0</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>-</span> *canvas_max_x* <span style='color:#008c00; '>350</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
             <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>posy</span>  <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>random</span> <span style='color:#008c00; '>10</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>-</span> *canvas_max_y* <span style='color:#008c00; '>150</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
             <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>txt</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>formattext</span> <span style='color:#008c00; '>40</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>car</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>car</span> feeds<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span> posx posy<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
             <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>dim</span> <span style='color:#696969; '>;(+ (length feeds) 10))                  </span>
                  <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>if</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>=</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>length</span> feeds<span style='color:#808030; '>)</span> <span style='color:#008c00; '>29</span><span style='color:#808030; '>)</span>
                      <span style='color:#008c00; '>60</span>  <span style='color:#696969; '>;; if it's the first element of the feed list make it bigger</span>
                      <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>random</span> <span style='color:#008c00; '>25</span> <span style='color:#008c00; '>50</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
             <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>fill</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>if</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>=</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>length</span> feeds<span style='color:#808030; '>)</span> <span style='color:#008c00; '>29</span><span style='color:#808030; '>)</span>
                         <span style='color:#800080; '>'</span><span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>1</span> <span style='color:#008c00; '>0</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>random</span><span style='color:#808030; '>)</span> <span style='color:#008c00; '>1</span><span style='color:#808030; '>)</span>  <span style='color:#696969; '>;; if it's the first element of the feed list make it reddish</span>
                         <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>list</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>random</span><span style='color:#808030; '>)</span> <span style='color:#008c00; '>1</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>random</span><span style='color:#808030; '>)</span> <span style='color:#008c00; '>1</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
             <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>style</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>gfx:make-text-style</span> <span style='color:#0000e6; '>"Arial"</span> dim fill<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
         <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>gfx:clear-canvas</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>*metro*</span> beat<span style='color:#808030; '>)</span> *canvas* <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>list</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>cosr</span> <span style='color:#008000; '>.5</span> <span style='color:#008000; '>.6</span> <span style='color:#008000; '>.001</span><span style='color:#808030; '>)</span> <span style='color:#008c00; '>0</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>cosr</span> <span style='color:#008000; '>.5</span> <span style='color:#008000; '>.6</span> <span style='color:#008000; '>.001</span><span style='color:#808030; '>)</span> <span style='color:#008000; '>.5</span> <span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
         <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>gfx:draw-text</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>*metro*</span> beat<span style='color:#808030; '>)</span> *canvas* txt style <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>list</span> posx posy<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
         <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>set!</span> *pos_x* posx<span style='color:#808030; '>)</span>
         <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>set!</span> *pos_y* posy<span style='color:#808030; '>)</span>
         <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>set!</span> *current_url* <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>cadr</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>car</span> feeds<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
     <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>callback</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>*metro*</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>+</span> beat <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>*</span> <span style='color:#008c00; '>1</span><span style='color:#808030; '>/</span><span style='color:#008c00; '>2</span> dur<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span> <span style='color:#800080; '>'displayloop</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>+</span> beat dur<span style='color:#808030; '>)</span>
               <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>if-cdr-notnull</span> feeds
                               <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>get-articles-online</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
</pre>
<p>In order to capture the clicks on the feed titles I simply create a rectangle path based on the x,y coordinates randomly assigned when displaying the title on the canvas. These coordinates are stored in global variables so that they can be updated constantly. </p>
<pre style='color:#000000;background:#ffffff;'><span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>io:register-mouse-events</span> *canvas*<span style='color:#808030; '>)</span>
<span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>define</span> io<span style='color:#400000; '>:mouse-down</span>
   <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>lambda</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>x</span> y<span style='color:#808030; '>)</span>
      <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>print</span> x y<span style='color:#808030; '>)</span>
      <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>when</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>gfx:point-in-path?</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>gfx:make-rectangle</span> *pos_x* *pos_y* <span style='color:#008c00; '>200</span> <span style='color:#008c00; '>200</span><span style='color:#808030; '>)</span> x y <span style='color:#808030; '>)</span>
            <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>util:open-url</span> *current_url*<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span><span style='color:#808030; '>)</span>
</pre>
<p>Finally, the <span style="font-family:monospace;color:#000000; ">util:open-url</span> opens up a url string in your browser (I&#8217;ve already talked about it <a href="http://www.michelepasin.org/musicblog/2010/02/15/impromptu-function-to-access-wiki-docs-from-the-editor/">here</a>). </p>
<p>You can see all of this code in action by <a href="http://www.box.com/s/oprvyybridp0gtij8j5d">downloading the app</a> and taking a look its contents (all the files are under Contents/Resources/app). </p>
<p><a href="http://www.flickr.com/photos/mikele/6549002521/" title="Visualizing rss feeds with Impromptu by MagIcReBirth, on Flickr"><img src="http://farm8.staticflickr.com/7011/6549002521_9b39fb2120.jpg" width="500" height="262" alt="Visualizing rss feeds with Impromptu"></a></p>
<p>Some other things it&#8217;d be nice to do:</p>
<li>Creating a routine that makes the <strong>transitions</strong> among feed items <strong>less abrupt</strong>, maybe by using canvas layers.</li>
<li>Refining the <strong>clicking events</strong> creation: now you can click only on the most recent title; moreover the clicking event handler is updated too quickly, thus unless you click on the titles as soon as it appears you won&#8217;t be able to trigger the open-url action.</li>
<li>Refining the <strong>xml-tree parsing</strong> function, which now is very very minimal. We could extract news entries description and other stuff that can make the app more informative.</li>
<li>Adding some <strong>background music</strong> to it.</li>
<p>Any other ideas?</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michelepasin.org/musicblog/2011/12/21/using-impromptu-to-visualize-rss-feeds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Article: Algorithmic Composition: Computational Thinking in Music</title>
		<link>http://www.michelepasin.org/musicblog/2011/10/06/article-algorithmic-composition-computational-thinking-in-music/</link>
		<comments>http://www.michelepasin.org/musicblog/2011/10/06/article-algorithmic-composition-computational-thinking-in-music/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 12:36:51 +0000</pubDate>
		<dc:creator>magicrebirth</dc:creator>
				<category><![CDATA[livecoding]]></category>
		<category><![CDATA[theory]]></category>
		<category><![CDATA[algorithmiccomposition]]></category>
		<category><![CDATA[article]]></category>
		<category><![CDATA[ideas]]></category>
		<category><![CDATA[serialism]]></category>

		<guid isPermaLink="false">http://www.michelepasin.org/musicblog/?p=1069</guid>
		<description><![CDATA[An article by Michael Edwards on algorithmic composition has been published last month on the Communications of the ACM journal. The article is titled Algorithmic Composition: Computational Thinking in Music. Although the article is quite introductory (Edwards makes it clear that the article &#8220;is more illustrative than all-inclusive, presenting examples of particular techniques and some [...]]]></description>
			<content:encoded><![CDATA[<p>An article by <a href="http://people.ace.ed.ac.uk/staff/medward2/">Michael Edwards</a> on algorithmic composition has been published last month on the Communications of the ACM journal. The article is titled <a href="http://cacm.acm.org/magazines/2011/7/109891-algorithmic-composition/fulltext">Algorithmic Composition: Computational Thinking in Music</a>. </p>
<p>Although the article is quite introductory (Edwards makes it clear that the article &#8220;is more illustrative than all-inclusive, presenting examples of particular techniques and some of the music that has been produced with them&#8221;) it is defintely an interesting read. I found quite a few nice ideas in it and also references to musics and musicians I wasn&#8217;t familiar with. </p>
<p>Follows a list of &#8216;highlights&#8217; from my iPad reader, to which I added hyperlinks to relevant explanatory materials:   </p>
<li>SERIALISM AS A CONTINUATION OF EARLY ALGORITHMIC COMPOSITION</li>
<blockquote><p>After World War II, many Western classical music composers continued to develop the serial technique invented by <a href="http://en.wikipedia.org/wiki/Arnold_Schoenberg">Arnold Schönberg</a> (1874–1951) et al. Though generally seen as a radical break with tradition, in light of the earlier historical examples just presented, <a href="http://en.wikipedia.org/wiki/Serialism">serialism’s</a> detailed organization can be viewed as no more than a continuation of the tradition of formalizing musical composition. Indeed, one of the new generation’s criticisms of Schönberg was that he radicalized only pitch structure, leaving other parameters (such as rhythm, dynamic, even form) in the 19th century. They looked to the music of Schönberg’s pupil <a href="http://en.wikipedia.org/wiki/Anton_Webern">Anton von Webern</a> for inspiration in organizing these other parameters according to serial principles. Hence the rise of the total serialists: <a href="http://en.wikipedia.org/wiki/Pierre_Boulez">Boulez</a>, <a href="http://en.wikipedia.org/wiki/Karlheinz_Stockhausen">Stockhausen</a>, <a href="http://en.wikipedia.org/wiki/Henri_Pousseur">Pousseur</a>, <a href="http://en.wikipedia.org/wiki/Luigi_Nono">Nono</a>, and others in Europe, and <a href="http://en.wikipedia.org/wiki/Milton_Babbitt">Milton Babbitt</a> and his students at Princeton.</p></blockquote>
<li>COMPOSERS: HILLER AND &#8220;THE ILLIAC SUITE FOR STRING QUARTET&#8221;</li>
<blockquote><p><a href="http://en.wikipedia.org/wiki/Lejaren_Hiller">Lejaren Hiller</a> (1924–1994) is widely recognized as the first composer to have applied computer programs to algorithmic composition. The use of specially designed, unique computer hardware was common at U.S. universities in the mid-20th century. Hiller used the Illiac computer at the University of Illinois, Urbana-Champaign, to create experimental new music with algorithms. His collaboration with Leonard Isaacson resulted in 1956 in the first known computer-aided composition, The Illiac Suite for String Quartet (<a href="http://en.wikipedia.org/wiki/Illiac_Suite">wiki</a> | <a href="http://www.youtube.com/watch?v=isvYe6yOPXQ&#038;feature=related">video</a>), programmed in binary, and using, among other techniques, Markov Chains in “random walk” pitch generation algorithms.</p></blockquote>
<li>CAGE ON THE DIFFERENCE BETWEEN TRADITIONAL AND COMPUTER- ASSISTED COMPOSITION</li>
<blockquote><p><a href="http://en.wikipedia.org/wiki/John_Cage">Cage</a> said in an interview during the composition of HPSCHD (<a href="http://en.wikipedia.org/wiki/HPSCHD">wiki</a> | <a href="http://www.youtube.com/watch?v=t_hTxJpWITw">video</a>), &#8220;Formerly, when one worked alone, at a given point a decision was made, and one went in one direction rather than another; whereas, in the case of working with another person and with computer facilities, the need to work as though decisions were scarce—as though you had to limit yourself to one idea—is no longer pressing. It’s a change from the influences of scarcity or economy to the influences of abundance and &#8211; I’d be willing to say—waste.&#8221;
</p></blockquote>
<li>COMPOSERS: XENAKIS</li>
<blockquote><p>Known primarily for his instrumental compositions but also as an engineer and architect, <a href="http://en.wikipedia.org/wiki/Iannis_Xenakis">Iannis Xenakis</a> was a pioneer of algorithmic composition and computer music. Using language typical of the sci-fi age, he wrote, “With the aid of electronic computers, the composer becomes a sort of pilot: he presses buttons, introduces coordinates, and supervises the controls of a cosmic vessel sailing in the space of sound, across sonic constellations and galaxies that he could formerly glimpse only in a distant dream.<br />
[...]<br />
Xenakis’s approach, which led to the <a href="http://en.wikipedia.org/wiki/Stochastic">Stochastic</a> Music Programme (henceforth SMP) and radically new pieces (such as <a href="http://www.youtube.com/watch?v=sWdQBblec0M">Pithoprakta</a>, 1956), used formulae originally developed by scientists to explain the behavior of gas particles (Maxwell’s and Boltzmann’s Kinetic Theory of Gases). He saw his stochastic compositions as clouds of sound, with individual notes as the analogue of gas particles.<br />
[...]<br />
His <a href="http://www.youtube.com/watch?v=vbU69HObLeg">Eonta</a> (1963–1964) for two trumpets, three tenor trombones, and piano was composed with SMP. The program was applied in particular to the creation of the massively complex opening piano solo.</p></blockquote>
<li>COMPOSERS: KOENIG</li>
<blockquote><p><a href="http://en.wikipedia.org/wiki/Gottfried_Michael_Koenig">Koenig</a> saw transcription (from computer output to musical score) as an important part of the process of algorithmic composition, writing, &#8220;Neither the histograms nor the connection algorithm contains any hints about the envisaged, ‘unfolded’ score, which consists of instructions for dividing the labor of the production changes mode, that is, the division into performance parts. The histogram, unfolded to reveal the individual time and parameter values, has to be split up into voices.&#8221;
</p></blockquote>
<li>THE CONTEMPORARY LANDSCAPE: A DIVISION BETWEEN COMPOSERS AND AI RESEARCHERS</li>
<blockquote><p>Contemporary (late 20th century) techniques tend to be hybrids of <a href="http://en.wikipedia.org/wiki/Deterministic_algorithm">deterministic</a> and <a href="http://en.wikipedia.org/wiki/Stochastic">stochastic</a> approaches. Systems using techniques from artificial intelligence (AI) and/or linguistics..<br />
[...]<br />
While naturally significant to AI research, linguistics, and computer science, such systems tend to be of limited use to composers writing music in a modern and personal style that perhaps resists codification because of its notational and sonic complexity and, more simply, its lack of sufficient and stylistically consistent data<br />
[...]<br />
Thus we can witness a division between composers concerned with creating new music with personalized systems and researchers interested in developing systems for machine learning and AI. The latter may quite understandably find it more useful to generate music in well-known styles not only because there is extant data but also because familiarity of material simplifies some aspects of the assessment of results. Naturally though, more collaboration between composers and researchers could lead to fruitful, aesthetically progressive results.
</p></blockquote>
<li>ALGORITHMIC COMPOSITION OUTSIDE ACADEMIA: BRIAN ENO</li>
<blockquote><p>Application of algorithmic-composition techniques is not restricted to academia or to the classical avant garde. Pop/ambient musician <a href="http://en.wikipedia.org/wiki/Brian_Eno">Brian Eno</a> (1948–) is known for his admiration and use of generative systems in Music for Airports (1978) [<a href="http://en.wikipedia.org/wiki/Ambient_1:_Music_for_Airports">wiki</a> | <a href="http://www.youtube.com/watch?v=B9kPIp4MtX0">video</a>] and other pieces. Eno was inspired by the American <a href="http://en.wikipedia.org/wiki/Minimalist_music">minimalists</a>, in particular <a href="http://en.wikipedia.org/wiki/Steve_Reich">Steve Reich</a> (1936–) and his tape piece It’s Gonna Rain (1965) [<a href="http://en.wikipedia.org/wiki/It's_Gonna_Rain">wiki</a> | <a href="http://www.youtube.com/watch?v=q0DQRfm0uL8">video</a>].<br />
[...]<br />
Eno said about his Discreet Music (1975) [<a href="http://en.wikipedia.org/wiki/Discreet_Music">wiki</a> | <a href="http://www.youtube.com/watch?v=SrBoE0ItRLc">video</a>], &#8220;Since I have always preferred making plans to executing them, I have gravitated towards situations and systems that, once set into operation, could create music with little or no intervention on my part. That is to say, I tend towards the roles of planner and programmer, and then become an audience to the results&#8221;.</p></blockquote>
<li>LIGETI ON THE RELATION BETWEEN MUSIC AND MATHEMATICS</li>
<blockquote><p>After leaving his native Hungary in the late 1950s, <a href="http://en.wikipedia.org/wiki/Ligeti">Ligeti</a> worked in the same studios as Cologne electronic music pioneers Karlheinz Stockhausen and Gottfried Michael Koenig though produced little electronic music of his own. However, his interest in science and mathematics led to several instrumental pieces influenced by, for example, fractal geometry and chaos theory. But these influences did not lead to a computer-based algorithmic approach. He was quoted in Steinitz saying, &#8220;Somewhere underneath, very deeply, there’s a common place in our spirit where the beauty of mathematics and the beauty of music meet. But they don’t meet on the level of algorithms or making music by calculation. It’s much lower, much deeper—or much higher, you could say.&#8221;
</p></blockquote>
<li>EXAMPLE: AN ALGORITHMIC MODEL OF LIGETI&#8217;S DESORDRE</li>
<blockquote><p>I have implemented algorithmic models of the first part of <a href="http://www.youtube.com/watch?v=qj9QlWltv8s">Désordre</a> in the open-source software system <a href="http://puredata.info/">Pure Data</a>, which, along with the following discussion, is based on analyses by Tobias Kunze,26 used here with permission, and Hartmut Kinzler. It is freely downloadable from my Web site <a href="http://www.michael-edwards.org/software/desordre.zip">http://www.michael-edwards.org/software/desordre.zip</a><br />
[...]<br />
The main argument of Désordre consists of foreground and background textures..<br />
[...]<br />
In Désordre we experience a clear, compelling, yet not entirely predictable musical development of rhythmic acceleration coupled with a movement from the middle piano register to the extremes of high and low, all expressed through two related and repeating melodic cycles with slightly differing lengths resulting in a combination that dislocates and leads to metrical disorder. I invite the reader to investigate this in more detail by downloading my software implementation.
</p></blockquote>
<li>ON THE NEGATIVE RECEPTION OF ALGORITHMIC COMPOSITION</li>
<blockquote><p>There has been (and still is) considerable resistance to algorithmic composition from all sides, from musicians to the general public. This resistance bears comparison to the reception of the supposedly overly mathematical serial approach introduced by the composers of the <a href="http://en.wikipedia.org/wiki/Second_Viennese_School">Second Viennese School</a> of the 1920s and 1930s. Alongside the techniques of other music composed from the beginning of the 20th century onward, the serial principle itself is frequently considered to be the reason the music—so-called modern music, though now close to 100 years old — may not appeal.<br />
[...]<br />
Algorithmic composition is often viewed as a sideline in contemporary musical activity, as opposed to a logical application and incorporation of compositional technique into the digital domain. Without wishing to imply that instrumental composition is in a general state of stagnation, if the computer is the universal tool, there is surely no doubt that not applying it to composition would be, if not exactly an example of Luddism, then at least to risk missing important aesthetic developments that only the computer can facilitate, and that other artistic fields already take advantage of. </p></blockquote>
<li>COMPOSING USING ALGORITHMIC METHODS: MISCONCEPTIONS</li>
<blockquote><p>Much of the resistance to algorithmic composition that persists to this day stems from the misguided bias that the computer, not the composer, composes the music. In the vast majority of cases where the composer is also the programmer, this is simply not true. As composer and computer musician Curtis Roads pointed out more than 15 years ago, it takes a good composer to design algorithms that result in music that captures the imagination.<br />
[...]<br />
Furthermore, using algorithmic-composition techniques does not by necessity imply less composition work or a shortcut to musical results; rather, it is a change of focus from note-to-note com- position to a top-down formalization of compositional process. Composition is, in fact, often slowed by the requirement that musical ideas be expressed and their characteristics encapsulated in a highly structured and non-musical general programming language. Learning the discipline of programming is itself a time-consuming and, for some composers, an insurmountable problem.</p></blockquote>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michelepasin.org/musicblog/2011/10/06/article-algorithmic-composition-computational-thinking-in-music/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Getting lost in the world of Laputa</title>
		<link>http://www.michelepasin.org/musicblog/2011/09/02/getting-lost-in-the-world-of-laputa/</link>
		<comments>http://www.michelepasin.org/musicblog/2011/09/02/getting-lost-in-the-world-of-laputa/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 19:27:13 +0000</pubDate>
		<dc:creator>magicrebirth</dc:creator>
				<category><![CDATA[digital art]]></category>
		<category><![CDATA[anime]]></category>
		<category><![CDATA[cartoon]]></category>
		<category><![CDATA[japan]]></category>
		<category><![CDATA[movies]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.michelepasin.org/musicblog/?p=1063</guid>
		<description><![CDATA[I am certainly not an anime expert &#8211; but after being in Japan for a couple of months last year I started developing an appreciation for this form of art. In particular, I fell in love with the work of Studio Ghibli, the Tokyo-based animation film studio which includes award director Hayao Miyazaki. The other [...]]]></description>
			<content:encoded><![CDATA[<p>I am certainly not an anime expert &#8211; but after being in Japan for a <a href="https://thejapanexperience.wordpress.com/">couple of months</a> last year I started developing an appreciation for this form of art. In particular, I fell in love with the work of <a href="http://en.wikipedia.org/wiki/Studio_Ghibli">Studio Ghibli</a>, the Tokyo-based animation film studio which includes award director  <a href="http://en.wikipedia.org/wiki/Hayao_Miyazaki">Hayao Miyazaki</a>. </p>
<p>The other day I watched for the first time &#8220;<strong>Laputa: Castle in the Sky</strong>&#8221; [<a href="http://en.wikipedia.org/wiki/Castle_in_the_Sky">wikipedia</a> | <a href="http://www.imdb.com/title/tt0092067/">imdb</a>], the first film created and released by Studio Ghibli in 1986. I found the cartoon so inspirational and touching that I though I&#8217;d post something about it. </p>
<p>The themes that emerge are not at all new in Studio Ghibli&#8217;s anime: the love for a primordial dimension where nature still remains untouched; the celebration of the human values of honesty and respect for others; the relationship between technology and ecology; the fascination with sci-fi, futuristic worlds.  All of this conveyed in two hours of Indiana Jones-style adventure..</p>
<p>[check out the video on youtube: <a href="http://www.youtube.com/watch?v=Q3AN0eDxE7E">http://www.youtube.com/watch?v=Q3AN0eDxE7E</a> I couldn't embed it due to copyright violation in some countries!]</p>
<p>Other information and reviews are available on this site: <a href="http://www.wingsee.com/ghibli/laputa/">http://www.wingsee.com/ghibli/laputa/</a>, including:</p>
<li><a href="http://www.washingtonpost.com/wp-srv/style/longterm/movies/videos/laputacastleintheskynrharrington_a0aac9.htm">Washington Post</a><br />
&#8220;Miyazaki&#8217;s world, so full of color and life, is always just across the borderline of imagination&#8221;</li>
<li><a href="http://www.stomptokyo.com/movies/laputa.html">Stomp Tokyo&#8217;s Review</a><br />
&#8220;Although the basic storyline (intrepid young hero rescues princess) is as cliche as can be, the world Miyazaki has created here is unlike any you&#8217;ve seen in any animated film, especially one made by Disney. Vaguely post-apocalyptic, this (mostly) pre-industrial society has produced a mix of simple farm life and fabulously complex propeller-driven flying machines. Laputa itself is wondrous.&#8221;</li>
<li><a href="http://animeworld.com/reviews/laputa.html">Anime World</a><br />
This story is one of the best I have ever heard and it is what makes this film really stand out. Twisting and turning, never giving you any clues as to what will happen next and keeping you constantly surprised and engaged, Laputa is a magnificent tale, the likes of which only Miyazaki could create.</li>
<p><a href="http://www.flickr.com/photos/mikele/6107131598/" title="Laputa 1 by MagIcReBirth, on Flickr"><img src="http://farm7.static.flickr.com/6066/6107131598_f96b2324ee.jpg" width="500" height="279" alt="Laputa 1"></a></p>
<p><a href="http://www.flickr.com/photos/mikele/6106583405/" title="Laputa 2 by MagIcReBirth, on Flickr"><img src="http://farm7.static.flickr.com/6086/6106583405_909ff94cf7.jpg" width="500" height="276" alt="Laputa 2"></a></p>
<p><a href="http://www.flickr.com/photos/mikele/6106582725/" title="Laputa 3 by MagIcReBirth, on Flickr"><img src="http://farm7.static.flickr.com/6194/6106582725_ae1cd1a162.jpg" width="500" height="274" alt="Laputa 3"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.michelepasin.org/musicblog/2011/09/02/getting-lost-in-the-world-of-laputa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Livecoding in Paris &amp; Strasbourg</title>
		<link>http://www.michelepasin.org/musicblog/2011/07/08/livecoding-in-paris-stransbourg/</link>
		<comments>http://www.michelepasin.org/musicblog/2011/07/08/livecoding-in-paris-stransbourg/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 11:44:23 +0000</pubDate>
		<dc:creator>magicrebirth</dc:creator>
				<category><![CDATA[events]]></category>
		<category><![CDATA[livecoding]]></category>
		<category><![CDATA[live]]></category>
		<category><![CDATA[paris]]></category>
		<category><![CDATA[strasbourg]]></category>

		<guid isPermaLink="false">http://www.michelepasin.org/musicblog/?p=1052</guid>
		<description><![CDATA[Two livecoding concerts coming up in the next days: - 9/7/11: A gig in Paris at La Generale, &#8220;Laboratoire artistique, politique et social&#8221;. 14, avenue Parmentier Paris XIe, Métro Voltaire (facebook &#124; lastfm) - 11/7/11: A workshop+gig at the 2011 Libre Software Meeting in Stransbourg (event page &#124; facebook &#124; lastfm). I&#8217;m going to play [...]]]></description>
			<content:encoded><![CDATA[<p>Two livecoding concerts coming up in the next days:</p>
<p>- 9/7/11: A gig in Paris at <a href="http://lagenerale.fr/">La Generale</a>, &#8220;Laboratoire artistique, politique et social&#8221;. 14, avenue Parmentier Paris XIe, Métro Voltaire (<a href="http://www.facebook.com/event.php?eid=238044802881179">facebook</a> | <a href="http://www.last.fm/event/1989879+Livecoding+concert">lastfm</a>) </p>
<p>- 11/7/11: A workshop+gig at the <a href="http://2011.rmll.info/?lang=en">2011 Libre Software Meeting</a> in Stransbourg (<a href="http://2011.rmll.info/Programme-du-festival?lang=en">event page</a> | <a href="http://www.facebook.com/event.php?eid=247195045307080">facebook</a> | <a href="http://www.last.fm/event/1989716+Livecoding+concert">lastfm</a>).</p>
<p>I&#8217;m going to play a new livecoded song called &#8216;<strong>Fjords</strong>&#8216;. During the last days I&#8217;ve also finalized several little things that make livecoding with Impromptu faster (and easier, at least for me), which is good, so I&#8217;m aiming at making available those too in the coming days&#8230;</p>
<p>Btw I&#8217;ll try to take videos of the various performances, so stay tuned!        </p>
<p><a href="http://www.flickr.com/photos/danstowell/5906464358/" title="Untitled by danstowell, on Flickr"><img src="http://farm2.static.flickr.com/1432/5906464358_a5a45afa02_z.jpg" width="453" height="640" alt=""></a></p>
<p>&nbsp;</p>
<p>[<strong>Update 11/7/11</strong>] Here&#8217;s a recording of the <strong>Paris</strong> gig:</p>
<p><iframe width="640" height="390" src="http://www.youtube.com/embed/Gh6TuUkeBZw" frameborder="0" allowfullscreen></iframe></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michelepasin.org/musicblog/2011/07/08/livecoding-in-paris-stransbourg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Livecoding is like gardening</title>
		<link>http://www.michelepasin.org/musicblog/2011/06/29/livecoding-is-like-gardening/</link>
		<comments>http://www.michelepasin.org/musicblog/2011/06/29/livecoding-is-like-gardening/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 17:27:58 +0000</pubDate>
		<dc:creator>magicrebirth</dc:creator>
				<category><![CDATA[livecoding]]></category>
		<category><![CDATA[theory]]></category>
		<category><![CDATA[composing]]></category>
		<category><![CDATA[eno]]></category>
		<category><![CDATA[quote]]></category>

		<guid isPermaLink="false">http://www.michelepasin.org/musicblog/?p=1044</guid>
		<description><![CDATA[Just ran into this interesting article by Brian Eno. It struck me as quite a fair representation of what livecoders do most of the time, when they create (maybe I should say &#8216;sculpt&#8217;) musical structures that evolve in time, as part of their performance: It’s intuitive to think that anything complex has to be made [...]]]></description>
			<content:encoded><![CDATA[<p>Just ran into this interesting article by <a href="http://en.wikipedia.org/wiki/Brian_Eno">Brian Eno</a>. It struck me as quite a fair representation of what livecoders do most of the time, when they create (maybe I should say &#8216;sculpt&#8217;) musical structures that evolve in time, as part of their performance:</p>
<blockquote><p>It’s intuitive to think that anything complex has to be made by something more complex, but evolution theory says that complexity arises out of simplicity. That’s a bottom-up picture. I like that idea as a compositional idea, that <strong>you can set in place certain conditions and let them grow. It makes composing more like gardening than architecture</strong></p></blockquote>
<p>It&#8217;s from <a href="http://www.soundonsound.com/sos/oct05/articles/brianeno.htm">http://www.soundonsound.com/sos/oct05/articles/brianeno.htm</a>.</p>
<p>&nbsp;</p>
<p><iframe width="425" height="349" src="http://www.youtube.com/embed/e6K67aaEYA0" frameborder="0" allowfullscreen></iframe></p>
<p>&nbsp;</p>
<p>Here is one of the songs from the album Eno is talking about in that article, <a href="http://en.wikipedia.org/wiki/Another_Day_on_Earth">Another Day on Earth</a>.</p>
<p>&nbsp;</p>
<p><iframe width="425" height="349" src="http://www.youtube.com/embed/NBnvRNDAKRc" frameborder="0" allowfullscreen></iframe></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michelepasin.org/musicblog/2011/06/29/livecoding-is-like-gardening/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bjork redefines the musician&#8217;s product with &#8216;Biophilia&#8217; album/app</title>
		<link>http://www.michelepasin.org/musicblog/2011/06/26/bjork-redefines-the-musicians-product-with-biophilia-albumapp/</link>
		<comments>http://www.michelepasin.org/musicblog/2011/06/26/bjork-redefines-the-musicians-product-with-biophilia-albumapp/#comments</comments>
		<pubDate>Sun, 26 Jun 2011 17:41:37 +0000</pubDate>
		<dc:creator>magicrebirth</dc:creator>
				<category><![CDATA[bands]]></category>
		<category><![CDATA[digital art]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[electronica]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://www.michelepasin.org/musicblog/?p=1042</guid>
		<description><![CDATA[I found out here and there on the web that Islandic artist Bjork is once again pushing the boundaries of experimental music by relasing a new album, Biophilia, which will be composed by both music and interactive media, in the form of an iPad app: Biophilia for iPad will include around 10 separate apps, all [...]]]></description>
			<content:encoded><![CDATA[<p>I found out here and there on the web that <a href="http://www.bjork.com/">Islandic artist Bjork</a> is once again pushing the boundaries of experimental music by relasing a new album, <a href="http://en.wikipedia.org/wiki/Biophilia_(album)">Biophilia</a>, which will be composed by both music and interactive media, in the form of an iPad app:</p>
<blockquote><p>Biophilia for iPad will include around <strong>10 separate apps, all housed within one &#8220;mother&#8221; app</strong>. Each of the smaller apps will relate to a different track from the album, allowing people to explore and interact with the song&#8217;s themes or even make a completely new version. It will also be an evolving entity that will grow as and when the album&#8217;s release schedule dictates, with new elements added. Scott Snibbe, an interactive artist who was commissioned by Björk last summer to produce the app, as well as the images for the live shows (which will combine his visuals with National Geographic imagery, mixed live from iPads on the stage), describes how Björk saw the possibilities of using apps, not as separate to the music, but as a vital component of the whole project. &#8220;Björk&#8217;s put herself way at the forefront here by saying, &#8216;We&#8217;ll release this album and these apps at the same time and they&#8217;re all part of the same story.&#8217; The app is an expression of the music, the story and the idea.&#8221;</p></blockquote>
<p>The review above is taken from <a href="http://1001tales.posterous.com/?tag=scottsnibbe">an article  on posterous.com</a>. How will the music/apps look like? Here&#8217;s an example:</p>
<blockquote><p>For one song, <strong>Virus, the app will feature a close-up study of cells being attacked by a virus to represent what Snibbe calls</strong>: &#8220;A kind of a love story between a virus and a cell. And of course the virus loves the cell so much that it destroys it.&#8221; The interactive game challenges the user to halt the attack of the virus, although the result is that the song will stop if you succeed. In order to hear the rest of the song, you have to let the virus take its course. Using some artistic license, the cells will also mouth along to the chorus. It&#8217;s this determination to fuse different elements together – be it juxtaposing a female choir from Greenland with the bleeps and glitches of electronic music pioneers Matmos during the Vespertine tour, or meshing soaring strings and jagged beats on the Homogenic album – that helps explain the power and success of Björk&#8217;s collaborations&#8230;.. </p></blockquote>
<p>Biophilia is the result of a collaboration with <a href="http://www.snibbe.com/">Scott Sona Snibble</a>, a digital artist active in the app-world with products such as &#8216;OscilloScoop&#8217;:</p>
<p><iframe width="560" height="349" src="http://www.youtube.com/embed/ymW-_RENMKY" frameborder="0" allowfullscreen></iframe></p>
<p>More press coverage on <a href="http://www.pitchfork.com/news/42685-more-details-on-bjorks-ibiophiliai-emerge/">Pitchfork</a> and the <a href="http://www.guardian.co.uk/culture/2011/may/28/bj-rks-biophilia">Guardian</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michelepasin.org/musicblog/2011/06/26/bjork-redefines-the-musicians-product-with-biophilia-albumapp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enabling web-audio in Chrome</title>
		<link>http://www.michelepasin.org/musicblog/2011/06/19/enabling-web-audio-in-chrome/</link>
		<comments>http://www.michelepasin.org/musicblog/2011/06/19/enabling-web-audio-in-chrome/#comments</comments>
		<pubDate>Sun, 19 Jun 2011 20:23:52 +0000</pubDate>
		<dc:creator>magicrebirth</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.michelepasin.org/musicblog/?p=1028</guid>
		<description><![CDATA[I haven&#8217;t realized that Chrome has a whole bunch of invisible experimental settings that you can turn on just by going to &#8220;about:flags&#8220;. &#160; &#160; Some of them will open up the musical capabilities of html5, which are pretty cool. Example, once you switch on the &#8216;web-audio&#8216; setting on Chrome, if you use a suitable [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t realized that Chrome has a whole bunch of invisible <strong>experimental settings</strong> that you can turn on just by going to &#8220;<code style="font-size:14px;color:#000000; background:lavender; overflow:auto;">about:flags</code>&#8220;. </p>
<p>&nbsp;</p>
<p><a href="http://farm3.static.flickr.com/2534/5850209770_0f4d19240c.jpg"><a href="http://www.flickr.com/photos/76186999@N00/5850209770" title="View 'Chrome about:flags options view' on Flickr.com"><img border="0" alt="Chrome about:flags options view" width="600" src="http://farm3.static.flickr.com/2534/5850209770_0f4d19240c.jpg" height="390"/></a></a></p>
<p>&nbsp;</p>
<p>Some of them will open up the musical capabilities of html5, which are pretty cool. Example, once you switch on the &#8216;<strong>web-audio</strong>&#8216; setting on Chrome, if you use a suitable musical musical library you could play a note just by issuing these javascript commands:</p>
<pre><code style="font-size:14px;color:#000000; background:lavender; overflow:auto;">
var n = Note.fromLatin('A4'); 

var freq = n.frequency(); // returns 440
var name = n.latin(); // returns "A"
var octave = n.octave(); // returns 4</code></pre>
<p>&nbsp;</p>
<p>The full example (with sound, if you&#8217;ve turned on the Web Audio setting as mentioned above) can be seen here: <a href="http://code.gregjopa.com/javascript/audio/musicjs/demo/">musicjs demo</a>. </p>
<p>More info about web audio and related stuff can be found on this blog post: <a href="http://pixelist.info/web-audio-it-is-finally-almost-here/">http://pixelist.info/web-audio-it-is-finally-almost-here/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.michelepasin.org/musicblog/2011/06/19/enabling-web-audio-in-chrome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

