<?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>Phrontist.org &#187; Projects</title>
	<atom:link href="http://www.phrontist.org/category/projects/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.phrontist.org</link>
	<description></description>
	<lastBuildDate>Wed, 11 Jan 2012 16:01:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Bjorklund Algorithm</title>
		<link>http://www.phrontist.org/2011/03/the-bjorklund-algorithm/</link>
		<comments>http://www.phrontist.org/2011/03/the-bjorklund-algorithm/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 01:47:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[bjorklund]]></category>
		<category><![CDATA[generative]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[supercollider]]></category>

		<guid isPermaLink="false">http://www.phrontist.org/?p=338</guid>
		<description><![CDATA[



The following problem is considered by Bjorklund, in connection with the operation of certain components (such as high voltage power supplies) of spallation neutron source (SNS) accelerators used in nuclear physics.
Construct a binary sequence of n bits with k one’s, such that the k one’s are distributed as evenly as possible among the zero’s. For [...]]]></description>
			<content:encoded><![CDATA[



<blockquote><p>The following problem is considered by Bjorklund, in connection with the operation of certain components (such as high voltage power supplies) of spallation neutron source (SNS) accelerators used in nuclear physics.</p>
<p>Construct a binary sequence of n bits with k one’s, such that the k one’s are distributed as evenly as possible among the zero’s. For example, if n = 16 and k = 4, the solution is [1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0]. The problem of primary interest is when k and n are relatively prime numbers, i.e., when k and n are evenly divisible only by 1.</p></blockquote>
<p>This is an excerpt from the somewhat melodramatically titled paper, <a href="http://cgm.cs.mcgill.ca/~godfried/publications/banff.pdf"><em>The Euclidean Algorithm Generates Traditional Musical Rhythms</em></a>. In short, sequences generated by the equal spacing algorithm described resemble various traditional rhythms, or otherwise sound pretty good. <a href="http://createdigitalmusic.com/2011/03/circles-and-euclidian-rhythms-off-the-grid-a-few-music-makers-that-go-round-and-round/">Create Digital Music</a> did a post on various musical applications of it recently, like <a href="http://www.hisschemoller.com/2011/euclidean-rhythms/">this neat little sequencer in flash</a>.</p>
<p>Being a <a href="http://supercollider.sf.net">SuperCollider</a> chauvinist I was happy to see <a href="http://www.fredrikolofsson.com/">Fredrik Olofsson</a> had already written <a href="http://www.fredrikolofsson.com/f0blog/?q=node/434">a pattern class</a> to generate these sequences. It didn&#8217;t support embedding of patterns within it (which is what I really wanted to play with) but after <a href="http://new-supercollider-mailing-lists-forums-use-these.2681727.n2.nabble.com/Bjorklund-Class-td6174974.html">a quick email to the list</a> he patched it. Thanks Fredrik.</p>
<p>Anyway, <a href="http://soundcloud.com/phrontist/ital">here is a quick demo</a>, with code after the jump.</p>
<p><object height="81" width="100%"><param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F12229312"></param><param name="allowscriptaccess" value="always"></param> <embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F12229312" type="application/x-shockwave-flash" width="100%"></embed></object></span> </p>
<p><span id="more-338"></span></p>
<div class="codecolorer-container sclang dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br /></div></td><td><div class="sclang codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000;">&#40;</span><br />
<span style="color: #0000BF;">var</span> snare<span style="color: #000000;">,</span> kick<span style="color: #000000;">,</span> snare_part<span style="color: #000000;">,</span> clicks<span style="color: #000000;">,</span> swing<span style="color: #000000;">,</span> swing_off<span style="color: #000000;">,</span> high<span style="color: #000000;">,</span> bass<span style="color: #000000;">;</span><br />
<br />
<span style="color: #0000BF;">TempoClock</span>.<span style="">default</span>.<span style="">tempo</span> = <span style="color: #000000;">40</span><span style="color: #000000;">/</span><span style="color: #000000;">30</span><span style="color: #000000;">;</span><br />
<br />
snare = <span style="color: #0000BF;">Buffer</span>.<span style="">read</span><span style="color: #000000;">&#40;</span>s<span style="color: #000000;">,</span> <span style="color: #606060;">&quot;/home/bjorn/audio_work/samples/budos_snare.wav&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
kick = <span style="color: #0000BF;">Buffer</span>.<span style="">read</span><span style="color: #000000;">&#40;</span>s<span style="color: #000000;">,</span> <span style="color: #606060;">&quot;/home/bjorn/audio_work/samples/electro_kick.wav&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
<br />
snare_part = <span style="color: #0000BF;">Pbind</span><span style="color: #000000;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">instrument</span><span style="color: #000000;">,</span> \<span style="color: #009700;">drum_machine</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">div</span><span style="color: #000000;">,</span> <span style="color: #000000;">16</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">bjorklund</span><span style="color: #000000;">,</span> Pbjorklund<span style="color: #000000;">&#40;</span><span style="color: #0000BF;">Prand</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">7</span><span style="color: #000000;">,</span><span style="color: #000000;">9</span><span style="color: #000000;">,</span><span style="color: #000000;">13</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">Pkey</span><span style="color: #000000;">&#40;</span>\<span style="color: #009700;">div</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">bufnum</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Pstep</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span>kick.<span style="">bufnum</span><span style="color: #000000;">,</span>snare.<span style="">bufnum</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">dur</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Pstep</span><span style="color: #000000;">&#40;</span><span style="color: #0000BF;">Pseq</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">/</span><span style="color: #0000BF;">Pkey</span><span style="color: #000000;">&#40;</span>\<span style="color: #009700;">div</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">amp</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Pkey</span><span style="color: #000000;">&#40;</span>\<span style="color: #009700;">bjorklund</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">*</span> <span style="color: #000000;">0.15</span> <span style="color: #000000;">*</span> <span style="color: #0000BF;">Pstep</span><span style="color: #000000;">&#40;</span><span style="color: #0000BF;">Pseq</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">0.6</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">6</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
<br />
clicks = <span style="color: #0000BF;">Pbind</span><span style="color: #000000;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">instrument</span><span style="color: #000000;">,</span> \<span style="color: #009700;">click</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">amp</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Pstep</span><span style="color: #000000;">&#40;</span><span style="color: #0000BF;">Pseq</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">0.3</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">6</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">dur</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Pstep</span><span style="color: #000000;">&#40;</span><span style="color: #0000BF;">Pseq</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #0000BF;">Prand</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">8</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">6</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> <span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<br />
high = <span style="color: #0000BF;">Pbind</span><span style="color: #000000;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">instrument</span><span style="color: #000000;">,</span> \<span style="color: #009700;">sinepluck</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">div</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Pstep</span><span style="color: #000000;">&#40;</span><span style="color: #0000BF;">Prand</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">8</span><span style="color: #000000;">,</span><span style="color: #000000;">16</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">scale</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Scale</span>.<span style="">major</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">amp</span><span style="color: #000000;">,</span> <span style="color: #000000;">&#40;</span>Pbjorklund<span style="color: #000000;">&#40;</span><span style="color: #0000BF;">Prand</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">,</span><span style="color: #000000;">7</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">Pkey</span><span style="color: #000000;">&#40;</span>\<span style="color: #009700;">div</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">*</span> <span style="color: #000000;">0.4</span> + <span style="color: #000000;">0.05</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">dur</span><span style="color: #000000;">,</span> <span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">&#40;</span><span style="color: #0000BF;">Pkey</span><span style="color: #000000;">&#40;</span>\<span style="color: #009700;">div</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">degree</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Pstep</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #000000;">8</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span> + <span style="color: #0000BF;">Pshuf</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span>-<span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">out</span><span style="color: #000000;">,</span> <span style="color: #000000;">2</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;\<span style="color: #009700;">octave</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Pstep</span><span style="color: #000000;">&#40;</span><span style="color: #0000BF;">Pseq</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">6</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
<br />
bass = <span style="color: #0000BF;">Pbind</span><span style="color: #000000;">&#40;</span>\<span style="color: #009700;">instrument</span><span style="color: #000000;">,</span> \<span style="color: #009700;">ital_bass</span><span style="color: #000000;">,</span> \<span style="color: #009700;">dur</span><span style="color: #000000;">,</span> <span style="color: #000000;">2</span><span style="color: #000000;">,</span> \<span style="color: #009700;">octave</span><span style="color: #000000;">,</span> <span style="color: #000000;">3</span><span style="color: #000000;">,</span> \<span style="color: #009700;">degree</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Pseq</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> \<span style="color: #009700;">wobble</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Prand</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">2</span><span style="color: #000000;">/</span><span style="color: #000000;">3</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">3</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">*</span><span style="color: #0000BF;">TempoClock</span>.<span style="">default</span>.<span style="">tempo</span> <span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<br />
<span style="color: #0000BF;">Ptpar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span>high<span style="color: #000000;">,</span><span style="color: #000000;">16</span><span style="color: #000000;">,</span>clicks<span style="color: #000000;">,</span><span style="color: #000000;">48</span><span style="color: #000000;">,</span>bass<span style="color: #000000;">,</span><span style="color: #000000;">32</span><span style="color: #000000;">,</span>snare_part<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>.<span style="">play</span><span style="color: #000000;">;</span><br />
<br />
<span style="color: #000000;">&#41;</span><br />
<br />
<br />
<span style="color: #0000BF;">SynthDef</span><span style="color: #000000;">&#40;</span>\<span style="color: #009700;">drum_machine</span><span style="color: #000000;">,</span> <span style="color: #000000;">&#123;</span><span style="color: #000000;">|</span> out = <span style="color: #000000;">0</span><span style="color: #000000;">,</span> bufnum = <span style="color: #000000;">0</span><span style="color: #000000;">,</span> rate = <span style="color: #000000;">1</span><span style="color: #000000;">,</span> amp = <span style="color: #000000;">1</span><span style="color: #000000;">,</span> dur = <span style="color: #000000;">1</span><span style="color: #000000;">|</span><br />
<span style="color: #0000BF;">var</span> playback<span style="color: #000000;">;</span><br />
playback = <span style="color: #0000BF;">PlayBuf</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span> bufnum<span style="color: #000000;">,</span> <span style="color: #0000BF;">BufRateScale</span>.<span style="">kr</span><span style="color: #000000;">&#40;</span>bufnum<span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> rate<span style="color: #000000;">:</span> rate<span style="color: #000000;">,</span> doneAction<span style="color: #000000;">:</span><span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span>.<span style="">dup</span> <span style="color: #000000;">*</span> <span style="color: #000000;">0.8</span><span style="color: #000000;">;</span><br />
<span style="color: #0000BF;">Out</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>out<span style="color: #000000;">,</span> playback <span style="color: #000000;">*</span> amp<span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>.<span style="">store</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
<br />
<span style="color: #0000BF;">SynthDef</span><span style="color: #000000;">&#40;</span>\<span style="color: #009700;">click</span><span style="color: #000000;">,</span> <span style="color: #000000;">&#123;</span><span style="color: #000000;">|</span> out = <span style="color: #000000;">0</span><span style="color: #000000;">,</span> amp = <span style="color: #000000;">0</span><span style="color: #000000;">,</span> dur = <span style="color: #000000;">1</span> <span style="color: #000000;">|</span><br />
<span style="color: #0000BF;">Out</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>out<span style="color: #000000;">,</span> <span style="color: #0000BF;">XLine</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">1000</span><span style="color: #000000;">,</span>dur<span style="color: #000000;">*</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span> doneAction<span style="color: #000000;">:</span><span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">*</span> <span style="color: #0000BF;">BPF</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #0000BF;">PinkNoise</span>.<span style="">ar</span><span style="color: #000000;">,</span><span style="color: #0000BF;">XLine</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">20000</span><span style="color: #000000;">,</span><span style="color: #0000BF;">LinLin</span>.<span style="">kr</span><span style="color: #000000;">&#40;</span>amp<span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">200</span><span style="color: #000000;">,</span><span style="color: #000000;">1000</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span>dur<span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">XLine</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0.99</span><span style="color: #000000;">,</span><span style="color: #000000;">0.01</span><span style="color: #000000;">,</span>dur<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="">dup</span> <span style="color: #000000;">*</span> <span style="color: #000000;">0.8</span> <span style="color: #000000;">*</span> amp<span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
<span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>.<span style="">store</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
<br />
<span style="color: #000000;">&#40;</span><br />
<span style="color: #0000BF;">SynthDef</span><span style="color: #000000;">&#40;</span><span style="color: #606060;">&quot;sinepluck&quot;</span><span style="color: #000000;">,</span> <span style="color: #000000;">&#123;</span><br />
<span style="color: #0000BF;">arg</span> freq = <span style="color: #000000;">440</span><span style="color: #000000;">,</span> amp = <span style="color: #000000;">1</span><span style="color: #000000;">,</span> dur = <span style="color: #000000;">1</span><span style="color: #000000;">,</span> detune = <span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span> out = <span style="color: #000000;">0</span><span style="color: #000000;">;</span><br />
<span style="color: #0000BF;">var</span> mod<span style="color: #000000;">,</span>tone<span style="color: #000000;">;</span><br />
dur = dur<span style="color: #000000;">;</span><br />
amp = amp <span style="color: #000000;">*</span> <span style="color: #000000;">0.8</span><span style="color: #000000;">;</span><br />
mod = <span style="color: #0000BF;">VarSaw</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>freq<span style="color: #000000;">*</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span> mul<span style="color: #000000;">:</span> <span style="color: #0000BF;">XLine</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0.2</span><span style="color: #000000;">,</span><span style="color: #000000;">0.8</span><span style="color: #000000;">,</span>dur<span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> width<span style="color: #000000;">:</span> <span style="color: #0000BF;">XLine</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">1000</span><span style="color: #000000;">,</span>dur<span style="color: #000000;">*</span><span style="color: #000000;">64</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
tone = <span style="color: #0000BF;">SinOsc</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>freq<span style="color: #000000;">,</span> mod<span style="color: #000000;">&#41;</span>.<span style="">dup</span> <span style="color: #000000;">*</span> <span style="color: #000000;">0.1</span> <span style="color: #000000;">*</span> <span style="color: #0000BF;">XLine</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">1000</span><span style="color: #000000;">,</span>dur<span style="color: #000000;">*</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span> doneAction<span style="color: #000000;">:</span><span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">*</span> <span style="color: #0000BF;">XLine</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">1000</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">0.001</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">*</span> amp<span style="color: #000000;">;</span><br />
tone = <span style="color: #000000;">&#91;</span><span style="color: #0000BF;">DelayC</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>tone <span style="color: #000000;">,</span> <span style="color: #000000;">1</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">LFNoise2</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span>.<span style="">range</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">0.012</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">DelayC</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>tone <span style="color: #000000;">,</span> <span style="color: #000000;">1</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">LFNoise2</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span>.<span style="">range</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0.012</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">;</span><br />
tone = tone <span style="color: #000000;">*</span> <span style="color: #0000BF;">XLine</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">10000</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">0.005</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
<span style="color: #0000BF;">Out</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>out<span style="color: #000000;">,</span>tone<span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
<span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>.<span style="">store</span><span style="color: #000000;">;</span><br />
<span style="color: #000000;">&#41;</span><br />
<br />
<span style="color: #000000;">&#40;</span><br />
<span style="color: #0000BF;">SynthDef</span><span style="color: #000000;">&#40;</span><span style="color: #606060;">&quot;ital_bass&quot;</span><span style="color: #000000;">,</span> <span style="color: #000000;">&#123;</span><br />
<span style="color: #0000BF;">arg</span> freq = <span style="color: #000000;">440</span><span style="color: #000000;">,</span> amp = <span style="color: #000000;">1</span><span style="color: #000000;">,</span> dur = <span style="color: #000000;">1</span><span style="color: #000000;">,</span> detune = <span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span> out = <span style="color: #000000;">0</span><span style="color: #000000;">,</span> wobble = <span style="color: #000000;">1</span><span style="color: #000000;">;</span><br />
<span style="color: #0000BF;">var</span> mod<span style="color: #000000;">,</span>tone<span style="color: #000000;">,</span>foo<span style="color: #000000;">;</span><br />
tone = <span style="color: #0000BF;">VarSaw</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #0000BF;">Lag</span>.<span style="">kr</span><span style="color: #000000;">&#40;</span>freq<span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> width<span style="color: #000000;">:</span><span style="color: #0000BF;">LFNoise2</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">3</span><span style="color: #000000;">&#41;</span>.<span style="">range</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0.3</span><span style="color: #000000;">,</span><span style="color: #000000;">0.1</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
tone = <span style="color: #0000BF;">MoogLadder</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>tone<span style="color: #000000;">,</span> <span style="color: #0000BF;">SinOsc</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>wobble<span style="color: #000000;">&#41;</span>.<span style="">range</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">20</span><span style="color: #000000;">,</span><span style="color: #000000;">4000</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> <span style="color: #000000;">0.1</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">*</span> <span style="color: #000000;">4</span><span style="color: #000000;">;</span><br />
tone = tone <span style="color: #000000;">*</span> <span style="color: #0000BF;">XLine</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">8</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">1000</span><span style="color: #000000;">,</span>dur<span style="color: #000000;">,</span> doneAction<span style="color: #000000;">:</span><span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span>.<span style="">tanh</span><span style="color: #000000;">;</span><br />
<span style="color: #0000BF;">Out</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>out<span style="color: #000000;">,</span>tone.<span style="">dup</span> <span style="color: #000000;">*</span> amp<span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
<span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>.<span style="">store</span><span style="color: #000000;">;</span><br />
<span style="color: #000000;">&#41;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.phrontist.org/2011/03/the-bjorklund-algorithm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Syncopation Exercise</title>
		<link>http://www.phrontist.org/2011/03/syncopation-exercise/</link>
		<comments>http://www.phrontist.org/2011/03/syncopation-exercise/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 06:00:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[generative]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[supercollider]]></category>

		<guid isPermaLink="false">http://www.phrontist.org/?p=171</guid>
		<description><![CDATA[











After two or three years of halfheartedly playing with SuperCollider every now and then, I finally bothered to read the documentation for it&#8217;s language-side (as oppose to server-side) sequencing features. This is what most SC users are, for good reason, most enthusiastic about. It&#8217;s a very flexible and (as far as I know) unusual approach [...]]]></description>
			<content:encoded><![CDATA[











<p>After two or three years of halfheartedly playing with <a href="http://supercollider.sourceforge.net/">SuperCollider</a> every now and then, I finally bothered to read the <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/Streams-Patterns-Events/A%20Practical%20Guide/PG_01_Introduction.html">documentation</a> for it&#8217;s language-side (<a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/ServerArchitecture/ClientVsServer.html">as oppose to server-side</a>) sequencing features. This is what most SC users are, for good reason, most enthusiastic about. It&#8217;s a very flexible and (as far as I know) unusual approach to the basic musical problem of ordering sound in time.</p>
<p>What follows is a very simple example an algorithmically generated piece with some constrained randomness. This isn&#8217;t meant to be a tutorial really, but should give you an idea of SC&#8217;s general character, and convince you that it&#8217;s worth the trouble to work through the <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/Help.html">documentation</a>.</p>
<p><object height="81" width="100%"><param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F10976353"></param><param name="allowscriptaccess" value="always"></param> <embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F10976353" type="application/x-shockwave-flash" width="100%"></embed></object></p>
<p><span id="more-171"></span><br />
First, the <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/Tutorials/Getting-Started/SynthDefs%20and%20Synths.html">synthdef</a> code, which is executed by the language interpreter to create instructions for the server specifying a series of <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/Tutorials/UGens-and-Synths.html">unit generators</a> and their interconnections. In other words, this code defines an instrument the later pattern code will &#8220;conduct&#8221;. There could be many of these, but here we&#8217;ll be using just one. If you come from an Ableton/Reason/Softsynth/Moog Modular background you can think of these as a bit like patches, except that you can run as many copies of them as memory and CPU resources allow, and route signals between them arbitrarily. The extreme freedom of which, while cool, makes for an initially somewhat steep learning curve.</p>
<div class="codecolorer-container sclang dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="sclang codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000BF;">SynthDef</span><span style="color: #000000;">&#40;</span>\<span style="color: #009700;">imogen</span><span style="color: #000000;">,</span> <span style="color: #000000;">&#123;</span><span style="color: #000000;">|</span> out = <span style="color: #000000;">0</span><span style="color: #000000;">,</span> bufnum = <span style="color: #000000;">0</span><span style="color: #000000;">,</span> freq = <span style="color: #000000;">400</span><span style="color: #000000;">,</span> dur = <span style="color: #000000;">1</span><span style="color: #000000;">,</span> gate = <span style="color: #000000;">1</span> <span style="color: #000000;">|</span><br />
<span style="color: #0000BF;">var</span> rate<span style="color: #000000;">,</span> tone<span style="color: #000000;">;</span><br />
rate = <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>freq<span style="color: #000000;">/</span><span style="color: #000000;">40000</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">*</span> <span style="color: #0000BF;">Rand</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span>.<span style="">round</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
tone = <span style="color: #0000BF;">PlayBuf</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span> bufnum<span style="color: #000000;">,</span> <span style="color: #0000BF;">BufRateScale</span>.<span style="">kr</span><span style="color: #000000;">&#40;</span>bufnum<span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> rate<span style="color: #000000;">:</span> rate<span style="color: #000000;">,</span> startPos<span style="color: #000000;">:</span> <span style="color: #0000BF;">Rand</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000BF;">BufFrames</span>.<span style="">kr</span><span style="color: #000000;">&#40;</span>bufnum<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> doneAction<span style="color: #000000;">:</span><span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span>.<span style="">dup</span><span style="color: #000000;">;</span><br />
dur = dur <span style="color: #000000;">*</span> <span style="color: #000000;">4</span><span style="color: #000000;">;</span><br />
tone = tone <span style="color: #000000;">*</span> <span style="color: #0000BF;">EnvGen</span>.<span style="">kr</span><span style="color: #000000;">&#40;</span><span style="color: #0000BF;">Env</span>.<span style="">adsr</span><span style="color: #000000;">,</span>gate<span style="color: #000000;">,</span> doneAction<span style="color: #000000;">:</span><span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
tone = <span style="color: #000000;">&#91;</span><span style="color: #0000BF;">DelayC</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>tone <span style="color: #000000;">,</span> <span style="color: #000000;">1</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">LFNoise2</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span>.<span style="">range</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0.0012</span><span style="color: #000000;">,</span>-<span style="color: #000000;">0.0012</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">DelayC</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>tone <span style="color: #000000;">,</span> <span style="color: #000000;">1</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">LFNoise2</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span>.<span style="">range</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0.0012</span><span style="color: #000000;">,</span>-<span style="color: #000000;">0.0012</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">;</span><br />
tone = <span style="color: #0000BF;">MoogLadder</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>tone<span style="color: #000000;">,</span> <span style="color: #0000BF;">XLine</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span><span style="color: #0000BF;">MouseX</span>.<span style="">kr</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">20</span><span style="color: #000000;">,</span><span style="color: #000000;">20000</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">MouseY</span>.<span style="">kr</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">20</span><span style="color: #000000;">,</span><span style="color: #000000;">20000</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span>dur<span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">MouseButton</span>.<span style="">kr</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0.2</span><span style="color: #000000;">,</span><span style="color: #000000;">0.9</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">*</span> <span style="color: #000000;">4</span><span style="color: #000000;">;</span><br />
<span style="color: #0000BF;">Out</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>out<span style="color: #000000;">,</span> tone<span style="color: #000000;">&#41;</span><br />
<br />
<span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>.<span style="">store</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span></div></td></tr></tbody></table></div>
<p>Synths created from this synthdef take as arguments an output channel to write to, buffer number (more on this in a moment), frequency (in no particular units, because I was lazy), a gate signal, and duration. Essentially all they&#8217;ll do is play the buffer back at varying rates (to get different pitches) and sweep a filter from one frequency to another over the course of each note. These points are controlled by the X and Y (left to right, top to bottom) position of the mouse on screen. The mouse button controls the resonance of the filter, which I should mention is a very nice <a href="http://en.wikipedia.org/wiki/Multimoog">Moog Ladder</a> emulation <a href="http://sc3-plugins.svn.sourceforge.net/viewvc/sc3-plugins/build/BhobUGens/BhobUGens.html">available as part of the sc3-plugins</a> package. By wiggling the mouse around I get those acid-housey sweeps to either snap up or downward or plateau over the course of each note. Line 7 takes the mono signal from the playback of the buffer and duplicates it create a stereo signal, adding a bit of <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/UGens/Noise/LFNoise2.html?revision=9821">random</a> delay to each channel to simulate the movement of the sound in space by <a href="http://en.wikipedia.org/wiki/Precedence_effect">precedence effect</a>.</p>
<p>Before starting, the buffer needs to have a sample loaded into it. I used a snippet from <a href="http://www.youtube.com/watch?v=25VGdNU3nrU">this Imogen Heap performance</a>, because I happened to have it around. It would sound much better (or, more positively, better still) with a higher-fidelity sample.</p>
<div class="codecolorer-container sclang dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="sclang codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">b = <span style="color: #0000BF;">Buffer</span>.<span style="">read</span><span style="color: #000000;">&#40;</span>s<span style="color: #000000;">,</span> <span style="color: #606060;">&quot;/home/bjorn/audio_work/samples/imogen.wav&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span></div></td></tr></tbody></table></div>
<p>Each buffer loaded by the server has a number, and the variable b will hold the number this sample is assigned. Now the interesting part&#8230;</p>
<div class="codecolorer-container sclang dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="sclang codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000;">&#40;</span><br />
<span style="color: #0000BF;">var</span> syncopate = <span style="color: #0000BF;">Pbind</span><span style="color: #000000;">&#40;</span><br />
&nbsp; \<span style="color: #009700;">instrument</span><span style="color: #000000;">,</span> \<span style="color: #009700;">imogen</span><span style="color: #000000;">,</span><br />
&nbsp; \<span style="color: #009700;">bufnum</span><span style="color: #000000;">,</span> b<span style="color: #000000;">,</span><br />
&nbsp; \<span style="color: #009700;">scale</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Scale</span>.<span style="">major</span><span style="color: #000000;">,</span><br />
&nbsp; \<span style="color: #009700;">octave</span><span style="color: #000000;">,</span> <span style="color: #000000;">7</span><span style="color: #000000;">,</span><br />
&nbsp; \<span style="color: #009700;">amp</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Pstep</span><span style="color: #000000;">&#40;</span><span style="color: #0000BF;">Pseq</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #0000BF;">Pgeom</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">0.90</span><span style="color: #000000;">,</span><span style="color: #000000;">16</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> <span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">16</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><br />
&nbsp; \<span style="color: #009700;">degree</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Pseq</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #0000BF;">Pstep</span><span style="color: #000000;">&#40;</span><span style="color: #0000BF;">Pseq</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span> <span style="color: #000000;">2</span><span style="color: #000000;">,</span> <span style="color: #000000;">4</span><span style="color: #000000;">,</span> -<span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span> <span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> <span style="color: #000000;">4</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span>+<span style="color: #000000;">30</span><span style="color: #000000;">,</span> <br />
&nbsp; \<span style="color: #009700;">dur</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">PdurStutter</span><span style="color: #000000;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000BF;">Pseq</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span><span style="color: #000000;">4</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span><span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000BF;">Pwrand</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span><span style="color: #000000;">1.5</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">3</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span> <span style="color: #000000;">&#91;</span><span style="color: #000000;">10</span><span style="color: #000000;">,</span> <span style="color: #000000;">15</span><span style="color: #000000;">,</span> <span style="color: #000000;">1</span><span style="color: #000000;">,</span> <span style="color: #000000;">1</span><span style="color: #000000;">,</span> <span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">&#93;</span>.<span style="">normalizeSum</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
syncopate.<span style="">play</span><span style="color: #000000;">;</span><br />
<span style="color: #000000;">&#41;</span></div></td></tr></tbody></table></div>
<p>This creates a <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/Streams-Patterns-Events/A%20Practical%20Guide/PG_03_What_Is_Pbind.html">Pbind</a> object and calls it&#8217;s play method (we create a variable, <em>syncopate</em>, to hold it, but we didn&#8217;t have to). The words beginning with slashes are key names, which get bundled into events, which are parts of streams which&#8230; well, it&#8217;s best that you just read the <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/Streams-Patterns-Events/A%20Practical%20Guide/PG_01_Introduction.html">Practical Guide to Patterns</a> if you really want to understand. For the glossed explanation I&#8217;m giving here, all you really need to know is that the \instrument parameter specifies which synthdef to use and the rest are passed to the resulting synth. So here we see \bufnum is always set to reference the lone buffer we loaded, scale is passed a major scale from the convenient Scale class&#8217; method, the octave is set to 7, and so on.</p>
<p>The interesting keys are the last three, which define the amplitude (loudness), scale degree (which note, which really means which frequency, which really means which buffer playback speed), and duration for which the synth should run. What sets these apart from the others is that they&#8217;re passed Pattern objects, which can return different values each time.</p>
<p>The amplitude is meant to be loudest at the beginning of each beat, with each subsequent note being 90% as loud (the way an echo might decay). This is pretty subtle, and on the demo run above I (unthinkingly) used some <a href="http://en.wikipedia.org/wiki/Dynamic_range_compression">compression</a>, so the effect is even less noticeable. Unlike the echo-style decay you can get in most DAWs, we could do things like vary the pitch of every repetition, or have more complicated dynamic (loudness) variations. The outermost pattern, <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/Streams-Patterns-Events/Patterns/Pstep.html">Pstep</a>, is passed two arguments: another object (Pseq) to generate the amplitude values, and a duration. Every time a duration&#8217;s worth of time goes by (here, 1/16 of a beat), the next value will be requested from the <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/Streams-Patterns-Events/Patterns/Pseq.html">Pseq</a> pattern. The Pseq has only one element in it&#8217;s sequence, a <a href="ttp://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/Streams-Patterns-Events/Patterns/Pgeom.html">Pgeom</a>, which itself generates a series of values, each of which is a multiple (0.9) of the one before, 16 times (and since we&#8217;re moving to the next value every 1/16 of a beat, that means this pattern repeats every beat). This ability to nest patterns within one another is what makes them so flexible and expressive. The Pseq&#8217;s second parameter is the number of times it should repeat it&#8217;s sequence &#8211; here, an infinite number of times.</p>
<p>The degree pattern is very similar &#8211; every 4 beats, we transition to the next value from the Pseq (note also that I&#8217;m arbitrarily adding 30 to all the results &#8211; this is because of my hackish frequency scaling). So we cycle through 4 notes (spelling out a very simple melody), with 4 beats to each note. While the duration pattern described below skitters around, this gives us a bit of structure.</p>
<p>The interesting bit here is the pattern for duration. Duration is a bit of a special case, because while it&#8217;s passed to the synths (so they &#8220;know&#8221; how long they run), it also controls how much time should elapse before the next round of synth creation. While the other two patterns are fixed, and loop through values predictably, this pattern has a random element. The first argument to <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/Streams-Patterns-Events/Patterns/PdurStutter.html">PdurStutter</a> is a duration, the second is a factor to divide that duration by. If we passed it one and sixteen, we&#8217;d get sixteen events lasting a sixteenth of a beat each. Here I&#8217;ve used a simple Pseq for the first parameter and a <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/Streams-Patterns-Events/Patterns/Pwrand.html">Pwrand</a> for the second. The basical metrical pattern of eight beats &#8211; two of two beats and one of four (<em>[2,2,4]</em>) &#8211; is set by the first (Pseq) pattern. These time segments are divided by the values from the second (Pwrand) pattern, which chooses randomly from it&#8217;s first list (<em>[1/4,1/2,1.5,1,1/3]</em>). The second argument to Pwrand (<em>[10, 15, 1, 1, 1/2].normalizeSum</em>) is a list of weights &#8211; so 1/4 is 10 times more likely to be drawn than 1.5 and 20 times more likely than 1/3.</p>
<p>Anyway, when the Pdef starts running PdurStutter first calls the Pseq, gets a duration of 2, and then calls Pwrand and gets, lets say, one half. It would then play four half notes (thus filling the two beats) before moving on to the next element of the pattern, which would have it&#8217;s own division factor drawn from the list. Because both the 2 and 4 beat segments are divided up from the same pool of possibilities, you get regular alternation between faster and slower repetitions. Repeat ad Ad infinitum.</p>
<p>All that in two lines of code. Keep in mind that we could have had much more complex patterns for the pitch and amplitude, to say nothing of the possibilities for a more interesting synthdef (you can use patterns compose for every parameter of your synths, and for effects you route them through). For more pattern examples check out the aforementioned <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/Streams-Patterns-Events/A%20Practical%20Guide/PG_01_Introduction.html">Practical Guide to Patterns</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phrontist.org/2011/03/syncopation-exercise/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cyclical Animation</title>
		<link>http://www.phrontist.org/2010/11/cyclical-animation/</link>
		<comments>http://www.phrontist.org/2010/11/cyclical-animation/#comments</comments>
		<pubDate>Sun, 07 Nov 2010 08:35:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[gif]]></category>
		<category><![CDATA[processing]]></category>

		<guid isPermaLink="false">http://www.phrontist.org/?p=142</guid>
		<description><![CDATA[A few months ago I was living in Britain, working for a company that made engines for UAVs, writing some graphical interfaces for an engine test system in Processing.
In my spare time I worked on some code to generate animations, which I plan to post over the next few weeks.
This first &#8220;sketch&#8221; (script, application, etc.) [...]]]></description>
			<content:encoded><![CDATA[<p>A few months ago I was living in Britain, working for a <a href="http://www.cubewano.com/">company that made engines for UAVs</a>, writing some graphical interfaces for an engine test system in <a href="http://processing.org">Processing</a>.</p>
<p>In my spare time I worked on some code to generate animations, which I plan to post over the next few weeks.</p>
<p>This first &#8220;sketch&#8221; (script, application, etc.) is pretty simple, but I spent a long time tweaking it to get the effect I was after. I took the basic idea from the <a href="http://www.somethingawful.com/">SomethingAwful</a>-born <a href="http://blueballfixed.ytmnd.com/">Blue Ball Machine</a> GIFs (<a href="http://en.wikipedia.org/wiki/Blue_ball_machine#Forums">see wikipedia for a bit on the tradition</a>).</p>
<p><a href="http://www.phrontist.org/processing/tiles/">Here</a> is a representative output gif, generated with the code below and the very helpful <a href="http://www.lcdf.org/gifsicle/">gifsicle</a> utility.</p>
<p>It works like this: The script assigns locations to each circle on each letter&#8217;s curve in turn with the <a href="http://www.ricardmarxer.com/geomerative/">Geomerative</a> library, then generates random <a href="http://en.wikipedia.org/wiki/Bezier_curve">bezier curve</a> paths between those locations for them to follow. To make things interesting, the algorithm allows coordinates to wrap around from left to right and top to bottom &#8211; a <a href="http://en.wikipedia.org/wiki/Torus">toroidal</a> topology, if you prefer math argot. To put that yet another way, adding any integer multiple of the gif tile&#8217;s dimension (height/width) to a circle&#8217;s target coordinate will make no difference in it&#8217;s rendered location, but could make a difference in the direction it goes to get there. So a circle&#8217;s target coordinates are generated by taking those produced by Geomerative and adding a random multiple of the tile size (with a random sign) to it&#8217;s x and y coordinates. This means a circle can pass through several adjacent tiles in it&#8217;s journey between letter forms.</p>
<p><span id="more-142"></span></p>
<div class="codecolorer-container java dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">geomerative.*</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">float</span> JUMP <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1.3</span><span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">float</span> INCREMENT <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">250</span><span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">int</span> ATOMS <span style="color: #339933;">=</span> <span style="color: #cc66cc;">65</span><span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">int</span> FREEZE_FRAMES <span style="color: #339933;">=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span><br />
<br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> LETTERS <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;C&quot;</span>, <span style="color: #0000ff;">&quot;Y&quot;</span>, <span style="color: #0000ff;">&quot;C&quot;</span>, <span style="color: #0000ff;">&quot;L&quot;</span>, <span style="color: #0000ff;">&quot;I&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
RShape<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> shapes<span style="color: #339933;">;</span><br />
<br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aarraylist+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">ArrayList</span></a> atoms<span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">int</span> count <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">float</span> time <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">int</span> period<span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; strokeWeight<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; atoms <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aarraylist+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">ArrayList</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; period <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; smooth<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; size<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">180</span>,<span style="color: #cc66cc;">180</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; RG.<span style="color: #006633;">init</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; shapes <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> RShape<span style="color: #009900;">&#91;</span>LETTERS.<span style="color: #006633;">length</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; RG.<span style="color: #006633;">setPolygonizer</span><span style="color: #009900;">&#40;</span>RG.<span style="color: #006633;">UNIFORMLENGTH</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; RG.<span style="color: #006633;">setPolygonizerLength</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> j <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> LETTERS.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;shapes<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> RG.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span>LETTERS<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span>, <span style="color: #0000ff;">&quot;FreeSansBold.ttf&quot;</span>, <span style="color: #cc66cc;">100</span>, CENTER<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; <br />
&nbsp; shapes<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #006633;">translate</span><span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>width,width<span style="color: #009900;">&#41;</span>,random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>height,height<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; shapes<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span>.<span style="color: #006633;">rotate</span><span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>PI<span style="color: #339933;">/</span><span style="color: #cc66cc;">8</span>,PI<span style="color: #339933;">/</span><span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; RPoint<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> points_a <span style="color: #339933;">=</span> shapes<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #006633;">getPoints</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; RPoint<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> points_b <span style="color: #339933;">=</span> shapes<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span>.<span style="color: #006633;">getPoints</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> points_a.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; Atom new_atom <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Atom<span style="color: #009900;">&#40;</span>points_a<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #006633;">x</span>,points_a<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #006633;">y</span>,points_b<span style="color: #009900;">&#91;</span>i<span style="color: #339933;">%</span>points_b.<span style="color: #006633;">length</span><span style="color: #009900;">&#93;</span>.<span style="color: #006633;">x</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>width<span style="color: #339933;">*</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>JUMP,JUMP<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>,points_b<span style="color: #009900;">&#91;</span>i<span style="color: #339933;">%</span>points_b.<span style="color: #006633;">length</span><span style="color: #009900;">&#93;</span>.<span style="color: #006633;">y</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>height<span style="color: #339933;">*</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>JUMP,JUMP<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; atoms.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>new_atom<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>points_a.<span style="color: #006633;">length</span> <span style="color: #339933;">&lt;</span> ATOMS<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> points_a.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> ATOMS<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> j <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>,points_a.<span style="color: #006633;">length</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; Atom new_atom <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Atom<span style="color: #009900;">&#40;</span>points_a<span style="color: #009900;">&#91;</span>j<span style="color: #339933;">%</span>points_a.<span style="color: #006633;">length</span><span style="color: #009900;">&#93;</span>.<span style="color: #006633;">x</span>,points_a<span style="color: #009900;">&#91;</span>j<span style="color: #339933;">%</span>points_a.<span style="color: #006633;">length</span><span style="color: #009900;">&#93;</span>.<span style="color: #006633;">y</span>,points_b<span style="color: #009900;">&#91;</span>j<span style="color: #339933;">%</span>points_b.<span style="color: #006633;">length</span><span style="color: #009900;">&#93;</span>.<span style="color: #006633;">x</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>width<span style="color: #339933;">*</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>JUMP,JUMP<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>,points_b<span style="color: #009900;">&#91;</span>j<span style="color: #339933;">%</span>points_b.<span style="color: #006633;">length</span><span style="color: #009900;">&#93;</span>.<span style="color: #006633;">y</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>height<span style="color: #339933;">*</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>JUMP,JUMP<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; atoms.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>new_atom<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> atoms.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; Atom the_atom <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Atom<span style="color: #009900;">&#41;</span> atoms.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; the_atom.<span style="color: #006633;">genpath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; println<span style="color: #009900;">&#40;</span>LETTERS<span style="color: #009900;">&#91;</span>period<span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; -&gt; &quot;</span> <span style="color: #339933;">+</span> LETTERS<span style="color: #009900;">&#91;</span>period<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; background<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">255</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> atoms.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; Atom the_atom <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Atom<span style="color: #009900;">&#41;</span> atoms.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; noStroke<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>the_atom.<span style="color: #006633;">dot_hue</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; fill<span style="color: #009900;">&#40;</span>#009999,<span style="color: #cc66cc;">150</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; fill<span style="color: #009900;">&#40;</span>#99cc00,<span style="color: #cc66cc;">150</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; the_atom.<span style="color: #006633;">render</span><span style="color: #009900;">&#40;</span>time, <span style="color: #cc66cc;">8</span><span style="color: #339933;">*</span>width<span style="color: #339933;">/</span><span style="color: #cc66cc;">200</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>period <span style="color: #339933;">==</span> LETTERS.<span style="color: #006633;">length</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; println<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;decrementing!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; time <span style="color: #339933;">-=</span> INCREMENT<span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; time <span style="color: #339933;">+=</span> INCREMENT<span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>time <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>time <span style="color: #339933;">&lt;</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>period <span style="color: #339933;">!=</span> LETTERS.<span style="color: #006633;">length</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; println<span style="color: #009900;">&#40;</span>LETTERS<span style="color: #009900;">&#91;</span>period<span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; -&gt; &quot;</span> <span style="color: #339933;">+</span> LETTERS<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#40;</span>period<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%</span>shapes.<span style="color: #006633;">length</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; shapes<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#40;</span>period<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%</span>shapes.<span style="color: #006633;">length</span><span style="color: #009900;">&#93;</span>.<span style="color: #006633;">translate</span><span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>width<span style="color: #339933;">*</span>JUMP,width<span style="color: #339933;">*</span>JUMP<span style="color: #009900;">&#41;</span>,random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>height<span style="color: #339933;">*</span>JUMP,height<span style="color: #339933;">*</span>JUMP<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; shapes<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#40;</span>period<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%</span>shapes.<span style="color: #006633;">length</span><span style="color: #009900;">&#93;</span>.<span style="color: #006633;">rotate</span><span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>PI<span style="color: #339933;">/</span><span style="color: #cc66cc;">8</span>,PI<span style="color: #339933;">/</span><span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; RPoint<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> points_new <span style="color: #339933;">=</span> shapes<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#40;</span>period<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%</span>shapes.<span style="color: #006633;">length</span><span style="color: #009900;">&#93;</span>.<span style="color: #006633;">getPoints</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> atoms.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; Atom the_atom <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Atom<span style="color: #009900;">&#41;</span> atoms.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; the_atom.<span style="color: #006633;">x</span> <span style="color: #339933;">=</span> the_atom.<span style="color: #006633;">goal_x</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; the_atom.<span style="color: #006633;">y</span> <span style="color: #339933;">=</span> the_atom.<span style="color: #006633;">goal_y</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; the_atom.<span style="color: #006633;">genpath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> points_new.<span style="color: #006633;">length</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; the_atom.<span style="color: #006633;">goal_x</span> <span style="color: #339933;">=</span> points_new<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #006633;">x</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>round<span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> width<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; the_atom.<span style="color: #006633;">goal_y</span> <span style="color: #339933;">=</span> points_new<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #006633;">y</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>round<span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> height<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> rand_index <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>,points_new.<span style="color: #006633;">length</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; the_atom.<span style="color: #006633;">goal_x</span> <span style="color: #339933;">=</span> points_new<span style="color: #009900;">&#91;</span>rand_index<span style="color: #009900;">&#93;</span>.<span style="color: #006633;">x</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>round<span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> width<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; the_atom.<span style="color: #006633;">goal_y</span> <span style="color: #339933;">=</span> points_new<span style="color: #009900;">&#91;</span>rand_index<span style="color: #009900;">&#93;</span>.<span style="color: #006633;">y</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>round<span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> height<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>time <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>time <span style="color: #339933;">&lt;</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; period <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; time <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>period <span style="color: #339933;">==</span> LETTERS.<span style="color: #006633;">length</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; noLoop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; snap<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>abs<span style="color: #009900;">&#40;</span>time<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> INCREMENT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; println<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;FREEZE&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> x <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> x <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">20</span><span style="color: #339933;">;</span> x<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; snap<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">void</span> snap<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; saveFrame<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;frames/&quot;</span> <span style="color: #339933;">+</span> nf<span style="color: #009900;">&#40;</span>count,<span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;.gif&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; count <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">class</span> Atom <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">float</span> x<span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">float</span> y<span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">float</span> goal_x<span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">float</span> goal_y<span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">float</span> orig_x<span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">float</span> orig_y<span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000066; font-weight: bold;">float</span> handle_a_x<span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">float</span> handle_a_y<span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">float</span> handle_b_x<span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">float</span> handle_b_y<span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000066; font-weight: bold;">int</span> dot_hue<span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; Atom <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span> _x, <span style="color: #000066; font-weight: bold;">float</span> _y, <span style="color: #000066; font-weight: bold;">float</span> _goal_x, <span style="color: #000066; font-weight: bold;">float</span> _goal_y<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; x <span style="color: #339933;">=</span> orig_x <span style="color: #339933;">=</span> _x<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; y <span style="color: #339933;">=</span> orig_y <span style="color: #339933;">=</span> _y<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; goal_x <span style="color: #339933;">=</span> _goal_x<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; goal_y <span style="color: #339933;">=</span> _goal_y<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; dot_hue <span style="color: #339933;">=</span> round<span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000066; font-weight: bold;">void</span> genpath<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">float</span> theta,extent<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; theta <span style="color: #339933;">=</span> random<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>,TWO_PI<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; extent <span style="color: #339933;">=</span> random<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>,width<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; handle_a_x <span style="color: #339933;">=</span> x <span style="color: #339933;">+</span> sin<span style="color: #009900;">&#40;</span>theta<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> extent<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; handle_a_y <span style="color: #339933;">=</span> y <span style="color: #339933;">+</span> cos<span style="color: #009900;">&#40;</span>theta<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> extent<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; theta <span style="color: #339933;">=</span> random<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>,TWO_PI<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; extent <span style="color: #339933;">=</span> random<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>,width<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; handle_b_x <span style="color: #339933;">=</span> x <span style="color: #339933;">+</span> sin<span style="color: #009900;">&#40;</span>theta<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> extent<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; handle_b_y <span style="color: #339933;">=</span> y <span style="color: #339933;">+</span> cos<span style="color: #009900;">&#40;</span>theta<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> extent<span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000066; font-weight: bold;">void</span> render<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span> time, <span style="color: #000066; font-weight: bold;">float</span> radius<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">float</span> temp_x,temp_y<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>time <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; temp_x <span style="color: #339933;">=</span> bezierPoint<span style="color: #009900;">&#40;</span>x,handle_a_x,handle_b_x,goal_x,time<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; temp_y <span style="color: #339933;">=</span> bezierPoint<span style="color: #009900;">&#40;</span>y,handle_a_y,handle_b_y,goal_y,time<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; temp_x <span style="color: #339933;">=</span> bezierPoint<span style="color: #009900;">&#40;</span>x,handle_a_x,handle_b_x,orig_x,<span style="color: #339933;">-</span>time<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; temp_y <span style="color: #339933;">=</span> bezierPoint<span style="color: #009900;">&#40;</span>y,handle_a_y,handle_b_y,orig_y,<span style="color: #339933;">-</span>time<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>temp_x <span style="color: #339933;">&lt;</span> <span style="color: #339933;">-</span>radius<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; temp_x <span style="color: #339933;">+=</span> width<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>temp_x <span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#40;</span>width<span style="color: #339933;">+</span>radius<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; temp_x <span style="color: #339933;">-=</span> width<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>temp_y <span style="color: #339933;">&lt;</span> <span style="color: #339933;">-</span>radius<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; temp_y <span style="color: #339933;">+=</span> height<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>temp_y <span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#40;</span>height<span style="color: #339933;">+</span>radius<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; temp_y <span style="color: #339933;">-=</span> height<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; ellipse<span style="color: #009900;">&#40;</span>temp_x,temp_y,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span>,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; ellipse<span style="color: #009900;">&#40;</span>temp_x<span style="color: #339933;">-</span>width,temp_y,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span>,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; ellipse<span style="color: #009900;">&#40;</span>temp_x,temp_y<span style="color: #339933;">-</span>height,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span>,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; ellipse<span style="color: #009900;">&#40;</span>temp_x<span style="color: #339933;">+</span>width,temp_y,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span>,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; ellipse<span style="color: #009900;">&#40;</span>temp_x,temp_y<span style="color: #339933;">+</span>height,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span>,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; ellipse<span style="color: #009900;">&#40;</span>temp_x<span style="color: #339933;">-</span>width,temp_y<span style="color: #339933;">-</span>height,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span>,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; ellipse<span style="color: #009900;">&#40;</span>temp_x<span style="color: #339933;">+</span>width,temp_y<span style="color: #339933;">+</span>height,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span>,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; ellipse<span style="color: #009900;">&#40;</span>temp_x<span style="color: #339933;">+</span>width,temp_y<span style="color: #339933;">-</span>height,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span>,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; ellipse<span style="color: #009900;">&#40;</span>temp_x<span style="color: #339933;">-</span>width,temp_y<span style="color: #339933;">+</span>height,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span>,radius<span style="color: #339933;">*</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.phrontist.org/2010/11/cyclical-animation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Decimator Wobble Bass</title>
		<link>http://www.phrontist.org/2010/06/decimator-wobble-bass/</link>
		<comments>http://www.phrontist.org/2010/06/decimator-wobble-bass/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 21:26:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[bass]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[dubstep]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[supercollider]]></category>

		<guid isPermaLink="false">http://www.phrontist.org/?p=97</guid>
		<description><![CDATA[



In the first of what I hope will be many Supercollider posts, I&#8217;m dissecting a fairly straightforward wobble bass snippet.
123456789101112131415161718&#123;
var trig, numSmp, rate, freq, wobble,out,note,mod;
freq = &#40;140/60&#41;/3; // It's not dubstep if it's not at an integer multiple of 140bpm.
trig = Impulse.kr&#40;freq&#41;; // Main tempo pulse
note = Demand.kr&#40;trig, 0, Dseq&#40;&#91;40, 43, 47, 47, 40, 49-12, [...]]]></description>
			<content:encoded><![CDATA[



<p>In the first of what I hope will be many <a href="http://supercollider.sf.net">Supercollider</a> posts, I&#8217;m dissecting a fairly straightforward wobble bass snippet.</p>
<div class="codecolorer-container sclang dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="sclang codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000;">&#123;</span><br />
<span style="color: #0000BF;">var</span> trig<span style="color: #000000;">,</span> numSmp<span style="color: #000000;">,</span> rate<span style="color: #000000;">,</span> freq<span style="color: #000000;">,</span> wobble<span style="color: #000000;">,</span>out<span style="color: #000000;">,</span>note<span style="color: #000000;">,</span>mod<span style="color: #000000;">;</span><br />
freq = <span style="color: #000000;">&#40;</span><span style="color: #000000;">140</span><span style="color: #000000;">/</span><span style="color: #000000;">60</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">/</span><span style="color: #000000;">3</span><span style="color: #000000;">;</span> <span style="color: #BF0000;">// It's not dubstep if it's not at an integer multiple of 140bpm.</span><br />
trig = <span style="color: #0000BF;">Impulse</span>.<span style="">kr</span><span style="color: #000000;">&#40;</span>freq<span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span> <span style="color: #BF0000;">// Main tempo pulse</span><br />
note = <span style="color: #0000BF;">Demand</span>.<span style="">kr</span><span style="color: #000000;">&#40;</span>trig<span style="color: #000000;">,</span> <span style="color: #000000;">0</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Dseq</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">40</span><span style="color: #000000;">,</span> <span style="color: #000000;">43</span><span style="color: #000000;">,</span> <span style="color: #000000;">47</span><span style="color: #000000;">,</span> <span style="color: #000000;">47</span><span style="color: #000000;">,</span> <span style="color: #000000;">40</span><span style="color: #000000;">,</span> <span style="color: #000000;">49</span>-<span style="color: #000000;">12</span><span style="color: #000000;">,</span> <span style="color: #000000;">43</span><span style="color: #000000;">,</span> <span style="color: #000000;">40</span>-<span style="color: #000000;">12</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span><br />
note = <span style="color: #0000BF;">Slew</span>.<span style="">kr</span><span style="color: #000000;">&#40;</span>note<span style="color: #000000;">,</span> <span style="color: #000000;">300</span><span style="color: #000000;">,</span> <span style="color: #000000;">20</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span> <span style="color: #BF0000;">// Pitch changes are slewed, faster up than down</span><br />
numSmp = <span style="color: #0000BF;">SampleRate</span>.<span style="">ir</span> <span style="color: #000000;">/</span> freq<span style="color: #000000;">;</span><br />
rate = 2pi <span style="color: #000000;">/</span> numSmp<span style="color: #000000;">;</span><br />
rate = rate <span style="color: #000000;">*</span> <span style="color: #0000BF;">Demand</span>.<span style="">kr</span><span style="color: #000000;">&#40;</span>trig<span style="color: #000000;">,</span> <span style="color: #000000;">0</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">Dseq</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span> <span style="color: #000000;">6</span><span style="color: #000000;">,</span> <span style="color: #000000;">6</span><span style="color: #000000;">,</span> <span style="color: #000000;">6</span><span style="color: #000000;">*</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span> <span style="color: #000000;">2</span><span style="color: #000000;">,</span> <span style="color: #000000;">8</span><span style="color: #000000;">,</span> <span style="color: #000000;">6</span><span style="color: #000000;">,</span> <span style="color: #000000;">6</span><span style="color: #000000;">*</span><span style="color: #000000;">2</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">inf</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">/</span> <span style="color: #000000;">2</span><span style="color: #000000;">;</span> <span style="color: #BF0000;">// Choose random &quot;wobble&quot; tempo</span><br />
wobble = <span style="color: #0000BF;">Phasor</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>trig<span style="color: #000000;">,</span> rate<span style="color: #000000;">,</span> pi<span style="color: #000000;">,</span> 2pi <span style="color: #000000;">&#41;</span>.<span style="">cos</span><span style="color: #000000;">;</span> <span style="color: #BF0000;">// Phasor is used to index cosine. Just sweeps through a half of a full wave.</span><br />
out = <span style="color: #0000BF;">VarSaw</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>note.<span style="">midicps</span><span style="color: #000000;">,</span> width<span style="color: #000000;">:</span> wobble.<span style="">range</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0.45</span><span style="color: #000000;">,</span><span style="color: #000000;">0.55</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #BF0000;">// Tone to be filtered. Notice modulation of width param.</span><br />
&nbsp; &nbsp; + <span style="color: #0000BF;">SinOsc</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>note.<span style="">midicps</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span> mul<span style="color: #000000;">:</span> wobble.<span style="">range</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="">dup</span><span style="color: #000000;">;</span> &nbsp;<span style="color: #BF0000;">// Subbass.</span><br />
out = <span style="color: #0000BF;">Decimator</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>out<span style="color: #000000;">,</span> <span style="color: #000000;">20000</span><span style="color: #000000;">,</span> wobble.<span style="">range</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1.2</span><span style="color: #000000;">,</span><span style="color: #000000;">8</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span> <span style="color: #BF0000;">// Sampling resolution is decreased in time with the wobble.</span><br />
out = <span style="color: #0000BF;">MoogLadder</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>out<span style="color: #000000;">,</span> wobble.<span style="">range</span><span style="color: #000000;">&#40;</span>note.<span style="">midicps</span><span style="color: #000000;">,</span><span style="color: #000000;">25000</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> wobble.<span style="">range</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0.03</span><span style="color: #000000;">,</span><span style="color: #000000;">0.1</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="">dup</span><span style="color: #000000;">;</span> <span style="color: #BF0000;">// Emulated Moog Low Pass.</span><br />
out = out <span style="color: #000000;">*</span> <span style="color: #000000;">0.25</span><span style="color: #000000;">;</span> <span style="color: #BF0000;">// Turn it down a bit to prevent clipping.</span><br />
out = <span style="color: #000000;">&#91;</span><span style="color: #0000BF;">DelayC</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>out<span style="color: #000000;">,</span> <span style="color: #000000;">1</span><span style="color: #000000;">,</span> wobble.<span style="">range</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">0.0012</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">,</span> <span style="color: #0000BF;">DelayC</span>.<span style="">ar</span><span style="color: #000000;">&#40;</span>out<span style="color: #000000;">,</span> <span style="color: #000000;">1</span><span style="color: #000000;">,</span> wobble.<span style="">range</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0.0012</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">;</span> <span style="color: #BF0000;">// Spatialization</span><br />
out = out <span style="color: #000000;">*</span> <span style="color: #0000BF;">Linen</span>.<span style="">kr</span><span style="color: #000000;">&#40;</span>trig<span style="color: #000000;">,</span> <span style="color: #000000;">0.01</span><span style="color: #000000;">,</span> <span style="color: #000000;">0.7</span><span style="color: #000000;">,</span> <span style="color: #000000;">1.3</span><span style="color: #000000;">/</span>freq<span style="color: #000000;">,</span> doneAction<span style="color: #000000;">:</span> <span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">;</span> <span style="color: #BF0000;">// Simple Envelope</span><br />
<span style="color: #000000;">&#125;</span>.<span style="">play</span><span style="color: #000000;">;</span></div></td></tr></tbody></table></div>
<p><object height="81" width="100%"><param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fphrontist%2Fdecimator-wobble"></param><param name="allowscriptaccess" value="always"></param> <embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fphrontist%2Fdecimator-wobble" type="application/x-shockwave-flash" width="100%"></embed></object></p>
<p><span id="more-97"></span></p>
<p>This sample was generated from the code above, which uses Demand UGens to sequence notes/wobble rates on lines 5 and 9. Line 6 adds a bit of <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/UGens/Synth%20control/Slew.html">slew</a> to the pitch signal, so it <a href="http://en.wikipedia.org/wiki/Glissando">glissandos</a> (slides) from note to note, faster up than down for heightened drama.</p>
<p>The signal path for the sound runs: initial synthesis, distortion, filtering, a simple spatialization effect and amplitude enveloping.</p>
<p>The tone is initially made up of a <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/UGens/Oscillators/VarSaw.html">VarSaw</a> oscillator whose width parameter (0 = downward sawtooth, 0.5 = triangle, 1 = upward sawtooth) is &#8220;wobbled&#8221; by the LFO (line 11). A pure sine wave an octave lower is added to this (line 12). The Decimator UGen distorts this signal by rounding values to an arbitrary degree of precision (i.e. 8-bit, 2-bit, 3.2-bit) as modulated by the LFO. This produces the higher-frequency content of the signal for the filter to do it&#8217;s magic on.</p>
<p>The result is a bit like that seething &#8220;<a href="http://www.facebook.com/pages/Dubstep-dirtier-than-fingering-ur-Sister-finding-ur-Dads-Engagement-ring/108371612525199">filthy</a>&#8221; sound that&#8217;s <a href="http://tinysong.com/eul3">so</a> <a href="http://tinysong.com/f0VY">popular</a> these days. I&#8217;ll probably do a dedicated post on it later, but the trick seems to be several square wave oscillators frequency modulating one another in turn, all through a band-pass filter.</p>
<p>Now that everything is sufficiently noisy it&#8217;s run through <a href="http://sc3-plugins.svn.sourceforge.net/viewvc/sc3-plugins/build/BhobUGens/BhobUGens.html">a nice emulation</a> of <a href="http://www.analoguesystems.co.uk/modules/rs100.htm">the Moog ladder lowpass filter</a> on line 14.</p>
<p>Line 16 splits what has until now been a monophonic signal in to two channels, each of which has a separate delay on it, the values for which are LFO-modulated out of phase with one another (so when one maximally delayed, the other has no delay). This gives the sound some (subtle?) &#8220;<a href="http://en.wikipedia.org/wiki/Precedence_effect">width</a>&#8221; when played with stereo separation, but if you were to play this on <a href="http://turkeyphant.org/images/gallery.phant/rig_porn/">a real rig</a> (in mono), there would be destructive and likely undesirable interference muddying up the low end. To dodge this, you could split the signal around 65Hz and only apply delays to the high end before reconstituting it.</p>
<p>The <a href="http://www.listarc.bham.ac.uk/lists/sc-users/search/">triggered LFO</a> is specified on lines 7-10. Worth noting are the phase angle bounds the <a href="http://supercollider.svn.sourceforge.net/viewvc/supercollider/trunk/common/build/Help/UGens/Triggers/Phasor.html">Phasor</a> UGen is sweeping through: pi to 2pi &#8211; only half of a full sine wave before resetting. Playing with these bounds can produce some interesting variations on the standard wobble.</p>
<p>I&#8217;ve really exaggerated the distortion to highlight the character of the sound on headphones or monitors. If you were to produce a track for dance floor use, you&#8217;d want to either generate sub-bass separately, possibly raising the line synthesized with decimation an octave or two, or ease up on the distortion; as it stands, this would be kind of weak. Try commenting out line 14 (the filter) before tweaking any parameters.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phrontist.org/2010/06/decimator-wobble-bass/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blink Test</title>
		<link>http://www.phrontist.org/2008/05/blink-test/</link>
		<comments>http://www.phrontist.org/2008/05/blink-test/#comments</comments>
		<pubDate>Tue, 06 May 2008 06:21:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Vast VU Meter]]></category>
		<category><![CDATA[electronics]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[vu meter]]></category>

		<guid isPermaLink="false">http://www.phrontist.org/?p=5</guid>
		<description><![CDATA[So there isn&#8217;t much I can do on the VU meter project until I get a hold of an oscilloscope. The next logical step would be to design the envelope follower that the comparator will receive input from, but doing this &#8220;blind&#8221; would be difficult. In the mean time I thought I&#8217;d check that the [...]]]></description>
			<content:encoded><![CDATA[<p>So there isn&#8217;t much I can do on <a href="http://www.phrontist.org/?p=3">the VU meter project</a> until I <a href="http://metatalk.metafilter.com/16196/Thanks">get a hold of an oscilloscope</a>. The next logical step would be to design the envelope follower that the comparator will receive input from, but doing this &#8220;blind&#8221; would be difficult. In the mean time I thought I&#8217;d check that <a href="http://www.opto22.com/site/pr_details.aspx?item=Z120D10&#038;qs=100610221053,,,0,3&#038;">the relay</a> I&#8217;m using can actually switch as fast as I need it to (without burning up) and get a feeling for what rapidly flashed incandescent bulbs look like.</p>
<p><span id="more-5"></span></p>
<p>I wired up a simple astable multivibrator <a href="http://www.uoguelph.ca/~antoon/gadgets/555/555.html">555 timer</a> circuit (which outputs <a href="http://en.wikipedia.org/wiki/Pulse_wave">a series of 5 volt pulses</a>) whose frequency I could control with a potentiometer. I got a 6ft lamp extension cord, cleaved the two wires in two and cut one to put the relay in line.</p>
<p><img src='http://farm3.static.flickr.com/2158/2469496855_baf0f71cef.jpg' alt='555 Timer Board, Relay Splice' class='alignnone' /></p>
<p>The primary reason to do the test was to see how much latency the 100 watt incandescent bulbs display at various rates. The bulbs take a little while to get to full brightness after current starts to flow and even longer to become totally dark after it stops. A little bit of this is okay, and the trailing edge will actually produce a neat ghosting effect as the meter falls off. Too much latency though, especially in reaching brightness, will mean a dim top edge to the meter and a disappointing disconnect between sound and visual.</p>
<p>By playing around with rapid pulsing and watching it closely I don&#8217;t <em>think</em> it will be a problem. It&#8217;s difficult to tell without seeing several of these in a row though, so I&#8217;m going to try to measure the brightness curve from the following video and see if I can write a quick simulation (using <a href="http://processing.org/">processing</a>?) of what the completed meter would look like with these bulbs. The camera&#8217;s auto-exposure function sensor latency will skew the data a bit, but it should be enough for a rough idea. Alternatively, when I get an oscilloscope (what can&#8217;t they do!), I could use a photoresistor to measure the brightness curve more precisely.</p>
<p>I&#8217;ve started a photoset for this project <a href="http://www.flickr.com/photos/phrontist/sets/72157604911115491/">here</a>.</p>
<p><object type="application/x-shockwave-flash" width="500" height="375" data="http://www.flickr.com/apps/video/stewart.swf?v=49235" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="flashvars" value="intl_lang=en-us&amp;photo_secret=d8d6a33c67&amp;photo_id=2470327446&amp;show_info_box=true"></param><param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=49235"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=49235" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&amp;photo_secret=d8d6a33c67&amp;photo_id=2470327446&amp;flickr_show_info_box=true" height="375" width="500"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.phrontist.org/2008/05/blink-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Vast VU Meter</title>
		<link>http://www.phrontist.org/2008/05/a-vast-vu-meter/</link>
		<comments>http://www.phrontist.org/2008/05/a-vast-vu-meter/#comments</comments>
		<pubDate>Fri, 02 May 2008 05:48:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Vast VU Meter]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[electronics]]></category>
		<category><![CDATA[lexington]]></category>
		<category><![CDATA[radio]]></category>
		<category><![CDATA[vu meter]]></category>
		<category><![CDATA[wrfl]]></category>

		<guid isPermaLink="false">http://www.phrontist.org/?p=3</guid>
		<description><![CDATA[
This is Patterson Office Tower (POT) on The University of Kentucky campus. It&#8217;s home to a small cafe/mezzanine, an obscure mathematics library, and the offices of all the professors and bureaucrats who don&#8217;t fit in the endearingly inefficient buildings elsewhere on campus. If, as civil engineers like to say, architecture is the art of wasting [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://farm3.static.flickr.com/2374/2448546270_057faff6f1.jpg?v=0' alt='Patterson Office Tower on a Sunny Day'/></p>
<p>This is Patterson Office Tower (POT) on <a href="http://uky.edu">The University of Kentucky</a> campus. It&#8217;s home to a small cafe/mezzanine, an obscure mathematics library, and the offices of all the professors and bureaucrats who don&#8217;t fit in the endearingly inefficient buildings elsewhere on campus. If, as civil engineers like to say, architecture is the art of wasting space, it&#8217;s oft-scorned <a href="http://en.wikipedia.org/wiki/Brutalist">brutalist</a> style seems to be a good example of what would happen if we eschewed the discipline altogether.</p>
<p><span id="more-3"></span></p>
<p><img src='http://farm3.static.flickr.com/2071/2447716905_a0ddc59fda.jpg' alt='White hall/POT connection viewed from POT' class='alignnone' /></p>
<p>On top of this mercilessly orthogonal concrete form is the broadcast tower of <a href="http://wrfl.fm">Radio Free Lexington</a>. Despite it&#8217;s &#8220;dim bulb&#8221; 250 watt transmission power, the station <a href="http://www.fcc.gov/fcc-bin/FMTV-service-area?x=FM110859.html">currently reaches</a> most of Lexington&#8217;s 275,000 or so residents via terrestrial broadcast thanks to the height of the tower and <a href="http://maps.google.com/maps?f=q&#038;hl=en&#038;geocode=&#038;q=Lexington,+KY&#038;ie=UTF8&#038;ll=38.038556,-84.503987&#038;spn=0.022984,0.040169&#038;t=p&#038;z=15">the hill it sits on</a>. The FCC has approved WRFL for an upgrade to 7900 watts, which will let us reach <a href="http://www.fcc.gov/fcc-bin/FMTV-service-area?x=FM1042385.html">a much larger swath of the central bluegrass</a>.</p>
<p>So I have this idea for an installation I think would work well to draw attention to the station either in celebration of the upgrade or as a means to gather support for it. Following in the steps of <a href="http://hacks.mit.edu/Hacks/by_year/1993/green_bldg_vu_meter/">the green building hack</a> at MIT and the <a href="http://blinkenlights.de/">Blinkenlights Project</a> I&#8217;d like to turn POT in to a giant real time volume display of the station&#8217;s broadcast.</p>
<p>To be more specific, I want to take a row of windows (or more, as money allows) in the building and place lamps in them to form a vertical bar <a href="http://en.wikipedia.org/wiki/VU_meter">VU meter</a>. The overall effect will look like the video below, but 16 stories tall and visible from miles away. You could tune in to the station during the evening and watch this <em>huge</em> column of light on the face of POT leap up and down in synchrony with the music. I&#8217;m grinning just thinking about it.</p>
<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/FBW6Puz5j7o&#038;hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/FBW6Puz5j7o&#038;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p>How could that be done? Well the Blinkenlights and Green Building projects were both able to run significant amounts of cabling from large power supplies to relays across several stories/rooms. POT is in constant use so cost and difficulty considerations aside we can rule out any scheme involving huge cable lays.</p>
<p>Happily, the signal we want to represent is already available as radio broadcast on every floor. So instead of switching a huge number of lights from a central system, we can put a radio on each floor and have each set of lights switched autonomously in response to the signal it receives.</p>
<p><img src="http://farm3.static.flickr.com/2359/2447676495_48a9f56c10.jpg" alt="POT from the singletary center" /></p>
<p>So the basic plan is to have a simple lamp with, lets say, three 100 watt bulbs in each window. You have a <a href="http://en.wikipedia.org/wiki/Relay">relay</a> (actually, <a href="http://www.opto22.com/site/pr_details.aspx?item=Z120D10&#038;qs=100610221053,,,0,3&#038;">this</a> relay) that can switch the bulbs on and off quickly in response to a low voltage signal. This signal is provided by a simple circuit that detects how loud the signal coming from the radio is, and while it&#8217;s above a certain threshold, activates the relay to turn on the lamps. By setting that threshold slightly higher on each successive floor, you&#8217;ll get that VU meter effect.</p>
<p>That circuit to sit between the radio and the relay will be an <a href="http://en.wikipedia.org/wiki/Envelope_follower">envelope follower</a> and a <a href="http://en.wikipedia.org/wiki/Comparator">comparator</a> (probably <a href="http://www.national.com/mpf/LM/LM339.html">an LM339</a>). The envelope follower may be as simple as a diode to <a href="http://en.wikipedia.org/wiki/Rectifier">rectify</a> the signal and a <a href="http://en.wikipedia.org/wiki/Low_pass_filter">RC low pass filter</a>. The whole apparatus (lamps included) should cost less than $40 (that&#8217;s a high estimate) per floor. Assuming we do 16 floors, and a few red ones on the top floor for a cool peaking effect, that&#8217;s around $800. Probably less. But let&#8217;s say $1000.</p>
<p>I&#8217;m currently working on a prototype of a single unit. I&#8217;ve already got one of the relays to play around with. The problems remaining are&#8230;</p>
<ul>
<li>Finding some radios that can run off a wall power supply, yet are cheap and can be had by the dozen</li>
<li>Designing and testing the envelope follower with an oscilloscope. The big question here is what kind of time constant should be used to prevent flickering but not take too long to fall off.</i>
<li>Finding good potentiometers for adjusting the threshold of the comparator.</li>
<li>Packaging all of this, wiring everything safely, and in a duplicable way.</i>
</ul>
<p>Then it&#8217;s just a matter of finding funding and convincing the powers that be (who do you even ask? the building super? each individual office holder?) to let us set it up. It could easily be reused or expanded (add some band pass filters for a frequency analyzer), and different locations provide for some interesting opportunities. For live events, you could use a low power FM transmitter to drive them instead.</p>
<p><img src='http://farm3.static.flickr.com/2318/2448662856_800042d5e3.jpg' alt='POT at dusk' class='alignnone' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.phrontist.org/2008/05/a-vast-vu-meter/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

