<?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; supercollider</title>
	<atom:link href="http://www.phrontist.org/tag/supercollider/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>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>
	</channel>
</rss>

