<?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>Colin Sullivan &#187; programming</title>
	<atom:link href="http://colin-sullivan.com/main/archives/tag/programming/feed" rel="self" type="application/rss+xml" />
	<link>http://colin-sullivan.com/main</link>
	<description>Thoughts and stories from Colin&#039;s brain.</description>
	<lastBuildDate>Mon, 30 Aug 2010 15:37:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Fibbass 2010</title>
		<link>http://colin-sullivan.com/main/archives/699</link>
		<comments>http://colin-sullivan.com/main/archives/699#comments</comments>
		<pubDate>Sun, 09 May 2010 17:24:41 +0000</pubDate>
		<dc:creator>Colin</dc:creator>
				<category><![CDATA[home]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[words]]></category>
		<category><![CDATA[bass]]></category>
		<category><![CDATA[fibonacci]]></category>
		<category><![CDATA[max/msp]]></category>
		<category><![CDATA[my music]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://colin-sullivan.com/main/?p=699</guid>
		<description><![CDATA[Here is the result of this semester&#8217;s work on my Fibonacci composition: Download as .mp3 &#124; Download as .ogg &#124; Download as Apple Lossless (.m4a) If you are interested in my process, please feel free to read my final report below, or email me. Original Objective To write a bass guitar composition and design algorithmically [...]]]></description>
			<content:encoded><![CDATA[<p>Here is the result of this semester&#8217;s work on my <a href="http://colin-sullivan.com/main/archives/582">Fibonacci composition</a>:</p>
<div style="text-align:center;margin-bottom: 10px;"><!-- degradable html5 audio and video plugin --><div class="audio_wrap html5audio"><audio controls autobuffer id="html5audio-0" class="html5audio"><source src="http://colin-sullivan.com/main/wp-content/uploads/2010/05/Fibbass.ogg" type="audio/ogg" /><source src="http://colin-sullivan.com/main/wp-content/uploads/2010/05/Fibbass.mp3" type="audio/mpeg" /><a href="http://colin-sullivan.com/main/wp-content/uploads/2010/05/Fibbass.mp3" title="Click to open" id="f-html5audio-0">Audio MP3</a><script type="text/javascript">AudioPlayer.embed("f-html5audio-0", {soundFile: "http://colin-sullivan.com/main/wp-content/uploads/2010/05/Fibbass.mp3"});</script></audio></div><br /><a href="http://colin-sullivan.com/main/wp-content/uploads/2010/05/Fibbass.mp3">Download as .mp3</a> | <a href="http://colin-sullivan.com/main/wp-content/uploads/2010/05/Fibbass.ogg">Download as .ogg</a> | <a href="http://colin-sullivan.com/main/wp-content/uploads/2010/05/Fibbass.m4a">Download as Apple Lossless (.m4a)</a></div>
<p>If you are interested in my process, please feel free to read my final report below, or email me.<br />
<span id="more-699"></span></p>
<h3>Original Objective</h3>
<p>To write a bass guitar composition and design algorithmically determined accompaniments, all based on the Fibonacci sequence.</p>
<h3>Process</h3>
<p>My process in developing this project was very linear due to my limited time frame.  In the beginning of the semester, I set up a list of goals to accomplish, and mapped them evenly across the remainder of the semester.  Initially all of my goals were technical, proof of concept pieces, which became the individual components that I would later combine into a larger signal-flow.  Some of these components took more time to implement than I had anticipated and some took much less, so I was able to complete them all on time.  After completing any one of these smaller components, I hardly ever went back to revise or rewrite it.  For example, I spent approximately an hour choosing the percussive sounds that I used in the piece, and never looked back after that.  I feel that my ability to perform the piece successfully is partly due to this lack of perfection, as I would have never had enough time to finish writing the composition, let alone practice playing it, if I had attempted to make every aspect perfect.</p>
<p>As far as the composition itself, I did not spend that much time on the general structure, nor on any other aspect of it.  For the central melody, I arbitrarily chose a center (pitch), and used successive Fibonacci numbers to determine how many semitones will be between the current note, and the next note.  I alternate the direction of the pitch, i.e. up 1 semitone, down 1 semitone, up 2, down 3, up 5, down 8, etc.  The amount of quarter-note rests between each note is also based on this “global” Fibonacci number.  This ended up not sounding too bad at all.</p>
<p>To integrate this in to Max/MSP, I basically just fed the MIDI into Max, and devised algorithms to keep track of this global Fibonacci number based on the notes that I am playing.  All percussion is generated based on this number, and other randomly generated numbers.  The number sometimes denotes how many percussive notes to play, how long to wait between them, etc.</p>
<h3>Final Result</h3>
<p>Although I didn’t get to accomplish some of my original goals, I am satisfied with the way this project turned out after a semester’s work.  My plan was to get my hands dirty with this concept, and to see what I could make of it.  The result is a fairly polished, proof of concept, of what I hope to become a much bigger composition next semester.</p>
<p>This semester allowed me to work out many of the technical issues that I had considered while planning this project such as exactly how the signal flow would occur during the performance.  I was also able to experiment briefly with many of the aspects that I hope to exploit further next semester, including audio effects, and melody generation within Max/MSP.    Because of my limited amount of time and the vast amount of elements involved in this project, I was only able to spend a short amount of time on each element.  In the future, I would like to spend much more time choosing and manipulating the elements of this project, to make sure that every aspect is intentional.  </p>
<p>The hardest part for me, due to my lack of formal music training, is the actual composition.  I have been discussing with many classically trained musicians and music professors (Prof. Curtis Bahn, Prof. Scott McCoy, Garrett Smelcer, Garrett Sullivan) over the past semester various techniques and concepts relating to this project, and am looking forward to my elaboration of these ideas in the future.</p>
<p>Now that I have a general concept, and ideas of how to implement various techniques, next semester I plan on taking this project further, and hopefully expanding it into what I originally hoped it would be.</p>
]]></content:encoded>
			<wfw:commentRss>http://colin-sullivan.com/main/archives/699/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://colin-sullivan.com/main/wp-content/uploads/2010/05/Fibbass.mp3" length="5508398" type="audio/mpeg" />
<enclosure url="http://colin-sullivan.com/main/wp-content/uploads/2010/05/Fibbass.ogg" length="2239766" type="video/ogg" />
		</item>
		<item>
		<title>Kenyon Finally Launches!</title>
		<link>http://colin-sullivan.com/main/archives/645</link>
		<comments>http://colin-sullivan.com/main/archives/645#comments</comments>
		<pubDate>Mon, 05 Apr 2010 15:50:20 +0000</pubDate>
		<dc:creator>Colin</dc:creator>
				<category><![CDATA[home]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.colin-sullivan.com/main/?p=645</guid>
		<description><![CDATA[My Symfony project is finally complete. I cannot take credit for the design, but I am quite proud of how the backend came out. Of course, all of the coolness is stuff the general public cannot see. Symfony worked out quite well, I would certainly use it again if I had to do a PHP [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.colin-sullivan.com/main/archives/522">My Symfony project</a> is finally complete.  I cannot take credit for the design, but I am quite proud of how the backend came out.  Of course, all of the coolness is stuff the general public cannot see.  Symfony worked out quite well, I would certainly use it again if I had to do a PHP project in the future.<br />
<span id="more-645"></span><br />
Integrating the site with Paypal&#8217;s Payflow Link service was very easy as well.  They give you many options for testing, and the service is very well documented.  The only problem I couldn&#8217;t figure out how to get around is this JavaScript alert that is thrown every time a user completes a purchase, warning them that their data is being sent insecurely back to the merchant&#8217;s site.  This is not a very helpful error in my opinion, as they are not sending any credit card information and it will undoubtedly just scare users.  Overall, the service works quite well.</p>
]]></content:encoded>
			<wfw:commentRss>http://colin-sullivan.com/main/archives/645/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IBM: Extreme Blue Internship</title>
		<link>http://colin-sullivan.com/main/archives/629</link>
		<comments>http://colin-sullivan.com/main/archives/629#comments</comments>
		<pubDate>Mon, 29 Mar 2010 23:36:42 +0000</pubDate>
		<dc:creator>Colin</dc:creator>
				<category><![CDATA[home]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.colin-sullivan.com/main/?p=629</guid>
		<description><![CDATA[This summer I will be interning at IBM in Austin, TX. I will be part of the Extreme Blue team of interns, working for IBM&#8217;s Emerging Technologies division on a project called Big Sheets. I will be doing mostly JavaScript interface work, and am looking forward to the experience.  Over the summer I&#8217;ll write as [...]]]></description>
			<content:encoded><![CDATA[<p>This summer I will be interning at <a href="http://ibm.com">IBM</a> in Austin, TX.  I will be part of the <a href="http://ibm.com/extremeblue">Extreme Blue</a> team of interns, working for IBM&#8217;s <a href="http://www-01.ibm.com/software/ebusiness/jstart/index.html">Emerging Technologies</a> division on a project called <a href="http://www-01.ibm.com/software/ebusiness/jstart/bigsheets/">Big Sheets</a>.  I will be doing mostly JavaScript interface work, and am looking forward to the experience.  Over the summer I&#8217;ll write as much as I am legally able to about my time at IBM.</p>
]]></content:encoded>
			<wfw:commentRss>http://colin-sullivan.com/main/archives/629/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Concert</title>
		<link>http://colin-sullivan.com/main/archives/615</link>
		<comments>http://colin-sullivan.com/main/archives/615#comments</comments>
		<pubDate>Fri, 05 Mar 2010 16:40:05 +0000</pubDate>
		<dc:creator>Colin</dc:creator>
				<category><![CDATA[home]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.colin-sullivan.com/main/?p=615</guid>
		<description><![CDATA[Concert is an online collaborative organizational tool for sounds. I am developing Concert as part of Software Design and Documentation class here at RPI. See our wiki for more information. The idea behind Concert is that many groups of musicians, like [ ], record practices and riffs with the intention of going through them later [...]]]></description>
			<content:encoded><![CDATA[<p>Concert is an online collaborative organizational tool for sounds.  I am developing Concert as part of Software Design and Documentation class here at RPI.  See our <a href="http://wiki.github.com/joshelser/Concert/">wiki</a> for more information.<br />
<span id="more-615"></span><br />
The idea behind Concert is that many groups of musicians, like [  ], record practices and riffs with the intention of going through them later and picking out the good from the bad.  With our band anyway, this has not been working.  Mostly it is because the recordings are on <em>my</em> computer, and we have yet to sit down altogether and sort through them all.  When we have time to get together, we prefer to work on new material, or simply play, thus producing more recordings.</p>
<p>Concert solves not only this problem of choosing the good from the bad, but also solves the problem of organization of the various audio &#8220;segments&#8221;.  Concert will allow all the members of a group, say Tim, Garrett and myself, to collaboratively listen to each of the audio recordings that we have piled up on our own time.  A user of Concert can then highlight a segment of one of these audio recordings and &#8220;tag&#8221; it, effectively organizing parts of the audio recordings.  Other users in the same group will be able to see these changes, and add/remove audio segments from these tags.</p>
<p>On the technical side, we have a few challenges to face.  One challenge is on the backend, with the audio manipulation.  We are hoping to provide the functionality for a user to download an &#8220;audio segment&#8221;, that is, a segment of an audio file that they have previously uploaded.  Another set of challenges, which are the ones I am trying to deal with, are on the client-side.  We are hoping to use HTML5 instead of flash for the audio playback.  I have already solved a few quirky issues that I&#8217;ve found with this new technology, and overall it seems fairly solid.</p>
<p>Overall, we hope to have a small working prototype of Concert by the end of the semester.  We&#8217;ll see where this takes us.</p>
]]></content:encoded>
			<wfw:commentRss>http://colin-sullivan.com/main/archives/615/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fibonacci Composition</title>
		<link>http://colin-sullivan.com/main/archives/582</link>
		<comments>http://colin-sullivan.com/main/archives/582#comments</comments>
		<pubDate>Thu, 25 Feb 2010 21:22:18 +0000</pubDate>
		<dc:creator>Colin</dc:creator>
				<category><![CDATA[home]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[fibonacci]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.colin-sullivan.com/main/?p=582</guid>
		<description><![CDATA[This semester, for &#8220;Interactive Arts Programming&#8221; class, I will be making an interactive composition based on the Fibonacci sequence. The piece will involve me playing the bass line of my composition, while a computer takes my performance as input and generates algorithmically determined accompaniments. Objective My objective is to write a bass guitar composition and [...]]]></description>
			<content:encoded><![CDATA[<p>This semester, for &#8220;Interactive Arts Programming&#8221; class, I will be making an interactive composition based on the Fibonacci sequence.  The piece will involve me playing the bass line of my composition, while a computer takes my performance as input and generates algorithmically determined accompaniments.<br />
<span id="more-582"></span></p>
<h3>Objective</h3>
<p>My objective is to write a bass guitar composition and design algorithmically determined accompaniments, all based on the Fibonacci sequence.</p>
<h3>Goals</h3>
<ul>
<li>Finish writing a composition that I once started on my bass revolving around the Fibonacci numbers</li>
<li>Design various accompaniments to this bass line also revolving around the Fibonacci sequence</li>
<li>Experiment with digital audio effects, the parameters of which are manipulated based on Fibonacci sequence</li>
<li>Experiment with manual manipulation of different parameters of the auto-accompaniments</li>
<li>Experiment with multi-channel audio</li>
<li>Use a MIDI foot pedal, or other sensors (accelerometer), to manipulate these parameters during performance of the piece</li>
</ul>
<h3>Implementation</h3>
<p>I am hoping to achieve these goals by creating a few smaller projects to tackle each of them, and then bringing all of the techniques together in the end.</p>
<div style="margin-left: 20px">
<h4>Input</h4>
<p>Using the MIDI pickup on my bass guitar, I will not only depend on pitch analysis from the audio signal, but a mixture of information from the MIDI and the audio signal, to ensure that the correct note value is used throughout the rest of the program.</p>
<h4>Accompaniments</h4>
<p>The MIDI from the accompaniments will be generated with Max, then sent via MIDIpipe or some other method to Logic or Live, so it wont sound like garbage.</p>
<h4>Digital Audio Effects</h4>
<p>Instead of creating effects from scratch, I will experiment with MSP/ChucK patches that have already been created, and merely manipulate various parameters of them based on Fibonacci sequence.</p>
<h4>Manual parameter manipulation</h4>
<p>I will experiment with manipulation of the parameters of the accompaniments themselves, as well as parameters of the audio effects/channels, to see what sounds good.</p>
<h4>Multi-channel audio</h4>
<p>It would be interesting to send these accompaniments through multiple channels, to achieve a surround sound effect.  I will do the audio channel management in Max/MSP.</p>
</div>
<p>In the end I hope to have flushed out this composition I have in mind, and to have some natural sounding, algorithmically determined accompaniments in the piece.  My goal is not to merely generate these accompaniments in an arbitrary way, but to ensure that the piece is still pleasing to listen to.  I do not want knowledge of my development process to be a prerequisite for listening to the piece.  It should stand on its own.</p>
]]></content:encoded>
			<wfw:commentRss>http://colin-sullivan.com/main/archives/582/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CMS in Symfony</title>
		<link>http://colin-sullivan.com/main/archives/522</link>
		<comments>http://colin-sullivan.com/main/archives/522#comments</comments>
		<pubDate>Sat, 20 Feb 2010 17:01:53 +0000</pubDate>
		<dc:creator>Colin</dc:creator>
				<category><![CDATA[home]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.colinsullivan.dreamhosters.com/main/?p=522</guid>
		<description><![CDATA[I was recently hired by Synthetic Cinema to develop a content management system for kenyonappliances.com.  I developed the entire backend using the Symfony PHP framework, and implemented some Javascript functionality on the frontend. Features Entire e-commerce solution, so Kenyon can sell their products directly to customers. Dealer login, enabling dealers to select which products they [...]]]></description>
			<content:encoded><![CDATA[<p>I was recently hired by Synthetic Cinema to develop a content management system for <a href="http://kenyonappliances.com">kenyonappliances.com</a>.  I developed the entire backend using the Symfony PHP framework, and implemented some Javascript functionality on the frontend.<br />
<span id="more-522"></span></p>
<h3>Features</h3>
<ul>
<li>Entire e-commerce solution, so Kenyon can sell their products directly to customers.</li>
<li>Dealer login, enabling dealers to select which products they carry</li>
<li>Google Maps &#8220;Dealer Locator&#8221; which can be specific to items carried by dealer</li>
<li>Administrative users can receive notification of low stock and product invoices</li>
<li>Unlimited number of static pages, all editable through administrative interface</li>
<li>All products &amp; product categories handled through admin interface</li>
</ul>
<h3>Implementation</h3>
<ul>
<li>PHP Symfony web framework</li>
<li>Symfony plugins</li>
<li>Javascript
<ul>
<li>Google Maps API</li>
<li>jQuery/Ajax</li>
</ul>
</li>
<li>MySQL</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://colin-sullivan.com/main/archives/522/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Times Square New Years 2010 Pyrotechnics</title>
		<link>http://colin-sullivan.com/main/archives/503</link>
		<comments>http://colin-sullivan.com/main/archives/503#comments</comments>
		<pubDate>Mon, 01 Feb 2010 01:37:49 +0000</pubDate>
		<dc:creator>Colin</dc:creator>
				<category><![CDATA[home]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[new years eve]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[pyro/fx]]></category>
		<category><![CDATA[pyromate]]></category>
		<category><![CDATA[pyrotechnics]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[times square]]></category>

		<guid isPermaLink="false">http://colin-sullivan.com/main/?p=503</guid>
		<description><![CDATA[This past new years, I worked for Pyro/FX at Times Square, programming and operating the digital firing system to fire all of the pyrotechnics underneath the ball.  It was an exciting and nerve-wracking experience, but like all shows I’ve done, very rewarding in the end. Unlike our shows at Mohegan Sun, where my boss (Phil [...]]]></description>
			<content:encoded><![CDATA[<p>This past new years, I worked for <a href="http://www.pyrofx.com/" target="_blank">Pyro/FX</a> at Times Square, programming and operating the digital firing system to fire all of the pyrotechnics underneath the ball.  It was an exciting and nerve-wracking experience, but like all shows I’ve done, very rewarding in the end.<span id="more-503"></span></p>
<p>Unlike our shows at Mohegan Sun, where my boss (Phil Gauvin) writes the scripts in our native scripting program, I was handed a script that a different coworker had written in Excel, which was in a format that made sense to him as he was planning the event.</p>
<p>When I first looked at this script, I was a bit taken back.  942 cues, approximately 650 of which detonate in 60 seconds, between 11:59:00 and 12:00:00.  This was a huge script, and it was not in the format that I needed it to be in for the Nighthawk.</p>
<p>Ruby to the rescue.</p>
<p>I had been working with Ruby for a good amount of last semester, so about a week before the show, I went to town.  After a bit of trouble with converting the time on the original script (5:59:45 PM) to my relative time from the start of the script (0.00 seconds), I had the script ready.  Since there was about a minute of pyro every hour until midnight, I decided to just make the entire night a single script, and to avoid overflowing any number representations in the system, just added about 100 seconds between these discrete events.  This allowed me to simply stop the panel after each event, forward to the next cue, and I was good to go.  <a href="http://www.pyromate.com/about-pyromate.htm" target="_blank">Dave Levoy </a>from <a href="http://www.pyromate.com/" target="_blank">Pyromate, Inc</a>. was with us all night as a consultant in case we had any problems with his system, and to make sure we didn’t run into any quirks or small issues.  He helped me figure out how to run such a long show on his panel, and pointed out the number overflow problem.</p>
<p>Setup went pretty flawlessly, as it usually does with the Pyromate system.  We used all wired mods, to eliminate the possibility of wireless interference, although I’m sure they would have worked just fine.</p>
<p>As far as the actual execution of the show, it was a bit chaotic in the beginning, but everything ended up working out in the end.  I enjoyed the time between firings, as I only had to check continuity and keep track of a small number of events at once, and it gave us ample time to fix any problems that may have occurred during firings.  All in all it was a very successful event, and thanks to those 5 hour energy shots, I was alert the entire time <img src='http://colin-sullivan.com/main/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://colin-sullivan.com/main/archives/503/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bass Distortion with ChucK</title>
		<link>http://colin-sullivan.com/main/archives/343</link>
		<comments>http://colin-sullivan.com/main/archives/343#comments</comments>
		<pubDate>Thu, 22 Oct 2009 17:01:09 +0000</pubDate>
		<dc:creator>Colin</dc:creator>
				<category><![CDATA[home]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[sound]]></category>

		<guid isPermaLink="false">http://colin-sullivan.com/main/?p=343</guid>
		<description><![CDATA[This semester I have been pursuing an independent study in DSP Programming for Music/Audio Applications. For my final project, I will be designing an Overdrive/Distortion effect that is customized for the sound of my bass. I&#8217;ve decided to implement this using a programming language called ChucK, which so far has been working out extremely well. [...]]]></description>
			<content:encoded><![CDATA[<p>This semester I have been pursuing an independent study in DSP Programming for Music/Audio Applications.  For my final project, I will be designing an Overdrive/Distortion effect that is customized for the sound of my bass.<span id="more-343"></span></p>
<p>I&#8217;ve decided to implement this using a programming language called <a href="http://chuck.cs.princeton.edu/">ChucK</a>, which so far has been working out extremely well.  <a href="http://chuck.cs.princeton.edu/">ChucK</a> is a relatively new multimedia programming language which allows you to accomplish some complicated tasks in very little time.  Since I have not really done any DSP Programming before, it is extremely gratifying to be able to hear results immediately.</p>
<p>The way Independent Study works at RPI, is you make proposals, set goals, and complete them.  Here is my proposal for my end-of-semester project: <a href='http://colin-sullivan.com/main/wp-content/uploads/2009/10/Colin-Sullivan-IS-Project-Proposal.pdf'>Project Proposal</a></p>
<p><a href="http://www.arts.rpi.edu/crb/">Curtis Bahn</a> is my advising professor for this project, and he has been more than helpful.</p>
<p>Here is an audio sample of the effect in action.  There are no other alterations to the bass signal besides mixing in a bit of clean as well.  The affected signal was recorded through my stack (GK-700RBII, Ampeg SVT410HLF) using my Zoom H4n.  The distortion increases as I play my bass louder, as you can hear towards the end of the clip.</p>
<!-- degradable html5 audio and video plugin --><div class="audio_wrap html5audio"><audio controls autobuffer id="html5audio-1" class="html5audio"><source src="http://colin-sullivan.com/main/wp-content/uploads/2009/12/Overdrive_test.ogg" type="audio/ogg" /><source src="http://colin-sullivan.com/main/wp-content/uploads/2009/12/Overdrive_test.mp3" type="audio/mpeg" /><a href="http://colin-sullivan.com/main/wp-content/uploads/2009/12/Overdrive_test.mp3" title="Click to open" id="f-html5audio-1">Audio MP3</a><script type="text/javascript">AudioPlayer.embed("f-html5audio-1", {soundFile: "http://colin-sullivan.com/main/wp-content/uploads/2009/12/Overdrive_test.mp3"});</script></audio></div>
<p>ChucK ended up working very well.  I think the effect sounds pretty good.  As you can see below, there are infinitely many options available for the coefficients of the wavetable function (Gen17 object in ChucK).  I can spend hours tweaking them, but the ones I settled on are uncommented below.</p>
<p><a id="hiddenButton-0" class="show">Click to show code.</a></p>
<div class="hidden code" id="hidden-0">
<pre class="brush: cpp;">/**
*  Overdrive/Distortion effect (meant for bass guitar)
*
*  Copyright (c) 2009 Colin Sullivan
*
*  Permission is hereby granted, free of charge, to any person obtaining a copy
*  of this software and associated documentation files (the "Software"), to deal
*  in the Software without restriction, including without limitation the rights
*  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
*  copies of the Software, and to permit persons to whom the Software is
*  furnished to do so, subject to the following conditions:
*
*  The above copyright notice and this permission notice shall be included in
*  all copies or substantial portions of the Software.
*
*  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
*  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
*  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
*  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
*  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
*  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
*  THE SOFTWARE.
**/

// patch
//envelope follower
adc => Gain g => OnePole p => blackhole;
//clean lows
adc => LPF lowpass => Gain lowClean => Gain mix;
//overdrive on lows
lowpass => Gen17 lowOD => mix;
//clean highs
adc => BPF highpass => Gain highClean => mix;
//overdrive on highs
adc => highpass => Gen17 highOD => mix;
//mix them together
mix => dac;

//master Levels
mix.gain(0);
1  => float masterVolumeLimit;

//low levels
lowClean.gain(1); //1
lowOD.gain(0); //0.3

//high levels
highClean.gain(1); //0.3
highOD.gain(0); //1

//frequency of pass filters
lowpass.freq(1000);
highpass.set(1000, 1000/(1200-800) );

//square input
adc => g;
//multiply
3 => g.op;
// set pole position
0.9999 => p.pole;

// load up the coeffs; amplitudes for successive partials
lowOD.coefs( [ 1., 0.5, 0, 0.5, 1. ] ); //Nice fat fuzz
//lowOD.coefs( [1., 0.5, 0, -0.5, -1.] );  //thrashy, but buzz
//lowOD.coefs( [.99, .88, 0, .88, -.99] );	//loud and farty fuzz
// load up the coeffs; amplitudes for successive partials
//highOD.coefs( [ 1., 0.5, 0, 0.5, 1. ] );
//highOD.coefs( [1., 0.5, 0, -0.5, -1.] );
//highOD.coefs( [.99, .88, 0, .88, -.99] );
//highOD.coefs( [0.5, 0, -0.5] );
highOD.coefs( [.256, -.576, .432, -.120, .9] ); //not grungy enough

//master volume
0 => float masterVolume;
0 => float i;

// will hold last value of filter
0 => float pLast;
// full overdrive flag
0 => int fullOD;

// Allows output to chuck~ object outlet in Max/MSP
MaxMessage m;

while (true) {
  while(masterVolume < masterVolumeLimit) {
    mix.gain(masterVolume);
    0.001 +=> masterVolume;
    1::ms => now;
  }

  // Get last value of filter
  p.last()*50 => pLast;

  // Debug to max
  //pLast => m.floatout;

  // Set high overdrive gain based on dynamics of playing
  if(pLast < 1 &#038;&#038; fullOD == 0)
  {
    highOD.gain(pLast);
    lowOD.gain(0.3*pLast);
  }
  else if(pLast >= 1)
  {
    highOD.gain(1);
    lowOD.gain(0.3);
    1 => fullOD;
  }
  else if(pLast < 0.5 &#038;&#038; fullOD == 1)
  {
    // turn fullOD flag off if done lowering
    if(highOD.gain() - pLast < 0.001)
    {
      0 => fullOD;
    }
    else
    {
      // Lower gain
      highOD.gain(highOD.gain() - 0.001);
    }
  }
  0.01 +=> i;
  1::ms => now;
}
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://colin-sullivan.com/main/archives/343/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://colin-sullivan.com/main/wp-content/uploads/2009/12/Overdrive_test.mp3" length="2446720" type="audio/mpeg" />
		</item>
		<item>
		<title>RPInventory</title>
		<link>http://colin-sullivan.com/main/archives/341</link>
		<comments>http://colin-sullivan.com/main/archives/341#comments</comments>
		<pubDate>Thu, 22 Oct 2009 16:53:27 +0000</pubDate>
		<dc:creator>Colin</dc:creator>
				<category><![CDATA[home]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://colin-sullivan.com/main/?p=341</guid>
		<description><![CDATA[RPInventory is a web-based inventory system designed for use by clubs at RPI. I have been working on the RPInventory team for the past year, doing mostly Ajax/Javascript interface work. We use jQuery for all manipulations and Ajax calls, and PHP/MySQL for the back-end. For more information about the project, http://www.rpinventory.com/.]]></description>
			<content:encoded><![CDATA[<p>RPInventory is a web-based inventory system designed for use by clubs at RPI.  I have been working on the RPInventory team for the past year, doing mostly Ajax/Javascript interface work.<span id="more-341"></span></p>
<p>We use jQuery for all manipulations and Ajax calls, and PHP/MySQL for the back-end.</p>
<p>For more information about the project, <a href="http://www.rpinventory.com/">http://www.rpinventory.com/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://colin-sullivan.com/main/archives/341/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
