tag:blogger.com,1999:blog-80708252551007641462024-03-13T23:06:01.784+13:00Off-White Noise... not quite random ...meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.comBlogger29125tag:blogger.com,1999:blog-8070825255100764146.post-32871862476079347472013-06-13T09:40:00.002+12:002013-06-13T09:59:04.031+12:00AutoTheory<div class="separator" style="clear: both; text-align: center;">
<br /></div>
As you may know, my company <a href="http://pitchblende.co.nz/" target="_blank">Pitchblende</a> has been involved in the creation of several successful REs already. In association with Mozaic we have recently released a brand new RE to the Shop. It's called <b>AutoTheory</b> and, frankly, we think it's great!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-ah66rkD0OFg/UbjoOjnNqeI/AAAAAAAADOE/wEO7pfjEWGI/s1600/shop_image_front.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="348" src="http://4.bp.blogspot.com/-ah66rkD0OFg/UbjoOjnNqeI/AAAAAAAADOE/wEO7pfjEWGI/s640/shop_image_front.png" width="640" /></a></div>
<blockquote class="tr_bq">
<span style="color: #666666; font-family: Verdana, sans-serif; font-size: x-small;">The <b>AutoTheory Harmonic Engine</b> enables anyone, regardless of musical theory or keyboard training, to easily create professional-sounding melodies and harmonies.<br /> AutoTheory makes it easy to play in harmony. Simply choose a key and a scale and AutoTheory will map all relevant chords and notes to the keys of your keyboard. Connect it to one or more Reason instruments and it will transform the way you play.</span> </blockquote>
<blockquote class="tr_bq">
<span style="color: #666666; font-family: Verdana, sans-serif; font-size: x-small;"> Play full chords with just one finger. Experiment by modifying chords with the chord sliders and modifier keys. Adjust individual chord note voicings and transpose or remove any note to create a customised chord. Create your own scales or select one from the many provided. Use what sounds good to you.</span> </blockquote>
<blockquote class="tr_bq">
<span style="color: #666666; font-family: Verdana, sans-serif; font-size: x-small;"> AutoTheory automatically remaps notes to match your chords. Now you can easily improvise melodies that sound good. Maintain your hand in the same position while composing melodies over different keys, scales and chord configurations. Optionally lock specific chord tones to fixed white keys. Four mapping modes accommodate different levels of user experience.</span> </blockquote>
<blockquote class="tr_bq">
<span style="color: #666666; font-family: Verdana, sans-serif; font-size: x-small;"> All controls in AutoTheory can be automated for easy transitions anywhere in a song. This means you can change the key or scale in the middle of a song without moving your hands.</span> </blockquote>
<blockquote class="tr_bq">
<span style="color: #666666; font-family: Verdana, sans-serif; font-size: x-small;"> AutoTheory also provides a Strum effect that can be used to add drama to any chord. Subtle and extreme timing changes are easily applied and fully CV-controllable.</span> </blockquote>
<blockquote class="tr_bq">
<span style="color: #666666; font-family: Verdana, sans-serif; font-size: x-small;">AutoTheory can control multiple instruments at once. One option sends the root note of chords to a dedicated bass instrument. Four chord and four melody channels provide independent control of velocity and octave for each connected instrument. This allows you to create a rich soundscape - all from a single sequencer lane or just your own hands.</span> </blockquote>
<blockquote class="tr_bq">
<span style="color: #666666; font-family: Verdana, sans-serif; font-size: x-small;"> CV inputs are provided, which are useful for driving AutoTheory with Arpeggiators and Pattern sequencers.</span> </blockquote>
<blockquote class="tr_bq">
<span style="color: #666666; font-family: Verdana, sans-serif; font-size: x-small;"> Check out the included Demo Songs that demonstrate how to use AutoTheory. A set of useful Combinators is also provided.</span></blockquote>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-Qpm-giVqtOM/UbjoRZxBDiI/AAAAAAAADOM/MWbSJbpxLGY/s1600/shop_image_back.png" imageanchor="1" style="margin-left: auto; margin-right: auto; text-align: center;"><img border="0" height="348" src="http://4.bp.blogspot.com/-Qpm-giVqtOM/UbjoRZxBDiI/AAAAAAAADOM/MWbSJbpxLGY/s640/shop_image_back.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Back Panel view</td></tr>
</tbody></table>
<br />
Available for Reason 6.5, 7 and beyond. You can try it for free for 30 days by visiting the <a href="http://shop.propellerheads.se/product/autotheory/" target="_blank">Shop</a> page. Also check out the comprehensive <a href="http://www.pitchblende.co.nz/AutoTheory/UserGuide.pdf" target="_blank">User Guide</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-Kyq1egzfGxE/US2Av5ee1SI/AAAAAAAADIA/5dy_FecgKM4/s1600/full_logo_on_white_panel_512.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="175" src="http://3.bp.blogspot.com/-Kyq1egzfGxE/US2Av5ee1SI/AAAAAAAADIA/5dy_FecgKM4/s200/full_logo_on_white_panel_512.png" width="200" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Pitchblende: <a href="http://facebook.com/PitchblendeLtd" target="_blank">like</a> us on Facebook, <a href="http://twitter.com/PitchblendeLtd" target="_blank">follow</a> us on Twitter, and find out more about us <a href="http://pitchblende.co.nz/" target="_blank">here</a>.<br />
<br />
<a href="http://3.bp.blogspot.com/-Kyq1egzfGxE/US2Av5ee1SI/AAAAAAAADIA/5dy_FecgKM4/s1600/full_logo_on_white_panel_512.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;"><br /></a><a href="http://3.bp.blogspot.com/-Kyq1egzfGxE/US2Av5ee1SI/AAAAAAAADIA/5dy_FecgKM4/s1600/full_logo_on_white_panel_512.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;"><br /></a>meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com1tag:blogger.com,1999:blog-8070825255100764146.post-54430789895845167182013-04-05T10:05:00.001+13:002013-04-05T10:05:31.124+13:00kal zoneHere's a <a href="http://www.kallenemvalts.com/audio" target="_blank">link</a> to a great Reason blog by Kalle Nemvalts. Here you'll find several tutorials based on Reason 6.5, including a great tutorial about using Thor as a CV controller. There's some great material there, and he's taken the time to add lots of informative screenshots. Do take a look - you might learn something new.<br />
<br />
<br />
<br />meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com0tag:blogger.com,1999:blog-8070825255100764146.post-60847864683321260122013-02-28T13:13:00.002+13:002013-02-28T13:14:23.329+13:00Update to Akai MPK mini Remote Codec<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-EGLJtTWnoDo/US6g_pWCunI/AAAAAAAADIo/s7WAwmX8NM8/s1600/mpkmini_angle_med.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="125" src="http://3.bp.blogspot.com/-EGLJtTWnoDo/US6g_pWCunI/AAAAAAAADIo/s7WAwmX8NM8/s200/mpkmini_angle_med.png" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: xx-small;">(image sourced from http://www.akaipro.com/mpkmini)</span></td></tr>
</tbody></table>
<a href="http://offwhitenoise.blogspot.com/2011/09/akai-mpk-mini-reason.html?showComment=1361916503698#c1109535958414281026" target="_blank">SCF</a> kindly informed me that the Sustain button stops working after loading my Akai MPK mini Remote codec. I have confirmed this bug and fixed it in the latest version - 0.0.3.<br />
<br />
If you've arrived here looking for the codec, head over <a href="http://offwhitenoise.blogspot.co.nz/2011/09/akai-mpk-mini-reason.html" target="_blank">here</a> and read all about it.<br />
<br />
If you're already using a previous version of the codec, you don't have to upgrade unless you want the Sustain button to be usable. If you do upgrade, please read the updated post carefully, as you will also need to re-upload the controller's Preset.<br />
<br />meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com0tag:blogger.com,1999:blog-8070825255100764146.post-51046760280437609632013-02-27T16:40:00.003+13:002013-06-13T09:43:08.195+12:00Selig Leveler, by Selig Audio & Pitchblende<div class="separator" style="clear: both; text-align: center;">
</div>
Note: as of May 2013, The Curve is now known as the <b>Selig Leveler</b>. Videos remain as "The Curve".<br />
<br />
In late 2011, Propellerhead Software announced that they would permit third-party <i>plugins</i> to be developed for the Reason environment. They dubbed these plugins <b>Rack Extensions</b>, or "REs".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-Kyq1egzfGxE/US2Av5ee1SI/AAAAAAAADIA/5dy_FecgKM4/s1600/full_logo_on_white_panel_512.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="175" src="http://3.bp.blogspot.com/-Kyq1egzfGxE/US2Av5ee1SI/AAAAAAAADIA/5dy_FecgKM4/s200/full_logo_on_white_panel_512.png" width="200" /></a></div>
<br />
The first set of new REs hit the online <a href="http://www.propellerheads.se/shop/" target="_blank">Propellerhead Shop</a> in mid-2012, from the likes of Korg, Peff, Softube, u-he, iZotope and Propellerhead themselves. With the exception of a few, most were initially ports of popular VST plugins to the RE format. These helped get the ball rolling, however before long developers had created new and unique devices that really add a lot of value to the Reason platform. To date there are over fifty REs available, and the number is growing every week.<br />
<br />
<br />
And as of approximately a week ago, there's now also one developed by my company <b>Pitchblende</b> and Giles Reaves of <a href="http://seligaudio.com/" target="_blank">Selig Audio</a>. It's called the<i><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"> Selig Leveler</span></i> and you can see it for yourself <a href="http://shop.propellerheads.se/product/selig-leveler/" target="_blank">here</a><i>.</i><br />
<i><br /></i>
<i><br /></i>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://shop.propellerheads.se/media/product/com.seligaudio.TheCurve/pictures/p17i6gu0m21efm1cge1em1svc50b3.png?1361934365210" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="117" src="http://shop.propellerheads.se/media/product/com.seligaudio.TheCurve/pictures/p17i6gu0m21efm1cge1em1svc50b3.png?1361934365210" width="640" /></a></div>
<i><br /></i>
It is a brand new device that implements a novel technique for solving many dynamics problems. Giles neatly describes the function of the <span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><i>Selig Leveler</i></span> here:<br />
<blockquote class="tr_bq">
<span style="background-color: white; color: #818b8b; font-family: 'Akzidenz-Grotesk Next', Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 13px; line-height: 15px;">The Selig Leveler utilizes a unique approach to dynamics control, by applying upwards compression across a user specified range of the dynamic spectrum. This allows the Selig Leveler to target your compression like no other device, meaning the Selig Leveler can compress everything within a user specified range while leaving the loudest and softest signals almost completely alone. </span></blockquote>
<br />
There's an introductory video that gives a good overview of what the <span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><i>Selig Leveler</i></span> can do:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/DXkzJGhkjMg?feature=player_embedded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The device was designed primarily for assisting with the task of leveling vocal performances, a task that can be quite time-consuming using traditional compressors:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/NAXH9plNNeo?feature=player_embedded' frameborder='0'></iframe></div>
<br />
<br />
<br />
We put a lot of work into the <span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><i>Selig Leveler</i></span>. Our focus is always on quality and bug-free operation, and I think we met that goal. Now that it has been released I'm happy to say that the reception has been very favourable. Several Propellerhead User Forum posts sprung up, with some neat demonstrations of how the<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><i> Selig Leveler</i></span> can be used on various source material, including this great video by <b>DJStarski</b><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;"> </span>on drums:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/awvv0rujo68?feature=player_embedded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="" style="clear: both; text-align: left;">
<br />
If you are interested in dynamics processing, vocal leveling, or even fattening up your percussion tracks, I recommend taking a look at the<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><i> Selig Leveler</i></span> for yourself. Remember that you can take advantage of a 30-day free trial through the <a href="http://shop.propellerheads.se/product/the-curve/" target="_blank">Propellerhead Shop</a>.<br />
<br /></div>
<div class="" style="clear: both; text-align: left;">
You can follow my company Pitchblende's announcements on Twitter via <a href="http://twitter.com/PitchblendeLtd" target="_blank">@PitchblendeLtd</a> or check out our <a href="https://www.facebook.com/PitchblendeLtd" target="_blank">Facebook</a> page. Look out for new Rack Extensions in the near future...</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
<br />
<br />meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com0tag:blogger.com,1999:blog-8070825255100764146.post-31278581146641710402013-02-21T16:50:00.001+13:002013-02-21T16:50:03.985+13:00Improved Rotaries for the Akai MPK49 & MPK61User <a href="https://www.propellerheads.se/forum/member.php?u=749040" target="_blank">bobseekone</a> from the Propellerhead Forums has generously contributed a great new patch (which he calls <i>ReasonEx</i>) for the Akai MPK49 and MPK61 MIDI controller keyboards that turns the rotary encoders from absolute to relative positions. This means that you can switch to another device in Reason, move the knobs, and when you return to the original device moving the knobs does not cause them to 'jump' away from where they were. Another way to think of it is that Reason can remember where your controller knobs were for each and every device. Very useful - thanks Bob.<br />
<br />
His patch also changes the buttons from toggle to momentary so that they can be used between devices more sensibly too. See Bob's blog for <a href="http://audio.seekone.com/content/improving-akai-mpk-keyboards-reason" target="_blank">overview</a> and <a href="http://audio.seekone.com/content/improved-akai-mpk-reason-codec" target="_blank">details</a>.<br />
<br />
<div>
<span style="font-size: x-small;">Disclaimer: I was involved in the creation and testing of this patch for the MPK49.</span><br />
<br /></div>
meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com1tag:blogger.com,1999:blog-8070825255100764146.post-10729040964385936552011-10-15T13:37:00.001+13:002011-10-15T15:02:50.216+13:00Reason 6 Thor Voice Bug - Workaround<b>Update: version 0.0.2 fixes the fast-click problem reported by NaviRetlav.</b><br />
<br />
I have developed a workaround to the bug described <a href="http://offwhitenoise.blogspot.com/2011/10/reason-6-thor-voice-bug.html">here</a> that may be suitable for some situations.<br />
<br />
It takes the form of a Combinator containing two Thor instances. When the bug is triggered the output from the first Thor is interrupted and this triggers the second Thor to generate a short pulse. This pulse is then used to gate the triggering of the first Thor's Step Sequencer, which has the effect of correctly resetting the Voice and reopening it.<br />
<br />
This Combinator can be used to provide a reset pulse to any Thor in your workspace that relies on an open Voice, such as one that is using the Shaper to affect an external sound source (routed into the Thor). This pulse is generated whenever the bug occurs, thereby providing a way to recover from it.<br />
<br />
A test-bench for this workaround can be found <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/bugs/Dual%20Thor%20Voice%20Reset%200.0.2.reason">here</a> (0.0.2). Simply open the file and you'll see the CV Debug combi on the left, and the Reset combi on the right. The top-right Delay device in the CV Debug (labeled "Reset Out") combi shows the state of the pulse. Hit Stop a few times to see the value jump from 1127 to down to 1000 briefly. You can adjust the length of the pulse with the first knob on the combi.<br />
<br />
To use this pulse to reset another Thor, simply take this "Reset Out" signal into a CV Input on your Thor and use it as the Scale control (@ 100%) for your "LFO2 -> S.Trig" rule that you are using to retrigger the Step Sequencer. Look at the first Thor in the CV Reset combi for an example of this.<br />
<br />
If you find this workaround useful or broken I'd appreciate some feedback please.<br />
<br />
<br />
<br />
<br />meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com8tag:blogger.com,1999:blog-8070825255100764146.post-38534279594760025962011-10-15T11:36:00.001+13:002011-10-15T13:39:39.543+13:00Reason 6 Thor Voice Bug<b>Update: I have developed a workaround, details are <a href="http://offwhitenoise.blogspot.com/2011/10/reason-6-thor-voice-bug-workaround.html">here</a>.</b><br />
<br />
This article is intended to explain the Thor Voice bug that has been observed by several Reason users in versions 4 through to 6. I first mentioned it <a href="http://offwhitenoise.blogspot.com/2010/06/close-look-at-thors-shaper.html#bug">here</a> when discussing the Thor Shaper in Reason 4.<br />
<br />
The bug concerns the way Thor handles creation of voices when it receives a trigger from the Step Sequencer. Normally, the Step Sequencer can generate triggers which open new Voice channels, allowing these channels to be used for effects (such as the LP Ladder filter, and the Shaper). By setting the Step Sequencer to trigger automatically via a trigger generated from the same<i> </i>Thor instance, it is possible to create a continuous Voice that stays open and provides an effects channel.<br />
<br />
The bug is that hitting the <b>Stop</b> transport control, or selecting <b>Export Loop/Song As Audio</b> closes this Voice and the Step Sequencer fails to retrigger the Voice, and the channel is closed.<br />
<br />
Earlier versions had a workaround, thanks to <a href="https://www.propellerheads.se/forum/member.php?u=43776">selig</a>, that would help to solve the Stop issue, but not the Export Audio issue. Unfortunately with Reason 6 this workaround does not appear to work.<br />
<br />
I present <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/bugs/R6%20Thor%20Voice%20Bug%20Example%200.0.1.reason">here</a> a Reason 6 song file that clearly demonstrates the Stop issue. It consists of a Thor, a Subtractor synth that generates a continuous sequence of tones, and a second Thor that triggers the Subtractor. I did not use the Sequencer track to generate notes because I specifically want to show the behaviour when the sequencer is <i>not </i>running. Or to put it another way, the bug is a problem when you are working with the sequencer stopped, which is not uncommon when constructing patches.<br />
<br />
When you open the example file, after an initial weird noise, you will hear the pulsing tone from the Subtractor, which is going into the Thor [Audio In 1], through [Filter 1], out [Audio Out 1] and into the Mixer. The Thor has a simple Step Sequencer (of one step) configured to generate a trigger and create the Thor Voice so that Filter 1 actually 'exists'. The Step Sequencer is triggered periodically by LFO2, and you will see that the <b>Run </b>button is automatically enabled & highlighted.<br />
<br />
Now press Stop on the Transport panel - the sound will stop. Note that the Run button is still highlighted - this is because the LFO2 is frequently triggering it. But the Voice is not created and no sound will be heard. <i>This is the bug.</i><b> </b> What should happen is that the retriggering of the Step Sequencer by
LFO2 just after Stop is clicked should re-open the Voice and we'd hear the sound, but it does not and remains silent.<br />
<br />
Manual intervention is required to restore the Voice - now click the Run button once, it will briefly go off and then be retriggered by the LFO2, and the sound will return.<br />
<br />
Pressing Play will also 'fix' the problem, but again this is primarily an issue when working with the Sequencer stopped.<br />
<br />
A similar issue, but not demonstrated by this example (I'll need to create a slightly different version) occurs after Exporting As Audio.<br />
<br />
As anyone who follows this blog will know, I work a lot with CV within Reason. I like to create all sorts of interesting CV devices, and Reason provides almost an unlimited capacity to experiment with these things. In this regard it is almost bug-free, but this one particular bug is a real problem for my designs and I've yet to find a suitable workaround in Reason 6.<br />
<br />
<b>It also significantly reduces the usefulness of the Thor Shaper as a viable audio effect.</b><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-0G38cF1xwFk/Tpi4XRgtlVI/AAAAAAAACg4/WbAmYhByGRE/s1600/screen-capture.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="635" src="http://4.bp.blogspot.com/-0G38cF1xwFk/Tpi4XRgtlVI/AAAAAAAACg4/WbAmYhByGRE/s640/screen-capture.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Thor patch to demonstrate Voice bug.</td></tr>
</tbody></table>
<br />
<br />
<br />
<br />meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com3tag:blogger.com,1999:blog-8070825255100764146.post-66733447445700649462011-09-26T21:09:00.003+13:002015-02-28T12:31:53.116+13:00Akai MPK mini & Reason<h3>
Introduction</h3>
<span style="background-color: orange;"><b>Note: there appears to be a newer version of the Akai MPK Mini Editor that is not compatible with the files I provide, or the process outlined below. If you don't have the older version, these instructions may not work for you. If anyone is able to shed some light on the situation I'd be happy to make mention.</b></span><br />
<br />
In 2011 I picked up the <a href="http://www.akaipro.com/mpkmini">Akai MPK mini</a>, a "laptop production keyboard" clearly focused on portability.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-ZrC5GmWMfsA/UmmVR98mk0I/AAAAAAAADjU/DAVIjyM9o-c/s1600/mpkmini_angle_lg_700x438.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://1.bp.blogspot.com/-ZrC5GmWMfsA/UmmVR98mk0I/AAAAAAAADjU/DAVIjyM9o-c/s320/mpkmini_angle_lg_700x438.png" height="200" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">(image sourced from http://www.akaipro.com/mpkmini)</td></tr>
</tbody></table>
<br />
I haven't used it enough to write a proper review yet, but there was one thing that did annoy me about it right out-of-the-box - it doesn't have any dedicated MIDI support in Reason or Record!<br />
<br />
I should explain. MIDI controllers communicate with Reason & Record via a "codec" and a "remote map". The codec translates and associates incoming MIDI messages to specific 'control items', and the remote map is used to map these 'control items' to different Reason device controls. <br />
<br />
But what makes your controller really useful is that a properly supported controller will auto-map its controls onto specific Reason device controls <i>as you change devices</i>.<br />
<br />
For example, you can have a knob that maps to the first Combinator knob when a Combinator has MIDI focus, but then maps to the LPF frequency slider when you change to a Subtractor. The mapping is device-dependent and Reason takes care of it for you. You can also customise this mapping yourself.<br />
<br />
Almost any MIDI controller will work with Reason as there are several
'generic' codecs that simply map keys, wheels, knobs, pads and sliders
to generic 'controls'. But sadly if you are forced to use these codecs then you lose the auto-mapping feature - now your control simply generates a MIDI CC message on a fixed channel and this may correspond to... anything.<br />
<br />
(Note that you can always use the 'remote map override' feature to assign any control to any Reason control - this can be useful occasionally but it's tedious to set up and does not scale to a full controller).<br />
<br />
<h3>
My Solution</h3>
<br />
I have created suitable Lua Codec and Map files for the Akai MPK mini. If you use these, you will be able to make almost full use of the device, and the knobs and pads will map to sensible controls on each Reason device. If you wish to customise the per-device mapping, simply edit the .remotemap file and add your own rules.<br />
<br />
The latest version supports:<br />
<ul>
<li>Compatible with Reason 5 / Record 1.5 to Reason 6.5.3 - may work with future versions too.</li>
<li> Kong pads - turn <b>off</b> CC and PROG CHANGE, then Pad Bank 1 maps to Kong pads 1-8, Pad Bank 2 maps to pads 9-16.</li>
<li>Switches - turn <b>on</b> CC and each pad will act as a switch. Pad Bank 1 maps to switches 1-8, Pad Bank 2 maps to switches 9-16. Note that 'toggle' mode for the switches does not work correctly, and probably never will, so the pad lights will <i>not </i>stay lit.</li>
<li>Prog Change - turn <b>on</b> PROG CHANGE and each pad will generate push-button events. Currently these are set up to send Transport messages:</li>
<ul>
<li>1 - rewind</li>
<li>2 - ffwd</li>
<li>3 - stop</li>
<li>4 - play</li>
<li>5 - record</li>
<li>7 - change to previous sequencer track</li>
<li>8 - change to next sequencer track</li>
</ul>
<li>Knobs - eight knobs that are mapped to 'sensible' Reason controls. Note that Knob 1 is the<b> top left </b>knob.</li>
<li>Keyboard Sustain (Damper Pedal) support - hold the "Sustain" button to activate.</li>
</ul>
I used the Akai LPD8 lua codec and MPK49 remotemap files that ships with Reason as the basis for this project. I used an image of the MPK mini from Akai's website for the device picture. Akai's support page is <a href="http://www.akaipro.com/mpkmini">here</a>.<br />
<br />
<h3>
<b>Upgrading to 0.0.3 - important note!</b></h3>
<i style="background-color: orange;"><br /></i>
<i style="background-color: orange;">If you are upgrading to 0.0.3 from an earlier version, you must reprogram your controller using the "Akai MPK MINI Editor" as the CC values generated by the pads have changed.</i><br />
<br />
To upgrade, simply follow the Installation procedure again. You do not need to remove the old files, just make sure you overwrite them with the new files from the zip file.<br />
<br />
If you have performed any of your own customisation (for example the .remotemap file), be sure to back up your changes before upgrading. You will have to manually reapply your changes afterwards.<br />
<br />
<h3>
<b>Installation</b></h3>
<br />
The latest version 0.0.3 is available <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/AkaiMPKmini/AkaiMPKmini_Remote-0.0.3.zip">here</a>. It is a zip file. Unzip it somewhere handy.<br />
<br />
There are two parts to this installation process. Part 1 involves copying the Remote files to the correct destination on your system. Part 2 involves reprogramming your MPK mini with the provided Preset. You must complete both parts to have a successful installation.<br />
<br />
<h4>
Part 1 - Copy the Remote Files</h4>
<br />
The files in the <b>Remote</b> directory should be copied into your user's Remote directory:<br />
<ul>
<li>OSX: <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Macintosh HD<user name="">/Library/Application Support/Propellerhead
Software/Remote</user></span></li>
<ul>
<li style="text-align: left;"><user name="">it is also possible to install into <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">/Users/[username]/</span></user><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Library/Application Support/Propellerhead Software/Remote</span> if you want to keep them separate from your main Reason installation.</li>
</ul>
<li> Windows XP: <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">C:/Documents and Settings/<user name="">Application Data/Propellerhead Software/Remote/</user></span></li>
<li><user name="">Windows Vista: </user><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">C:/Documents and Settings/Program Data/Propellerhead Software/Remote/</span></li>
<li>Windows 7: <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">C:/ProgramData/Propellerhead Software/Remote </span></li>
</ul>
Carefully copy all of these files, strictly maintaining this directory structure:<br />
<ul>
<li>Remote/Codecs/Lua Codecs/Akai/AkaiMPKmini.luacodec</li>
<li>Remote/Codecs/Lua Codecs/Akai/AkaiMPKmini.lua</li>
<li>Remote/Codecs/Lua Codecs/Akai/AkaiMPKmini.png</li>
<li>Remote/Maps/Akai/AkaiMPKmini.remotemap</li>
</ul>
Now restart Reason so that it sees the new files. Go into Preferences and select your new MIDI controller - you can tell Reason to try and auto-detect the MPK mini, or you can add it manually.<br />
<i><br /></i>
<i>But before this will work, y</i><i>ou must set up the MPK mini to generate the correct MIDI messages. Now complete Part 2.</i><br />
<i><br /></i>
<br />
<h4>
Part 2 - Load the MPK mini Preset</h4>
<br />
The provided Preset ensures that your keyboard produces the correct MIDI messages are received by the Remote codec (which you installed in Part 1). To install the Preset:<br />
<ul>
<li>Ensure neither Reason nor Record are running - they may interfere with this process.</li>
<li>Run the "Akai MPK MINI Editor" (on the CD provided with your controller, or downloadable from Akai's product support page)</li>
<li>Click "Load Preset" and load the "Reason.preset" file from the <b>Presets</b> directory that you earlier unzipped.</li>
<li>This will automatically switch the display to Preset Slot 1, but you can upload the new preset to any Slot you wish by clicking the "Preset #" drop-down and select the slot number you want to upload into:</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-XV8WkRyeMcU/US6ZbhYvc9I/AAAAAAAADIQ/e9BMGaI4xZs/s1600/Screen+Shot+2013-02-28+at+12.38.28+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-XV8WkRyeMcU/US6ZbhYvc9I/AAAAAAAADIQ/e9BMGaI4xZs/s1600/Screen+Shot+2013-02-28+at+12.38.28+PM.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<ul>
<li style="text-align: left;">finally click the "Upload" button, and then click OK:</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-WzBll2_XfIU/US6ZesRT4AI/AAAAAAAADIY/1lyBE5dD0ZM/s1600/Screen+Shot+2013-02-28+at+12.31.00+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-WzBll2_XfIU/US6ZesRT4AI/AAAAAAAADIY/1lyBE5dD0ZM/s1600/Screen+Shot+2013-02-28+at+12.31.00+PM.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<ul>
<li style="text-align: left;">You can repeat this upload process for the other Preset Slots if you like, but note that uploading a Preset to a Slot will completely overwrite any data already there.</li>
</ul>
<br />
(Previous versions had four identical Preset files, one for each Slot. However I realised that you can upload one file to any Slot with the above procedure, so now there is just one Reason preset).<br />
<br />
In version 0.0.3 I have adjusted the CC values generated by the Pads to start at 65, rather than 64, as the first pad was interfering with the Sustain function.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-t4ieztBQkLE/US6ZfmaH1mI/AAAAAAAADIg/RSBvJY214XU/s1600/Screen+Shot+2013-02-28+at+12.30.24+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-t4ieztBQkLE/US6ZfmaH1mI/AAAAAAAADIg/RSBvJY214XU/s640/Screen+Shot+2013-02-28+at+12.30.24+PM.png" height="414" width="640" /></a></div>
<br />
<h3>
<b>Customisation</b></h3>
<br />
Because the Lua Codec maps
almost every control on the controller to a 'control item', you can customise
the device mappings however you want. Simply edit the
AkaiMPKmini.remotemap file to associate the MPK mini's controls with whatever Reason device controls you want. More information can be found <a href="http://www.propellerheads.se/substance/discovering-reason/index.cfm?fuseaction=get_article&article=part33">here</a>.<br />
<br />
The available <i>control items</i> are:<br />
<ul>
<li>Keyboard</li>
<li>Sustain</li>
<li>Knob 1-8</li>
<li>Pad Button 1-16</li>
<li>Prog Change 1-16</li>
</ul>
<br />
<h3>
Updates</h3>
Update 28th February 2013 - version 0.0.3 released, see post for details. If you are upgrading, please read this post carefully.<br />
<br />
Update 2nd October 2011 - version 0.0.2 appears to work fine in Reason 6 (OSX).<br />
<br />
Update 30th September 2011 - version 0.0.2 released, see below for details.<br />
<div>
<u><span style="font-size: x-small;"><br /></span></u></div>
<h3>
<b>Release History</b></h3>
Version <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/AkaiMPKmini/AkaiMPKmini_Remote-0.0.3.zip">0.0.3</a> - 20130228<br />
<ul>
<li>Added support for Sustain / Damper Pedal.</li>
<li>Adjusted base CC for pads from 64 to 65.</li>
</ul>
<br />
Version <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/AkaiMPKmini/AkaiMPKmini_Remote-0.0.2.zip">0.0.2</a> - 20110930<br />
<ul>
<li>Added support for Transport controls in Record 1.5.</li>
</ul>
<br />
Version <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/AkaiMPKmini/AkaiMPKmini_Remote-0.0.1.zip">0.0.1</a> - 20110926<br />
<ul>
<li>Initial release, supports AutoDetect, Kong pads, CC pads (switches), Prog pads (transport), and knobs. All four presets are identical.</li>
<li>Tested in Reason 5 on OSX only.</li>
</ul>
<br />
<h3>
<b>Disclaimer</b></h3>
<b> </b><br />
<b>I am not affiliated or associated in any way with Akai or Propellerhead. I have created these files myself with the files and programs legally available to me. </b><br />
<br />
<b>You download and use these files entirely at your own risk!</b><br />
<b><br /></b>
<b><br /></b>
<a href="http://creativecommons.org/licenses/by/3.0/nz/" rel="license"><img alt="Creative Commons License" src="http://i.creativecommons.org/l/by/3.0/nz/88x31.png" style="border-width: 0;" /></a><br />
This work is licensed under a <a href="http://creativecommons.org/licenses/by/3.0/nz/" rel="license">Creative Commons Attribution 3.0 New Zealand License</a>.meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com72tag:blogger.com,1999:blog-8070825255100764146.post-70750984456255447412010-06-27T14:39:00.019+12:002010-06-28T15:25:53.714+12:00A Close Look at Thor's Shaper<div><div style="text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_gBThNkc2AZA/TCa3sE_JYVI/AAAAAAAABiI/0cGE4-WrOqs/s1600/envelope-summary.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="132" src="http://2.bp.blogspot.com/_gBThNkc2AZA/TCa3sE_JYVI/AAAAAAAABiI/0cGE4-WrOqs/s640/envelope-summary.png" width="640" /></a></div><br />
<span style="font-size: x-small;">Quick Links</span></div><div><div style="text-align: center;"><a href="http://offwhitenoise.blogspot.com/2010/06/close-look-at-thors-shaper.html#soft_clip">soft clip</a> | <a href="http://offwhitenoise.blogspot.com/2010/06/close-look-at-thors-shaper.html#hard_clip">hard clip</a> | <a href="http://offwhitenoise.blogspot.com/2010/06/close-look-at-thors-shaper.html#saturate">saturate</a> | <a href="http://offwhitenoise.blogspot.com/2010/06/close-look-at-thors-shaper.html#sine">sine</a> | <a href="http://offwhitenoise.blogspot.com/2010/06/close-look-at-thors-shaper.html#bipulse">bipulse</a> | <a href="http://offwhitenoise.blogspot.com/2010/06/close-look-at-thors-shaper.html#unipulse">unipulse</a> | <a href="http://offwhitenoise.blogspot.com/2010/06/close-look-at-thors-shaper.html#peak">peak</a> | <a href="http://offwhitenoise.blogspot.com/2010/06/close-look-at-thors-shaper.html#rectify">rectify</a> | <a href="http://offwhitenoise.blogspot.com/2010/06/close-look-at-thors-shaper.html#wrap">wrap</a></div><br />
Thor's Shaper is a modest device - it sits nonchalantly between Filter 1 and the Amplifier module and to me it was shrouded in a certain mystery. The Reason Operation Manual doesn't give much away, mentioning it briefly on page 215:<br />
<br />
<table><tbody>
<tr><td style="vertical-align: top;"><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_gBThNkc2AZA/TCXgD5V8XQI/AAAAAAAABho/XFb6YcQRvaQ/s1600/shaper.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/_gBThNkc2AZA/TCXgD5V8XQI/AAAAAAAABho/XFb6YcQRvaQ/s1600/shaper.png" /></a></div></td> <td><blockquote style="font-style: italic;">"Waveshaping is a synthesis method for transforming sounds by altering the waveform shape, thereby introducing various types of distortion. The Shaper can radically transform the sound or just add a little warmth, depending on the mode and other settings.</blockquote></td> </tr>
</tbody></table><br />
There's a brief mention of how to use it, and the names of the nine modes it supports, but that's about it.<br />
<br />
I thought it might be useful to take a closer look at the Shaper and see if I can determine what it actually does.<br />
<br />
First, a few things you need to know about the Shaper.<br />
<ul><li>the Shaper has to be enabled to do anything interesting, obviously.</li>
<li>only Filter 1 output can go into the Shaper - the manual says:</li>
</ul><blockquote style="font-style: italic;">"You can also route other sources directly to the Shaper in the Modulation section."</blockquote><ul>but this is not correct. The Thor modulator destinations only include "Shaper Drive", and not the Shaper audio input. If you want to direct anything into the Shaper, you need to direct it into the Filter 1 audio input, and then typically select Filter 1 Bypass to disable any filter that is there.
<li>the Shaper will not do anything until you trigger a "voice" in the synth. This means hitting a note on your keyboard when Thor has controller focus, using the sequencer to play notes through Thor, or using the Step Sequencer to allocate a continuous voice by latching the Step Sequencer trigger and setting the gate length to 100%.</li>
<li>the "Drive" control can be used to change the effect that the Shaper has on the sound. It can be set to a specific value or modulated by the Mod Matrix. A signal can also be routed directly into "Shaper Drive".</li>
<li>typically you'll use it to shape audio, but you can also use it to <a href="http://offwhitenoise.blogspot.com/2010/06/close-look-at-thors-shaper.html#cvproc">shape CV signals</a> as well.</li>
<li>Thor has a <a href="http://offwhitenoise.blogspot.com/2010/06/close-look-at-thors-shaper.html#bug">bug</a>.<br />
</li>
</ul>So what does the Shaper actually do? Simply, it shapes or distorts the incoming signal according to the mode selected and the Drive setting. In most cases, the distortion is<span style="font-style: italic;"> non-linear</span>.<br />
<br />
It is important to understand what non-linear distortion means. To do that, let's talk about <span style="font-style: italic;">linear systems</span> first.<br />
<br />
<b><span style="font-size: small;">Linear & Non-linear Systems</span></b><br />
<br />
A <a href="http://en.wikipedia.org/wiki/Linear_system">linear system</a> is essentially (yes, I'm going to keep it simple) one in which the output scales proportionally with regards to the input. This means that if you have one input signal and you double its amplitude, you will see the output signal double too. If you have two input signals and you add them together before putting them into the system, then the output you see will be the same as if you put each signal into the system independently and then added the outputs. This is called the <a href="http://en.wikipedia.org/wiki/Superposition_principle">principle of superposition</a>.<br />
<br />
Linear <span style="font-style: italic;">distortion</span>, where a signal is altered by a linear system, is pretty common. Essentially, you multiply the signal by a number so it's either larger (amplified) or smaller (attenuated). Static filters such as low-pass filters with an unchanging cut-off are examples of such distortion. Certain frequencies are cut out or boosted by amplifying or attenuating those frequencies. I'm deliberately ignoring phase effects mmmkay? :)<br />
<br />
This leads to an important aspect of linear systems - you can only get out an amplitude- (<span style="font-size: xx-small;">and phase-</span>) modified version of the frequencies you put in. If you put in a sine-wave at 100 Hz, you can only get a sine-wave at 100 Hz out, although it might be louder or quieter than the input.<br />
<br />
A <a href="http://en.wikipedia.org/wiki/Nonlinear_system">non-linear system</a> on the other hand is an entirely different beast. The easiest way to define such systems is to simply consider them as systems that are not linear! In all cases, the output is disproportional to the input or inputs. This means you might put in 100 Hz and get out 372 Hz, or put in 100 Hz at one amplitude level and get an output that modulates amplitude over time.<br />
<br />
Most systems in real life are non-linear but engineers prefer to think in terms of linear systems because they are a gazillion times easier to analyse. In many situations a complicated non-linear system can be broken down into a number of simpler, linear systems and analysed to a certain level of accuracy.<br />
<br />
Thor's shaper is a non-linear system, but it's a relatively simple one. It contains no dynamic internal state so there's no time-based distortion effects. The shaping is simply done by a non-linear function selected by the Shaper Mode. Unfortunately it's not easy at all to reduce this to a simpler set of linear systems, but we can still learn a lot by looking at its behaviour.<br />
<br />
<b>Linear & Non-linear Functions</b><br />
<br />
Consider the <a href="http://www.wolframalpha.com/input/?i=Plot[x%2C+%7Bx%2C+-1.0%2C+1.0%7D]">function</a> f(x) = x/2, or y = x/2, which looks something like this:<br />
<br />
<div style="text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TBTDJrXXM4I/AAAAAAAABa4/v05-uUevFbE/s1600/wolframalpha-20100613063732829.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482221217443689346" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TBTDJrXXM4I/AAAAAAAABa4/v05-uUevFbE/s400/wolframalpha-20100613063732829.gif" style="cursor: pointer; height: 167px; width: 400px;" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">(thanks <a href="http://www.wolframalpha.com/input/?i=Plot[x%2F2%2C+%7Bx%2C+-1.0%2C+1.0%7D]">Wolfram Alpha</a>)</span></div><br />
Consider an input signal of some value "x" - look along the horizontal x-axis for the value x, move straight up until you hit the diagonal line, then move directly across to read the corresponding output on the vertical y-axis. It's fairly straightforward to see that this function divides all incoming signal values by 2 - it always halves the amplitude of the input signal, regardless of what the actual input is. This is linear distortion.<br />
<br />
What about <a href="http://www.wolframalpha.com/input/?i=Plot[x%5E2%2C+%7Bx%2C+-1.0%2C+1.0%7D]">this</a> function, y = x<sup>2</sup>?<br />
<br />
<div style="text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TBTEXa40OmI/AAAAAAAABbA/ZaKTrMrZRdc/s1600/wolframalpha-20100613064305471.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482222553050397282" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TBTEXa40OmI/AAAAAAAABbA/ZaKTrMrZRdc/s400/wolframalpha-20100613064305471.gif" style="cursor: pointer; height: 180px; width: 400px;" /></a></div><br />
This is a parabolic function - the output is not proportional to the input signal, but to the input signal <span style="font-weight: bold;">squared</span>. Look at x = 0.5, the output is 0.25. The signal is attenuated by a factor of 2. When x = 1.0, the output is unchanged at 1.0. So the amount of this attenuation depends on the input value. Therefore the output is disproportional to the input signal - this is non-linear distortion.<br />
<br />
If the function goes through the origin (where the axes meet), then that means that an input value of zero produces an output of zero. This has implications for zero-frequency (DC) offset that I might talk about later.<br />
<br />
Thor's Shaper implements nine different functions in this manner, but also provides a "Drive" parameter. This parameter simply affects the shape of each function in a particular way - for one mode it might change only part of the function slightly, in another mode it might result in a completely different function altogether. Since there are 128 possible drive settings, you could consider there to be 128 different functions for each Shaper mode.<br />
<br />
With this in mind, now I'm going to introduce and explain each mode and how the Drive parameter affects it.<br />
<br />
<div id="shaper_modes"><span style="font-size: medium;"><span style="font-weight: bold;">Shaper Modes</span></span></div><br />
In the following sections, for each mode, you will see two plots. These are screen shots from <a href="http://audacity.sourceforge.net/">Audacity</a> of signals generated in Reason and distorted by Thor's Shaper. Each plot has nine waveforms - these are measurements of the Shaper at various Drive levels from 0 to 127 - 0, 16, 32, 48, 64, 80, 96, 112 and 127.<br />
<br />
Each waveform is independent of the others - it's just easier for me to present them on a single axis. Zero on the horizontal axis is in the centre of each waveform (where the diagonal line crosses the axis in this case). Zero on the vertical axis is where the horizontal axis lies.<br />
<br />
The first plot will be a representation of the Shaper function, obtained by passing a rising full-scale linear signal (sawtooth) through the Shaper and recording the output. This is essentially just reading out the values in the function look-up table (if Thor uses such a thing). In this example, the Shaper is turned off and output is directly proportional to the output - in fact it's the <b>same</b>, or y = x:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBrg8t5S5cI/AAAAAAAABeQ/PcyuSaTXhpA/s1600/drive-example.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="68" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBrg8t5S5cI/AAAAAAAABeQ/PcyuSaTXhpA/s640/drive-example.png" width="640" /></a></div><br />
If the function is linear, then the output will look exactly like one of the graphs above. In this example only, all nine waveforms are practically identical because the Drive parameter has no effect when the Shaper is disabled.<br />
<br />
The second plot is an example of what the Shaper does to a pure sine-wave input for each drive setting:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_gBThNkc2AZA/TBrglW1wDKI/AAAAAAAABeI/eKv51G0hdG4/s1600/linear-sine-example.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="48" src="http://2.bp.blogspot.com/_gBThNkc2AZA/TBrglW1wDKI/AAAAAAAABeI/eKv51G0hdG4/s640/linear-sine-example.png" width="640" /></a></div><br />
Because the Shaper is switched off in this example, the function is again y = x and the sine-wave is unmodified regardless of the Drive parameter. For other modes it's interesting to see the effect on the sine-wave but its usefulness is limited - remember that the Shaper is non-linear so you cannot apply the principle of superposition! Adding sine-waves together before the Shaper input does not give you the same result as adding the result of passing through separate sine-waves. A particular function might generate a harmonic for a single sine-wave input, but two sine-waves might do something else entirely - see <a href="http://offwhitenoise.blogspot.com/2010/06/close-look-at-thors-shaper.html#intermod">Intermodulation Distortion</a> below.<br />
<br />
In all cases, you can click on an image to view a full-resolution version.<br />
<br />
I used these RNS files to generate the signals by "exporting loop as audio":<br />
<ul><li><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/files/Thor%20Shaper%20Scope-1.0.0.rns">Thor Shaper Scope-1.0.0.rns</a> - see warning below!</li>
<li><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/files/Thor%20Shaper%20Audio-1.0.0.rns">Thor Shaper Audio-1.0.0.rns</a></li>
</ul><br />
<table align="center"><tbody>
<tr><td align="center" bgcolor="red"><div style="color: black;"><b>WARNING</b><br />
For the CV Scope, the connection from the main mixer to the hardware device is deliberately disconnected. <b>Do not reconnect</b> the audio output unless you have turned off your speaker system first! I am not responsible for any damage that might result if you try to drive CV signals through your expensive amplifier or speakers!!</div></td></tr>
</tbody></table><br />
<br />
<hr /><div id="soft_clip"><span style="font-size: medium; font-weight: bold;">Soft Clip</span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBrhOObMXkI/AAAAAAAABeY/JWc9HPqKrg4/s1600/function-soft_clip.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="60" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBrhOObMXkI/AAAAAAAABeY/JWc9HPqKrg4/s640/function-soft_clip.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">function</span></div><div style="text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBrhPkLuYHI/AAAAAAAABeg/yUN6Ql_MhQQ/s1600/sine-soft_clip.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="52" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBrhPkLuYHI/AAAAAAAABeg/yUN6Ql_MhQQ/s640/sine-soft_clip.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">sine-wave</span></div><br />
This is a simple distortion that reduces the range of the incoming signal as the drive increases by clipping the signal. Compared with the hard clip, there is a more gentle, rounded characteristic to the clipping. Note that at zero drive it is not quite linear - there's a small distortion in linearity and a small attenuation of amplitude. At high drive the distortion is very distinct, very similar to the hard clip mode, and will introduce many new frequencies.<br />
<br />
<table><tbody>
<tr> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/soft_clip_sine.ogg" tabindex="0"></audio></td> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/soft_clip_chord.ogg" tabindex="0"></audio></td> </tr>
<tr> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/soft_clip_sine.mp3">sine-wave</a></td> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/soft_clip_chord.mp3">chord</a></td> </tr>
</tbody></table><br />
<br />
<hr /><div id="hard_clip"><span style="font-size: medium;"><span style="font-weight: bold;">Hard Clip</span></span></div><br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TBrhde3OfkI/AAAAAAAABeo/r8e2R2aP_G8/s1600/function-hard_clip.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="60" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TBrhde3OfkI/AAAAAAAABeo/r8e2R2aP_G8/s640/function-hard_clip.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">function</span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TBrhfwn4zZI/AAAAAAAABew/RdqFzC32Q-M/s1600/sine-hard_clip.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="52" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TBrhfwn4zZI/AAAAAAAABew/RdqFzC32Q-M/s640/sine-hard_clip.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">sine-wave</span></div><br />
This is a very simple and <i>nasty</i> type of distortion that simply limits the input signal to a maximum and minimum level according to the drive. It is similar to the soft clip mode except that the function has no gentle rolling off before the clip takes effect. At zero drive, the function is practically linear, and at maximum drive it's pretty much a step function except for a very narrow range near zero, just like the soft clip at this drive. This distortion adds significant new frequencies at higher drives.<br />
<br />
<table><tbody>
<tr> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/hard_clip_sine.ogg" tabindex="0"></audio></td> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/hard_clip_chord.ogg" tabindex="0"></audio></td> </tr>
<tr> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/hard_clip_sine.mp3">sine-wave</a></td> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/hard_clip_chord.mp3">chord</a></td> </tr>
</tbody></table><br />
<hr /><div id="saturate"><span style="font-size: medium; font-weight: bold;">Saturate</span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TBrhvYnC2_I/AAAAAAAABe4/8xTH02SQUlE/s1600/function-saturate.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="60" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TBrhvYnC2_I/AAAAAAAABe4/8xTH02SQUlE/s640/function-saturate.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">function</span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_gBThNkc2AZA/TBrh04iT2lI/AAAAAAAABfA/t8986CRxoyo/s1600/sine-saturate.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="52" src="http://3.bp.blogspot.com/_gBThNkc2AZA/TBrh04iT2lI/AAAAAAAABfA/t8986CRxoyo/s640/sine-saturate.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">sine-wave</span></div><br />
It is my understanding that the saturate mode is meant to model the behaviour of a <a href="http://en.wikipedia.org/wiki/Bipolar_junction_transistor#Regions_of_operation">transistor</a> that is fully turned on. There is a linear section near the origin, but as the signal approaches the upper and lower limits, the saturation function pulls it back in. It's essentially a smoother version of the soft clip, which means it puts less energy into the higher harmonics.<br />
<br />
<table><tbody>
<tr> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/saturate_sine.ogg" tabindex="0"></audio></td> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/saturate_chord.ogg" tabindex="0"></audio></td> </tr>
<tr> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/saturate_sine.mp3">sine-wave</a></td> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/saturate_chord.mp3">chord</a></td> </tr>
</tbody></table><br />
<hr /><div id="sine"><span style="font-size: medium; font-weight: bold;">Sine</span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBrh8knmJLI/AAAAAAAABfI/0jFCHqV0Mbc/s1600/function-sine.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="60" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBrh8knmJLI/AAAAAAAABfI/0jFCHqV0Mbc/s640/function-sine.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">function</span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBrh-w-pU_I/AAAAAAAABfQ/t_M_hp1qZsw/s1600/sine-sine.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="52" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBrh-w-pU_I/AAAAAAAABfQ/t_M_hp1qZsw/s640/sine-sine.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">sine-wave</span></div><br />
This is a weird one - the shaper function is actually a sine-wave itself. I'm not sure what the <i>intent</i> of this function is, but it's pretty strange. At low drive, it's a bit like saturate with an attenuation at extreme input values. At higher drives, the frequency of the 'sine-wave' increases rapidly, essentially producing what I'd consider to be a fairly random effect. Consider an input signal value of x, with a drive of 127 - the output value is going to be almost anything, and will change dramatically for very small changes of x. It's pretty unstable.<br />
<br />
This mode has some interesting and dramatic results if you automate the drive control, so that it changes as the sound plays through the shaper.<br />
<br />
<br />
<table><tbody>
<tr> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/sine_sine.ogg" tabindex="0"></audio></td> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/sine_chord.ogg" tabindex="0"></audio></td> </tr>
<tr> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/sine_sine.mp3">sine-wave</a></td> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/sine_chord.mp3">chord</a></td> </tr>
</tbody></table><br />
<hr /><div id="bipulse"><span style="font-size: medium; font-weight: bold;">Bipulse</span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBriSzBxlTI/AAAAAAAABfY/5C5HXuL9now/s1600/function-bipulse.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="60" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBriSzBxlTI/AAAAAAAABfY/5C5HXuL9now/s640/function-bipulse.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">function</span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TBriUtV1JhI/AAAAAAAABfg/ZYzqoGZrq8I/s1600/sine-bipulse.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="52" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TBriUtV1JhI/AAAAAAAABfg/ZYzqoGZrq8I/s640/sine-bipulse.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">sine-wave</span></div><br />
Another slightly strange distortion mode - I imagine it's called "bipulse" because at higher drives the function looks like two pulses, one inverted. Notice that the output signal for any input is greatly attenuated for any drive setting - even at minimum drive, the signal is no more than 25% of the original amplitude. At lowest drive, it's very similar to the sine or saturate function. As drive increases, the attenuation becomes even more dramatic. It's as if the signal almost disappears. I'm really not sure what I'd use this function for, but if you put in a very quiet signal, you would get an amplified output, whereas louder inputs would tend to disappear to nothing.<br />
<br />
<br />
<table><tbody>
<tr> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/bipulse_sine.ogg" tabindex="0"></audio></td> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/bipulse_chord.ogg" tabindex="0"></audio></td> </tr>
<tr> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/bipulse_sine.mp3">sine-wave</a></td> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/bipulse_chord.mp3">chord</a></td> </tr>
</tbody></table><br />
<hr /><div id="unipulse"><span style="font-size: medium;"><span style="font-weight: bold;">Unipulse</span></span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBrio5d9_sI/AAAAAAAABfo/2UlOsq5zbxY/s1600/function-unipulse.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="60" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBrio5d9_sI/AAAAAAAABfo/2UlOsq5zbxY/s640/function-unipulse.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">function</span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TBriqju5KtI/AAAAAAAABfw/v-bq1c2dmro/s1600/sine-unipulse.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="52" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TBriqju5KtI/AAAAAAAABfw/v-bq1c2dmro/s640/sine-unipulse.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">sine-wave</span></div><br />
Yep, another unusual function. This is actually an <a href="http://en.wikipedia.org/wiki/Even_and_odd_functions#Even_functions">even</a> function, which means that it reflects negative input signals back into the positive half; notice the sine-wave above, it never goes below zero. In many ways, this function is a bit like a soft clip followed by a rectify - at low drive, it rectifies and amplifies then clips the input signal. At higher drives, the clip level decreases and the amplification domain becomes very small. At maximum drive this mode essentially creates a fixed DC signal and not much else.<br />
<br />
<br />
<table><tbody>
<tr> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/unipulse_sine.ogg" tabindex="0"></audio></td> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/unipulse_chord.ogg" tabindex="0"></audio></td> </tr>
<tr> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/unipulse_sine.mp3">sine-wave</a></td> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/unipulse_chord.mp3">chord</a></td> </tr>
</tbody></table><br />
<hr /><div id="peak"><span style="font-size: medium; font-weight: bold;">Peak</span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_gBThNkc2AZA/TBri2dsAucI/AAAAAAAABf4/xlrZB6ZD5eo/s1600/function-peak.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="60" src="http://2.bp.blogspot.com/_gBThNkc2AZA/TBri2dsAucI/AAAAAAAABf4/xlrZB6ZD5eo/s640/function-peak.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">function</span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBri4IjcAqI/AAAAAAAABgA/3dwgb3ok9nc/s1600/sine-peak.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="52" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBri4IjcAqI/AAAAAAAABgA/3dwgb3ok9nc/s640/sine-peak.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">sine-wave</span></div><br />
The peak mode has two main effects - first, it cuts out all positive input input, which reduces the energy in the output by half. Second, it clips the negative input. So it's really just a soft clip or saturate with the bottom half cut off.<br />
<br />
One unexpected use of this mode is to implement a unipolar step function for CV processing - at maximum drive, the output is zero for negative CV (0-63), and -64 for positive CV (64-127). All you have to do is invert this and you've got a nice step function.<br />
<br />
<table><tbody>
<tr> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/peak_sine.ogg" tabindex="0"></audio></td> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/peak_chord.ogg" tabindex="0"></audio></td> </tr>
<tr> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/peak_sine.mp3">sine-wave</a></td> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/peak_chord.mp3">chord</a></td> </tr>
</tbody></table><br />
<hr /><div id="rectify"><span style="font-size: medium;"><span style="font-weight: bold;">Rectify</span></span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_gBThNkc2AZA/TBrjB6PWmwI/AAAAAAAABgI/b3Wg-EwVVYY/s1600/function-rectify.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="60" src="http://2.bp.blogspot.com/_gBThNkc2AZA/TBrjB6PWmwI/AAAAAAAABgI/b3Wg-EwVVYY/s640/function-rectify.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">function</span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBrjDRTfukI/AAAAAAAABgQ/Cg-pA7gKJU8/s1600/sine-rectify.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="52" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBrjDRTfukI/AAAAAAAABgQ/Cg-pA7gKJU8/s640/sine-rectify.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">sine-wave</span></div><br />
Now we're getting interesting - this function has some interesting properties. At zero drive it's linear, and at low drive the bottom is attenuated. At mid-drive, the lower half of the input signal is zeroed out and energy is lost. At higher drives, things get very interesting - the lower half is mirrored up into the top half, and this has three effects - first, fundamental frequency is doubled; second, the fundamental frequency is eliminated; third, even harmonics are introduced.<br />
<br />
You can also use this function with CV processing to zero-out half of the input signal by setting the drive to 63. Unfortunately, the function is <i>not quite</i> zero for negative CV input, so you don't get a pure zero. An inverted peak works better in this case. The advantage is that this function retains linearity for the upper half of the input signal domain.<br />
<br />
<table><tbody>
<tr> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/rectify_sine.ogg" tabindex="0"></audio></td> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/rectify_chord.ogg" tabindex="0"></audio></td> </tr>
<tr> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/rectify_sine.mp3">sine-wave</a></td> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/rectify_chord.mp3">chord</a></td> </tr>
</tbody></table><br />
<hr /><div id="wrap"><span style="font-size: medium; font-weight: bold;">Wrap</span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TBrjFPMHR8I/AAAAAAAABgY/IdseYSzTiQM/s1600/function-wrap.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="60" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TBrjFPMHR8I/AAAAAAAABgY/IdseYSzTiQM/s640/function-wrap.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">function</span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_gBThNkc2AZA/TBrjGNsCjRI/AAAAAAAABgg/QemS3uuusDg/s1600/sine-wrap.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="52" src="http://3.bp.blogspot.com/_gBThNkc2AZA/TBrjGNsCjRI/AAAAAAAABgg/QemS3uuusDg/s640/sine-wrap.png" width="640" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;">sine-wave</span></div><br />
And now for the strangest function of them all. I'm really not sure how to describe this one. At low drive, it's linear, but as the drive increases the upper half of the input signal is quickly attenuated non-linearly, and then inverted! Yet the maximum positive input is still passed through unmodified. As drive increases further, it just gets weird. Look at the way it distorts a basic sine-wave. Crazy stuff!<br />
<br />
<table><tbody>
<tr> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/wrap_sine.ogg" tabindex="0"></audio></td> <td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/wrap_chord.ogg" tabindex="0"></audio></td> </tr>
<tr> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/wrap_sine.mp3">sine-wave</a></td> <td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/wrap_chord.mp3">chord</a></td> </tr>
</tbody></table><br />
<hr /><br />
<b>Frequency Analysis</b><br />
<br />
I set out intending to examine each mode according to its frequency response. But I quickly hit a problem - non-linear systems don't lend themselves to frequency analysis very easily at all. Since the usefulness of this analysis is very limited, I decided to give this a miss.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TCXPjF1Z28I/AAAAAAAABhI/Zfw_WZaoM_o/s1600/spectrum-hard_clip%4064.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TCXPjF1Z28I/AAAAAAAABhI/Zfw_WZaoM_o/s320/spectrum-hard_clip%4064.png" /></a></div><br />
Audacity does do some very nice spectrum analysis plots though.<br />
<br />
<br />
<div id="intermod"><b>Intermodulation Distortion</b></div><br />
Intermodulation (<a href="http://en.wikipedia.org/wiki/Intermodulation">wikipedia</a>) is a phenomenon of non-linear systems where two input frequencies combine in a way that does not produce harmonics, but typically sum and difference frequencies. It's essentially an interaction between the input signals - they <i>mix</i> together and produce new frequencies which are typically non-harmonic, or "off-key".<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://upload.wikimedia.org/wikipedia/en/b/b6/RF_Intermodulation_at_280_MHz.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="245" src="http://upload.wikimedia.org/wikipedia/en/b/b6/RF_Intermodulation_at_280_MHz.jpg" width="320" /></a></div><div style="text-align: center;"><span style="font-size: xx-small;"><i>This <a href="http://en.wikipedia.org/wiki/File:RF_Intermodulation_at_280_MHz.jpg">work</a> is licensed under the <a href="http://en.wikipedia.org/wiki/Creative_Commons" title="Creative
Commons">Creative Commons</a> <a class="external
text" href="http://creativecommons.org/licenses/by-sa/3.0/" rel="nofollow">Attribution-ShareAlike 3.0</a> License.</i></span></div><br />
It's intermodulation distortion that makes non-linear systems difficult to analyse, as well as sometimes sound very cool. It also means that the sine-wave plots throughout this article are indicative only - simply add a second sine-wave and you'll get completely different results. Put in more complex signals and who knows what you'll get out... <br />
<br />
As I was writing this, something occurred to me. If you take a typical Thor sound patch and play a chord, Thor creates a separate voice for each note. Each voice has its own Shaper, so you're only playing one note through each Shaper - the result is mixed together later. This completely avoids any intermodulation distortion created by different notes. If you want to create this sort of distortion, which sounds completely different, you need to route the mixed audio into another Shaper. Here are some examples of the same chord played through a separate Shaper:<br />
<br />
<table align="center"><tbody>
<tr><td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-soft_clip.mp3">soft clip</a></td><td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-soft_clip.ogg" tabindex="0"></audio></td></tr>
<tr><td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-hard_clip.mp3">hard clip</a></td><td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-hard_clip.ogg" tabindex="0"></audio></td></tr>
<tr><td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-saturate.mp3">saturate</a></td><td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-saturate.ogg" tabindex="0"></audio></td></tr>
<tr><td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-sine.mp3">sine</a></td><td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-sine.ogg" tabindex="0"></audio></td></tr>
<tr><td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-bipulse.mp3">bipulse</a></td><td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-bipulse.ogg" tabindex="0"></audio></td></tr>
<tr><td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-unipulse.mp3">unipulse</a></td><td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-unipulse.ogg" tabindex="0"></audio></td></tr>
<tr><td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-peak.mp3">peak</a></td><td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-peak.ogg" tabindex="0"></audio></td></tr>
<tr><td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-rectify.mp3">rectify</a></td><td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-rectify.ogg" tabindex="0"></audio></td></tr>
<tr><td><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-wrap.mp3">wrap</a></td><td><audio autobuffer="" controls="controls" src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/audio/intermod-wrap.ogg" tabindex="0"></audio></td></tr>
</tbody> </table><br />
Here's the RNS file:<br />
<ul><li><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/files/Thor%20Shaper%20Intermod-1.0.0.rns">Thor Shaper Intermod-1.0.0.rns</a></li>
</ul><br />
<div id="cvproc"><b>Using the Shaper for CV Processing</b></div><br />
Normally the Shaper is used for audio distortion, but with a few considerations it can also be used to process CV signals. This opens up some very interesting possibilities.<br />
<br />
Shultz designed a <a href="http://offwhitenoise.blogspot.com/2009/05/shultzs-triple-x-fader.html">Triple Cross Fader</a> using the Shaper's rectifier mode. This brilliant design uses the drive set to maximum which implements two piece-wise linear functions. You can read all about this <a href="http://offwhitenoise.blogspot.com/2009/05/shultzs-triple-x-fader.html">here</a>.<br />
<br />
During the development of my <a href="http://offwhitenoise.blogspot.com/2010/06/digital-logic-in-reason-8-bit-full.html">8-bit Adder</a>, I encountered an issue where one of my CV signals was growing very, very large. This was causing the Thor scaling to fail. To fix this, I fed the rogue CV signal into a Thor Shaper with the hard-clip mode set to zero drive. This clipped the CV signal at 127 rather than whatever high value it had reached, and this allowed the Thor scaling to work properly again, regardless of what processing happened before.<br />
<br />
In order to use the Shaper for CV processing, there's a trick you need to know. Because the Shaper is located in the "per-voice" section of Thor, it is only available when Thor is playing a note. Or at least when Thor <i>thinks</i> it is playing a note.<br />
<br />
To do this, route your incoming CV source into Filter 1 Audio Input, then route the Shaper output to wherever you want the output to go. The trick is to use the Step Sequencer on Repeat Mode with a single step of gate length 100%, and to tie the Step Sequencer Trigger to LFO2, set to square wave. Also, set LFO2 to trigger the Amplitude Envelope (with A=99ms, D=max, S=max, R=max). The LFO2 rate and Step Sequencer rate don't seem to matter too much (but see the bug below).</div><br />
<div><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TCfRfvFZjKI/AAAAAAAABiQ/OezPCqOi150/s1600/CV+Shaper-0.0.2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="328" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TCfRfvFZjKI/AAAAAAAABiQ/OezPCqOi150/s400/CV+Shaper-0.0.2.png" width="400" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div>I've created a basic template for this <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/files/CV%20Shaper-0.0.2.thor">here</a>.<br />
<br />
<div id="bug"><b>The Bug</b></div><br />
I co-discovered an unfortunate bug in Reason 4. Although the above self-triggering of the Step Sequencer works fine after loading a file, sometimes after exporting an audio clip, or even hitting "stop", the Thor Step Sequencer stalls. The 'Run' light remains on and the Step Sequencer is running - you can see the lights flashing above the steps - but there's no output. To reset this condition, simply click the Thor Run off then on. You can set the gate length to 99% to avoid this problem, but this will introduce very obvious glitches between each step. Not good.<br />
<br />
This bug is a bit of a shame really, because it's just serious enough to make the Shaper unreliable. To get around this, I am considering making all of my Shaper devices 'resettable' - an external signal will toggle the trigger. Then I just need a way to generate this signal on "stop" - this same behaviour can be exploited to do this, as long as this behaviour remains consistent in future versions of Reason... (*ahem*).<br />
<br />
<i>Update: <a href="https://www.propellerheads.se/forum/member.php?u=43776">selig</a> has suggested an excellent workaround for this bug <a href="https://www.propellerheads.se/forum/showpost.php?p=748306&postcount=6">here</a>, using the global LFO2 to trigger a voice's Amplitude Envelope. I have created an updated template <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/files/CV%20Shaper-0.0.2.thor">here</a> and the old one is still available <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/files/CV%20Shaper-0.0.1.thor">here</a>. This design solves the "stop" bug, but still has an issue after exporting audio. The fast LFO2 rate retriggers as soon as possible. If you don't care about the export issue, you can turn down the LFO2 rate if you like. </i><br />
<br />
<div id="audio_standalone"><b>Using the Shaper as a Standalone Effects Device</b></div><br />
The Shaper is a mono device - it can only process a single audio channel at a time. However you can use it to process any audio, not just Thor's oscillator signals. With this in mind, and using the same principles as the CV Shaper above, you can use the following patch to do this - just wire your incoming audio into Audio In1, and take the result from Audio Out1.<br />
<ul><li><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/thor_shaper/files/Audio%20Shaper-0.0.1.thor">Audio Shaper-0.0.1.thor</a></li>
</ul>If you want to process a stereo signal, just use two of them.<br />
<br />
<b>The Random Element</b><br />
<br />
The Reason manual mentions that the Shaper has a slightly random element:<br />
<div style="text-align: left;"><blockquote><span style="font-style: italic;">"... there is a slightly random element to the resulting distortion."</span></blockquote>I'm not sure what this refers to. During my analysis the shaper functions were very well defined and always returned the expected values. I did notice a couple of glitches (if you look carefully you may see them in the plots above) but I put these down to Step Sequencer glitches briefly disabling the shaper. Other than that, I didn't see anything random at all. Maybe someone at Propellerhead can enlighten us?<br />
<br />
<b>Spiky Glitch</b><br />
<br />
One other observation - sometimes the first value that is fed into the Shaper for each 'scope' sweep outputs an extreme low value. You'll see this as a little downward <i>spike</i> in the function graphs above, on the left, just as each one starts. I wasn't able to determine what causes this - I'm not even sure if it's a consequence of "exporting to audio file" or whether it's either related to the way the Step Sequencer works, or behaviour of the Shaper when it is given a zero input for a period of time. Any ideas?<br />
<br />
<b>Conclusion</b><br />
<br />
This might be the longest article I've written for this blog so far - it certainly took the most time. Hopefully, if you've read this far then you now have a better understanding of what Thor's Shaper actually does in each of its modes.<br />
<br />
In my opinion, the effect that the Shaper has on many sounds is a bit unpleasant, although with care it can be used to add warmth. It should work differently on chords because of intermodulation, but by default a separate instance is used for each note/voice, so you have to route into a Shaper yourself.<br />
<br />
I don't think it's quite as pleasing as the Scream4 but it is a handy device to have around and its use in CV processing is also very powerful.<br />
<br />
If you have any comments or questions, please do submit them - it's always great to get feedback.<br />
<br />
</div></div></div>meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com9tag:blogger.com,1999:blog-8070825255100764146.post-52325137785757595352010-06-26T18:27:00.003+12:002010-06-26T21:14:06.026+12:00Akai MPK49 Pad ModificationA few years ago I did a light review of the <a href="http://offwhitenoise.blogspot.com/2008/07/korg-kontrol49-akai-mpk49-comparison.html">Akai MPK49</a> MIDI keyboard controller. Subsequently I bought one and I've been happily using it since.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_gBThNkc2AZA/TCXEdqQwEGI/AAAAAAAABhA/vpkiWnpkCxE/s1600/mpk49_angle_med.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/_gBThNkc2AZA/TCXEdqQwEGI/AAAAAAAABhA/vpkiWnpkCxE/s320/mpk49_angle_med.png" /></a></div><br />
<br />
However one thing consistently bugged me (and everyone else) about the design - the drum "pads" are terrible. You have to hit them quite hard to even register a hit, let alone a loud one. Because I'd never really used such pads before, it didn't bother me too much. But <a href="http://www.propellerheads.se/reason5/index.cfm?fuseaction=get_article&article=kong">Kong</a> is coming...<br />
<br />
So when I saw these <a href="https://www.propellerheads.se/forum/showthread.php?t=125887">two</a> <a href="https://www.propellerheads.se/forum/showthread.php?t=125879">threads</a> on the Propellerhead User Forum, I knew I had to give this a try. I'm really glad I did.<br />
<br />
This video is a nice guide on how to take the MPK49 apart and get access to the rubber pads. There are 28 screws to remove, but it's not very difficult. The video author does a good job showing how to get inside, so I'm not going to rehash that here.<br />
<br />
<div style="text-align: center;"><object height="340" width="560"><param name="movie" value="http://www.youtube-nocookie.com/v/_mI4SutQJpQ&hl=en_US&fs=1&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/_mI4SutQJpQ&hl=en_US&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></div><br />
Some things to remember while taking apart your precious MIDI controller:<br />
<ul><li> use a manual screwdriver rather than a motorised one as in the video - take note of how much torque is required to unscrew those twenty rear-plate screws, and when you put back together again, do not tighten them up any more than that. You're screwing into plastic - you do NOT want to strip the threads!</li>
<li>also try not to cross the threads when you're putting the screws back in, or you'll risk stripping the threads.</li>
<li>when you remove the little PCB, watch out for that little 1-inch ribbon connector. It's not too fragile I suspect, but try not to pull on it if you can.</li>
<li>when removing or replacing the rubber pads, be careful not to damage or scratch the underlying sensor array. I don't know exactly what it is (PVDF perhaps?) but it looks delicate.</li>
<li>when you replace the outer case, be careful not to trap the ribbon cables that might stick out the back.</li>
</ul> <br />
The fundamental problem with the pads is that there is a gap of approximately 1mm between the bottom of each pad and the pressure sensor underneath. This means you have to hit or press the pad hard enough to travel that 1mm before any pressure will be sensed, <i>regardless of the pad sensitivity settings</i> within the MPK49. It doesn't matter how sensitive you set the software within the keyboard to be, that gap is always going to be a problem.<br />
<br />
The simple solution is to fill the gap up with something. Many people, including that video, recommend using four layers of electrical insulation tape underneath the rubber pads. But electrical insulation tape? Really? I <i>hate</i> that stuff! After a while, the adhesive oozes out and goes everywhere, it's horrible, horrible stuff. Avoid!<br />
<br />
Instead, I decided to use some cloth tape, sometimes rightly or wrongly called "duct tape", or occasionally "gaffer tape" (although mine isn't black nor has it a matte finish). The nice quality about this tape is that the adhesive is pretty stable and doesn't migrate much, but it's also pretty sticky. It's also quite robust and for this application it should hold its thickness over time.<br />
<br />
I didn't know how much I'd need initially so I put a strip onto some grease-proof baking paper and ruled out 15mm x 24mm rectangles. The baking paper made it really easy to cut the tape to the right size and then peel it off for application without contaminating the glue with dust or clothing lint. <br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TCWXZmL_v1I/AAAAAAAABgo/BzEPmw60KPQ/s1600/SV400150.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TCWXZmL_v1I/AAAAAAAABgo/BzEPmw60KPQ/s320/SV400150.JPG" /></a></div><br />
I started off with just a single layer on a single pad. I reinstalled the rubber pads and gave it a try. The improvement was considerable - in fact I was very tempted to leave it at that. But of course I'm not one to take something apart without trying out a few things...<br />
<br />
So I tried two layers. This was even better! I could now do cool drum rolls with my fingers and I wasn't constantly 'missing' the pads and sounding incompetent.<br />
<br />
Once again, I was going to leave it at two layers, but just to make sure I tried out a few pads with three layers.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_gBThNkc2AZA/TCWXhVQhdDI/AAAAAAAABg4/ArOoDcGvu6A/s1600/SV400158.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/_gBThNkc2AZA/TCWXhVQhdDI/AAAAAAAABg4/ArOoDcGvu6A/s320/SV400158.JPG" /></a></div><br />
<br />
Wow! The improvement is dramatic! I barely have to exert any pressure on the pads at all to get a decent signal, yet I don't get spurious hits either. Three layers is definitely where it's at in my opinion.<br />
<br />
But three layers of the tape I've got doesn't mean much to anyone else, so I measured it for you.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TCWXdukWnuI/AAAAAAAABgw/3eW6W3phaqo/s1600/SV400154.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TCWXdukWnuI/AAAAAAAABgw/3eW6W3phaqo/s320/SV400154.JPG" /></a></div><br />
Without going into the gory details, I ascertained that the tape is approximately 0.3mm thick, and I used three layers, so that's a total thickness of 0.9mm, with an error of, let's say, +/- 0.05mm. When you look at the underside of the rubber pads end-on, you can see the top layer of tape <i>just</i> below the edge. <br />
<br />
(I used the coin as a known thickness to measure inside the pad cavity - the coin is 2.15mm thick on the edge, I measured 8.05mm without tape, and 8.97mm with three layers of tape. This is about 0.3mm per layer.)<br />
<br />
Once you've put it all back together, you can set the pad sensitivity, threshold and curves to whatever you want. I'm using threshold 1, sensitivity 16, curve A and it seems to work fine.<br />
<br />
<div style="text-align: left;">The Akai MPK49 is a great but not perfect keyboard. If you have one, I definitely recommend doing this mod - it's not hard, just take your time and think ahead. In total it took me about an hour with all the measuring, experiments, etc.<br />
<br />
Bring on Kong!<br />
<br />
<br />
<br />
</div>meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com10tag:blogger.com,1999:blog-8070825255100764146.post-30027509057860099392010-06-18T10:15:00.001+12:002010-06-19T00:08:40.385+12:00Digital Logic in Reason: 8-bit Full Adder<div style="text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBSrkMVyBfI/AAAAAAAABaI/oASoSBlLPFI/s1600/8-bit+Full+Adder.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482195284692960754" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBSrkMVyBfI/AAAAAAAABaI/oASoSBlLPFI/s400/8-bit+Full+Adder.png" style="cursor: pointer; height: 400px; width: 359px;" /></a></div><br />
On the <a href="http://www.propellerheads.se/">Propellerhead's</a> <a href="https://www.propellerheads.se/forum/forumdisplay.php?f=6">Users Forum</a>, user <span style="font-style: italic;">fieldframe</span> likened my <a href="http://offwhitenoise.blogspot.com/2010/06/synchronous-digital-logic-implemented.html">16-bit counter</a> to a calculator that some clever person had implemented in the successful PS3 game "<a href="http://www.littlebigplanet.com/">LittleBIGPlanet</a>":<br />
<br />
<div style="text-align: center;"><object height="385" width="480"><param name="movie" value="http://www.youtube-nocookie.com/v/ZiRgYBHoAoU&hl=en_US&fs=1&rel=0"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube-nocookie.com/v/ZiRgYBHoAoU&hl=en_US&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="385" width="480"></embed></object></div><br />
It was a very generous comparison - I'm sure that person spent a <span style="font-weight: bold;">lot </span>longer than I did on their amazing creation. I'm not going to go to such extraordinary lengths to do anything like this in Reason. Well, not for a little while anyway, but it did give me the idea to implement a simple 8-bit adder.<br />
<div style="text-align: center;"><span style="font-size: 78%;"><span style="font-style: italic;"></span></span></div><span style="font-style: italic;">This article contains some introductory explanations of digital logic - you may already know some or all of this, but if you don't then I hope you find this informative.</span><br />
<br />
An 8-bit adder takes two 8-bit <a href="http://en.wikipedia.org/wiki/Binary_numeral_system">binary numbers</a>, and adds them together to give a result. For example, 85 (01010101<span style="font-size: 78%;">b</span> in binary) summed with 60 (00111100<span style="font-size: 78%;">b</span>) gives 145 (10010001<span style="font-size: 78%;">b</span>). I'm only concerned with <a href="http://en.wikipedia.org/wiki/Signedness">unsigned</a> numbers in this article.<br />
<br />
The heart of the classical digital adder is the <a href="http://en.wikipedia.org/wiki/Full_adder#Full_adder">1-bit full adder</a> - a relatively simple device that takes three digital inputs and produces two digital outputs:<br />
<ul><li>A and B are single bit inputs representing the two 1-bit numbers to be summed ("addends")<br />
</li>
<li>input C<span style="font-size: 78%;">in</span> is a single bit input that is usually tied to zero but can accept a carry overflow from a previous adder unit when multiple adders are chained together.<br />
</li>
<li>output S is a single bit output that is the <span style="font-style: italic;">binary sum</span> of A and B.</li>
<li>output C<span style="font-size: 78%;">out</span> is a single bit output that is high if the sum resulted in a carry.</li>
</ul><div style="text-align: center;"><a href="http://2.bp.blogspot.com/_gBThNkc2AZA/TBSBT1xQ4eI/AAAAAAAABZA/5oYjJplfeug/s1600/200px-1-bit_full-adder.svg.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482148824267940322" src="http://2.bp.blogspot.com/_gBThNkc2AZA/TBSBT1xQ4eI/AAAAAAAABZA/5oYjJplfeug/s400/200px-1-bit_full-adder.svg.png" style="cursor: pointer; height: 172px; width: 200px;" /></a></div><div style="text-align: center;"><span style="font-size: 50%;"><a href="http://en.wikipedia.org/wiki/File:1-bit_full-adder.svg">This</a> image is used under the Creative Commons <a href="http://creativecommons.org/licenses/by-sa/3.0/">Attribution ShareAlive 3.0</a> license.<br />
</span></div><br />
This device is <span style="font-style: italic;">combinational</span> rather than <span style="font-style: italic;">sequential</span> or <span style="font-style: italic;">synchronous </span>because it makes no use of internal state - there are no flipflops or clock signals. Everything happens as soon as the inputs change. A counter is (usually) a sequential circuit - it has internal state (the current count) and that only changes when the clock rises. Generally, sequential circuits are much more interesting than combinational circuits, but you need working combinational circuits to create interesting sequential circuits, so for this project I'm concentrating on creating a robust combinational device.<br />
<br />
Quick aside: <span style="font-weight: bold;">A OR B</span> (inclusive OR) means (A or B) or (A and B), whereas <span style="font-weight: bold;">A XOR B</span> (eXclusive OR) means (A or B) but not (A and B). i.e. one or the other but not both.<br />
<br />
A 1-bit Full Adder outputs:<br />
<ul><li>S as high if A and B are different and C<span style="font-size: 78%;">in</span> is low, or A and B are the same and C<span style="font-size: 78%;">in</span> is high. i.e. (A XOR B) XOR C<span style="font-size: 78%;">in</span>.</li>
<li>C<span style="font-size: 78%;">out</span> as high if either A & B are both high, or (A XOR B) and C<span style="font-size: 78%;">in</span> are both high.</li>
</ul>The schematic for this circuit can be drawn as:<br />
<div style="text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBSBU7tTkaI/AAAAAAAABZQ/mJYn46V0jyw/s1600/500px-Full_Adder.svg.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482148843041821090" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBSBU7tTkaI/AAAAAAAABZQ/mJYn46V0jyw/s400/500px-Full_Adder.svg.png" style="cursor: pointer; height: 180px; width: 400px;" /></a></div><br />
By placing multiple Full Adders together side-by-side with their Carry inputs and outputs connected it is possible to create a wider Full Adder, such as this 8-bit one:<br />
<br />
<div style="text-align: center;"><a href="http://2.bp.blogspot.com/_gBThNkc2AZA/TBSBCVjKBHI/AAAAAAAABYo/aciPYnrxiE4/s1600/8-bit+adder+diagram.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482148523561059442" src="http://2.bp.blogspot.com/_gBThNkc2AZA/TBSBCVjKBHI/AAAAAAAABYo/aciPYnrxiE4/s400/8-bit+adder+diagram.png" style="cursor: pointer; height: 78px; width: 400px;" /></a><br />
<span style="font-size: 50%;">This image is derived from this <a href="http://en.wikipedia.org/wiki/File:1-bit_full-adder.svg">source</a> and distributed under the same Creative Commons <a href="http://creativecommons.org/licenses/by-sa/3.0/">Attribution ShareAlike 3.0</a> license.</span><br />
<br />
</div>Each bit of addend <span style="font-weight: bold;">A </span>(<span style="font-weight: bold;">A<span style="font-size: 78%;">7</span>..<span style="font-size: 78%;"><span style="font-size: 100%;">A</span>0)</span></span> goes into a separate 1-bit Full Adder along with its counterpart from the other addend <span style="font-weight: bold;">B</span> (<span style="font-weight: bold;">B<span style="font-size: 78%;">7</span>...B<span style="font-size: 78%;">0</span></span>). The result is simply the collection of outputs <span style="font-weight: bold;">S </span>(<span style="font-weight: bold;">S<span style="font-size: 78%;">7</span>...S<span style="font-size: 78%;">o</span></span>). However, in the event that this eight bit result overflows, the last carry C<span style="font-size: 78%;">out</span> will be set, so the result is essentially a <span style="font-style: italic;">nine-bit</span> number C<span style="font-size: 78%;">out</span> + <span style="font-weight: bold;">S</span> (<span style="font-weight: bold;">C<span style="font-size: 78%;">out</span>S<span style="font-size: 78%;">7</span>...S<span style="font-size: 78%;">o</span></span>).<br />
<span style="font-size: 78%;"><span style="font-style: italic;"></span></span><br />
This is essentially the way I've constructed my 8-bit adder, which you can play with <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/digital_logic/8-bit_full_adder/8-bit%20Full%20Adder%20testbench-0.0.2.rns">here</a>.<br />
<br />
<div style="text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TBSBBBY9QQI/AAAAAAAABYQ/yKncY2VVENw/s1600/1-bit+adders.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482148500969701634" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TBSBBBY9QQI/AAAAAAAABYQ/yKncY2VVENw/s400/1-bit+adders.png" style="cursor: pointer; height: 127px; width: 400px;" /></a><br />
<br />
<div style="text-align: left;">For the purposes of my demonstration, to set the 8-bit inputs A and B the following section in the rack is used:<br />
<br />
<div style="text-align: center;"><a href="http://3.bp.blogspot.com/_gBThNkc2AZA/TBSBVSpjYxI/AAAAAAAABZY/z96MYcjJOhY/s1600/input.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482148849200096018" src="http://3.bp.blogspot.com/_gBThNkc2AZA/TBSBVSpjYxI/AAAAAAAABZY/z96MYcjJOhY/s400/input.png" style="cursor: pointer; height: 147px; width: 400px;" /></a><br />
<br />
<div style="text-align: left;">Each input has two combinators associated, with buttons labeled 0 to 7. These represent the bits within the 8-bit input number. Each bit in an unsigned binary number has a weight dependent on its position. Button 0 is the least significant bit with a weight of 1, and 7 is the most significant bit, with a weight of 128. The value of a binary number is the sum of the weights for positions where a 1 appears and these eight buttons can be used to set this. Therefore the buttons represent the ones and zeros in an 8-bit unsigned binary number.<br />
<br />
For example, the following represents a digital 0 input:<br />
<br />
<div style="text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBSBmkL4LxI/AAAAAAAABZg/TuE4XrZzn7g/s1600/input-0.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482149145965244178" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBSBmkL4LxI/AAAAAAAABZg/TuE4XrZzn7g/s400/input-0.png" style="cursor: pointer; height: 220px; width: 400px;" /></a><br />
00000000<span style="font-size: 78%;">b</span> = 0*128 + 0*64 + 0*32 + 0*16 + 0*8 + 0*4 + 0*2 + 0*1 = 0</div><br />
Whereas this represents 71:<br />
<br />
<div style="text-align: center;"><a href="http://3.bp.blogspot.com/_gBThNkc2AZA/TBSBm6AhrRI/AAAAAAAABZo/BN3gEp21Qrc/s1600/input-71.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482149151823211794" src="http://3.bp.blogspot.com/_gBThNkc2AZA/TBSBm6AhrRI/AAAAAAAABZo/BN3gEp21Qrc/s400/input-71.png" style="cursor: pointer; height: 220px; width: 400px;" /></a><br />
01000111<span style="font-size: 78%;">b</span> = 0*128 + 1*64 + 0*32 + 0*16 + 0*8 + 1*4 + 1*2 + 1*1 = 71<br />
<br />
<div style="text-align: left;">And of course this represents 255:<br />
<br />
<div style="text-align: center;"><a href="http://2.bp.blogspot.com/_gBThNkc2AZA/TBSBngC1LYI/AAAAAAAABZw/y9d29a7uTSc/s1600/input-255.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482149162033425794" src="http://2.bp.blogspot.com/_gBThNkc2AZA/TBSBngC1LYI/AAAAAAAABZw/y9d29a7uTSc/s400/input-255.png" style="cursor: pointer; height: 220px; width: 400px;" /></a><br />
11111111<span style="font-size: 78%;">b</span> = 1*128 + 1*64 + 1*32 + 1*16 + 1*8 + 1*4 + 1*2 + 1*1 = 255<br />
<div style="text-align: left;"><br />
By setting up A and B, you'll see the sum on the "A + B" Vocoder near the bottom. This example shows 85 + 60 = 145:<br />
<br />
<div style="text-align: center;"><a href="http://3.bp.blogspot.com/_gBThNkc2AZA/TBSBTQOfAEI/AAAAAAAABY4/OsgCGy9yZE0/s1600/85%2B60%3D145.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482148814189953090" src="http://3.bp.blogspot.com/_gBThNkc2AZA/TBSBTQOfAEI/AAAAAAAABY4/OsgCGy9yZE0/s400/85%2B60%3D145.png" style="cursor: pointer; height: 400px; width: 360px;" /></a><br />
01010101<span style="font-size: 78%;">b</span> + 00111100<span style="font-size: 78%;">b</span> = 10010001<span style="font-size: 78%;">b</span></div><br />
This example (255 + 1 = 256) shows what happens when the eight bit sum overflows into the final carry output, and becomes nine bits:<br />
<br />
<div style="text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TBSBUBFBE-I/AAAAAAAABZI/vbKrr9m-ea0/s1600/255%2B1%3D256.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482148827303580642" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TBSBUBFBE-I/AAAAAAAABZI/vbKrr9m-ea0/s400/255%2B1%3D256.png" style="cursor: pointer; height: 400px; width: 360px;" /></a></div></div></div></div></div></div></div></div>11111111<span style="font-size: 78%;">b</span> + 00000001<span style="font-size: 78%;">b</span> = 100000000<span style="font-size: 78%;">b</span><br />
<br />
<div style="text-align: left;">So how did I construct a <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/digital_logic/8-bit_full_adder/1-bit%20Full%20Adder-0.0.2.cmb">1-bit Full Adder</a>? Look at the schematic diagram again:<br />
<br />
<div style="text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBSBU7tTkaI/AAAAAAAABZQ/mJYn46V0jyw/s1600/500px-Full_Adder.svg.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482148843041821090" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBSBU7tTkaI/AAAAAAAABZQ/mJYn46V0jyw/s400/500px-Full_Adder.svg.png" style="cursor: pointer; height: 180px; width: 400px;" /></a></div><br />
You'll notice that the device is made up from two XOR gates, two AND gates and an OR gate. I already have these from my <a href="http://offwhitenoise.blogspot.com/2010/06/synchronous-digital-logic-implemented.html">16-bit counter</a> project, so I can simply wire them up here (after fixing a minor bug in the AND gate):<br />
<br />
<div style="text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBSBBkG0HLI/AAAAAAAABYg/U-fi0uS3JvQ/s1600/1-bit+full+adder+front.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482148510288846002" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBSBBkG0HLI/AAAAAAAABYg/U-fi0uS3JvQ/s400/1-bit+full+adder+front.png" style="cursor: pointer; height: 400px; width: 348px;" /></a><br />
<div style="text-align: left;"><br />
<div style="text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBSpoZix-TI/AAAAAAAABaA/hBOZbhYhYxc/s1600/1-bit+full+adder+back.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482193157933365554" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBSpoZix-TI/AAAAAAAABaA/hBOZbhYhYxc/s400/1-bit+full+adder+back.png" style="cursor: pointer; height: 400px; width: 304px;" /></a></div><div style="text-align: center;"><br />
</div>Because I was able to implement two XOR gates and two AND gates in a single Thor instance, I only need three Thor devices (XOR2, AND2, OR2) to implement this adder. Cool. But what's that fourth Thor for?<br />
<br />
It turns out that in Reason, CV signals are not limited to the operational range 0-127. It appears that, with Thor at least, it is possible to go beyond these limits to some degree. As the value gets bigger it eventually reaches a point where the Thor "mod scaling" fails if it uses this value. Normally an input signal of zero scaled by a CV value of 127 gives zero, but if the scaling factor is high enough it seems that Thor's multiplication goes a bit nuts and zero times a large CV value is some other large CV value. This causes the AND gate to fail - you get: (low AND high) gives "high", which is wrong.<br />
<br />
In this application, there are four upstream logic gates (Thor instances) that contribute to the C<span style="font-size: 78%;">out</span> signal and this seems to push the CV value too high when all the inputs are high. So the <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/digital_logic/8-bit_full_adder/Shaper%20Buffer%200.0.1.thor">final</a> Thor is used to hard-limit the final C<span style="font-size: 78%;">out</span> output to the range 0-127, using the hard-clip mode of Thor's shaper with minimum drive. Therefore the nasty large CV value is squashed back into the expected 0-127 range and everything downstream works properly again.<br />
<br />
<div style="text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TBSwbMq152I/AAAAAAAABag/xitKABw1gkM/s1600/shaper+buffer.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482200627720611682" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TBSwbMq152I/AAAAAAAABag/xitKABw1gkM/s400/shaper+buffer.png" style="cursor: pointer; height: 342px; width: 400px;" /></a><br />
The shaper buffer.</div><br />
For a bit of fun, this is what part of the back of the rack looks like once everything is wired up:</div></div></div><br />
<a href="http://2.bp.blogspot.com/_gBThNkc2AZA/TBSrkrjV_hI/AAAAAAAABaQ/xjB9T3AF7wA/s1600/spaghetti.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5482195293071343122" src="http://2.bp.blogspot.com/_gBThNkc2AZA/TBSrkrjV_hI/AAAAAAAABaQ/xjB9T3AF7wA/s400/spaghetti.png" style="cursor: pointer; height: 400px; width: 309px;" /></a><br />
<br />
<div style="text-align: left;"><div style="text-align: center;">:)</div><br />
After all that, what use is this adder? Well, for one it helps validate my logic gates - the more things like this that work, the more confidence I have that my designs are working properly. Secondly, with a few changes, this will be the basis for a subtractor, which will then allow me to <span style="font-style: italic;">differentiate </span>a CV signal, which is a measurement of the signal's slope at a point in time. This opens the door to CV <span style="font-style: italic;">integration</span>, where CV signals can be integrated over time by simply keeping a running sum. This is essentially the same as measuring the area under the curve. Integrators and differentiators are an important part of many circuits, including feedback systems, so perhaps I can find some musical use for this yet.<br />
<br />
Of course, if you have any good ideas, please let me know or feel free to try building something yourself with the files and ideas I've shared.<br />
<br />
For reference, I include my combinational logic gate <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/digital_logic/8-bit_full_adder/bipolar-logic-gates-0.0.4.rns">test-bench</a> (version 0.0.4) - bipolar NOT, XOR, AND and OR gates for your use. Enjoy.<br />
<br />
Files in this post:<br />
<ul><li><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/digital_logic/8-bit_full_adder/1-bit%20Full%20Adder-0.0.2.cmb">1-bit Full Adder-0.0.2.cmb</a></li>
<li><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/digital_logic/8-bit_full_adder/8-bit%20Full%20Adder%20testbench-0.0.2.rns">8-bit Full Adder testbench-0.0.2.rns</a></li>
<li><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/digital_logic/8-bit_full_adder/bipolar-logic-gates-0.0.4.rns">Shaper Buffer 0.0.1.thor</a></li>
<li><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/digital_logic/8-bit_full_adder/Shaper%20Buffer%200.0.1.thor">bipolar-logic-gates-0.0.4.rns</a></li>
</ul><br />
<div style="color: #660000; text-align: center;"><span style="font-size: 78%;"><span style="font-style: italic;">The examples in this article require Reason 4 or newer.</span></span><br />
<br />
</div></div></div>meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com0tag:blogger.com,1999:blog-8070825255100764146.post-3554940463879607352010-06-13T17:15:00.012+12:002010-06-13T22:05:47.056+12:00Digital Logic in Reason: Updated Flipflop & CounterThanks to everyone here and in various other places for the great feedback on my <a href="http://offwhitenoise.blogspot.com/2010/06/synchronous-digital-logic-implemented.html">16 bit counter</a>. I completely appreciate that this 'invention' is somewhat esoteric at this point - it's not even obvious to me what one might actually use it for. However I do have some ideas brewing and that's led me to slightly refine my flipflop slightly.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gBThNkc2AZA/TBRxOmBrRoI/AAAAAAAABYA/mMIQVFRCEIc/s1600/bipolar+flipflop-0.0.3+front.png"><img style="cursor: pointer; width: 400px; height: 74px;" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TBRxOmBrRoI/AAAAAAAABYA/mMIQVFRCEIc/s400/bipolar+flipflop-0.0.3+front.png" alt="" id="BLOGGER_PHOTO_ID_5482131141956421250" border="0" /></a><br /></div><br />The new version (<a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/digital_logic/updated_flipflop_and_counter/bipolar%20flipflop-0.0.3.thor">0.0.3</a>) has more consistent assignment of the input and output ports, with a "pass-thru" output port for each of the three (clock, reset, data) input signals. The signal on the input port simply appears on the output port, immediately and unchanged. This allows you to easily chain together multiple flipflops without having to create large banks of CV splitters.<br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gBThNkc2AZA/TBRxPCsSdfI/AAAAAAAABYI/VOU4O8j8gTY/s1600/ports.png"><img style="cursor: pointer; width: 400px; height: 172px;" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TBRxPCsSdfI/AAAAAAAABYI/VOU4O8j8gTY/s400/ports.png" alt="" id="BLOGGER_PHOTO_ID_5482131149651342834" border="0" /></a><br /></div>The main state or "Q" output has been moved to CV Out4. The mandatory wire between Audio Out1 and Audio In1 remains - remember that you have to add this manually since it is not saved as part of the .thor patch.<br /><br />The "beep" button can be used to help debug the operation of the flipflop - to use this, connect a wire from Audio Out4 to a mixer channel, then click the "beep" button and you should hear a beep on each rising clock edge. The tone changes depending on whether the Q output is high or low.<br /><br />To demonstrate that this flipflop still works, I have included a <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/digital_logic/updated_flipflop_and_counter/bipolar%20flipflop%20testbench-0.0.4.rns">test-bench</a> and an updated version of the <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/digital_logic/updated_flipflop_and_counter/bipolar%2016-bit%20counter-1.0.1.rns">16-bit counter</a>. Both use version 0.0.3 of the flipflop throughout. I've also included the<a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/digital_logic/updated_flipflop_and_counter/Bipolar%204-bit%20Counter-0.0.3.cmb"> 4-bit counter</a> combi patch.<br /><br />I have yet to analyse the setup- and hold-times for this device. The internal 7.9ms delay will definitely limit the maximum speed that this device can run at. If I used an external DDL-1 I could reduce the delay to 1ms but that would mean either putting the entire device inside a combinator (which I want to avoid for as long as possible), or ensuring an external DDL-1 is hooked up to every flipflop.<br /><br />There was also a slight bug in the AND2 device - this has been fixed in the files above (bipolar and2-0.0.2).<br /><br />Stay tuned for more digital logic posts.<br /><br /><div style="text-align: center; color: rgb(102, 0, 0);"><span style="font-size:78%;"><span style="font-style: italic;">The examples in this article require Reason 4 or newer.</span></span><br /></div>meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com0tag:blogger.com,1999:blog-8070825255100764146.post-61890226888452643102010-06-07T20:59:00.026+12:002021-02-02T09:30:39.528+13:00Synchronous Digital Logic implemented in Reason 4<div style="text-align: center;"><div style="text-align: left;"><span style="font-style: italic;">Updated - <a href="http://offwhitenoise.blogspot.com/2010/06/digital-logic-in-reason-4-updated.html">Digital Logic in Reason: Updated Flipflop & Counter</a>
Correction - FF pass-through outputs are CV Out3 and CV Out4 (not 2 & 3) for clock and reset respectively. The diagram is incorrect for version 0.0.1.</span>
</div><a href="http://3.bp.blogspot.com/_gBThNkc2AZA/TAzR_8nl1eI/AAAAAAAABW0/S_-U5MByjT8/s1600/logic_snippet.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5479985743137199586" src="http://3.bp.blogspot.com/_gBThNkc2AZA/TAzR_8nl1eI/AAAAAAAABW0/S_-U5MByjT8/s400/logic_snippet.png" style="cursor: pointer; height: 210px; width: 400px;" /></a>
</div>This is the sort of post where you either understand what I'm talking about, immediately realise the <a href="http://en.wikipedia.org/wiki/Eniac">huge implications</a> and your brain explodes, or you don't know what I'm talking about, in which case none of this will make much sense.
Late last year, I spent a considerable amount of time working on an idea. I wanted to see how far I could get implementing some sort of "digital logic" with Reason4 devices. You know, the sorts of things that make computers and electronics work. I wanted to use CV as a kind of "voltage" and create both combinational <a href="http://en.wikipedia.org/wiki/Logic_gates">logic gates</a> (e.g. AND, XOR) as well as sequential logic (<a href="http://en.wikipedia.org/wiki/Flip-flop_%28electronics%29">flipflops</a>) so that I can combine them to create various complex devices such as <a href="http://en.wikipedia.org/wiki/Finite_state_machine#Hardware_applications">finite state machines</a> or digital <a href="http://en.wikipedia.org/wiki/Adder_%28electronics%29">adders</a>. This is the sort of thing that electronics engineers like myself think about...
I had grand plans for this stuff, but time ran out for now. Therefore I'd like to post what I have to date so that people can pick this up and run with it if they think it's interesting.
I did manage to get things working quite nicely - I believe basic finite state machines are definitely possible and to prove this I created one of the most simple of all - a counter. Behold, my 16-bit digital synchronous counter implemented entirely with Reason devices!
<div style="text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TAzRrwq-EAI/AAAAAAAABWM/SFwucSBRQ1M/s1600/16-bit+counter.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5479985396332761090" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TAzRrwq-EAI/AAAAAAAABWM/SFwucSBRQ1M/s400/16-bit+counter.png" style="cursor: pointer; height: 470px; width: 332px;" /></a>
<span style="font-weight: bold;">RNS file:</span><a href="https://www.dropbox.com/s/vaebwh48w3igvfm/bipolar%2016-bit%20counter-0.0.5.rns?dl=0"><span style="font-weight: bold;"> 16-bit Digital Counter</span>
</a></div><div style="text-align: center;">
</div>
This design is based on the standard synchronous counter implemented with D-type flipflops, as described <a href="https://tams.informatik.uni-hamburg.de/applets/hades/webdemos/30-counters/30-sync/sync-dff.html">here</a>.
<div style="text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TAzbUdIoVZI/AAAAAAAABXs/fClXGGj7ajg/s1600/schematic.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5479995991067743634" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TAzbUdIoVZI/AAAAAAAABXs/fClXGGj7ajg/s400/schematic.png" style="cursor: pointer; height: 189px; width: 400px;" /></a>
</div><div style="text-align: center;">Schematic.
</div>
In order to achieve this, I had to design a suite of simpler devices such as AND and XOR gates, as well as synchronous elements such as a clock generator and a flipflop.
I set myself some goals:
<ol><li>each device must compose of no more than a single Thor instance. No combinators allowed because I wanted to put groups of these devices inside combinators without messing around with combi programming.</li><li>ensure the devices are designed to run at the fastest Reason CV oscillator rate - 250 Hz. Not very fast really, but fast enough for what I want to do.</li><li>ensure that the flipflops act as registers, not latches. The output should only change on the 'clock edge'.
</li></ol>An important question I had to resolve is whether to use unipolar (0-127) or bipolar (-64 to 63) CV signals as representations of digital logic levels. After a lot of messing around with unipolar CV, I eventually gave up and tried bipolar CV instead. It was much easier and this is what I'm now using. If anyone is interested, <a href="https://www.dropbox.com/s/42805wxkwuib8lg/unipolar-logic-gates-0.0.5.rns?dl=0">here</a> are some unipolar combinational logic gates, but I failed to construct a reasonable flipflop.
Bipolar input signals need to be specially constructed, so I designed a bipolar signal source and bipolar clock generator to produce the right CV signals.
I'm not going to go into the intricacies of the combinational logic devices, but here is an interactive <a href="https://www.dropbox.com/s/y5gd2qx7z9qnklv/bipolar-logic-gates-0.0.2.rns?dl=0">testbench </a>(RNS). Click the Thor buttons labeled A, B, C and D to generate logical input signals...
<div style="text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TAzUoK9lyBI/AAAAAAAABXM/cITPE6Y31Wk/s1600/logic_tb_input_buttons.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5479988633205590034" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TAzUoK9lyBI/AAAAAAAABXM/cITPE6Y31Wk/s400/logic_tb_input_buttons.png" style="cursor: pointer; height: 41px; width: 346px;" /></a>
</div>
then select your function from the Function Select combi (only choose one at a time!).
<div style="text-align: center;"><a href="http://1.bp.blogspot.com/_gBThNkc2AZA/TAzUoZtdfoI/AAAAAAAABXU/Z2H6jPZNl94/s1600/function_select.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5479988637164469890" src="http://1.bp.blogspot.com/_gBThNkc2AZA/TAzUoZtdfoI/AAAAAAAABXU/Z2H6jPZNl94/s400/function_select.png" style="cursor: pointer; height: 98px; width: 349px;" /></a>
</div>
You should see the result in the Outputs combi. Some devices incorporate multiple gates, and are named as such - e.g. AND2. In this case, inputs A & B correspond to output W, and C &D correspond to output Y. For the NOT4 device, A corresponds to W, B to X, C to Y and D to Z.
<div style="text-align: center;"><a href="http://3.bp.blogspot.com/_gBThNkc2AZA/TAzVF9sBMXI/AAAAAAAABXc/FzBjP24f0LY/s1600/logic_outputs.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5479989145038303602" src="http://3.bp.blogspot.com/_gBThNkc2AZA/TAzVF9sBMXI/AAAAAAAABXc/FzBjP24f0LY/s400/logic_outputs.png" style="cursor: pointer; height: 221px; width: 210px;" /></a>
</div>
You should be able to verify these basic logic operations pretty easily with this testbench.
The flipflop (FF) is a much more interesting device, and is the fundamental building block for synchronous logic. I won't go into the details of an ideal D-type flipflop, but one characteristic that is crucial is that the output only changes on the rising clock edge (i.e. when the clock transitions from low to high, in this case).
<div style="text-align: center;"><a href="http://2.bp.blogspot.com/_gBThNkc2AZA/TAzR_Wb2NDI/AAAAAAAABWs/xNrps_ZIdAg/s1600/flipflop-0.0.1.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5479985732887393330" src="http://2.bp.blogspot.com/_gBThNkc2AZA/TAzR_Wb2NDI/AAAAAAAABWs/xNrps_ZIdAg/s400/flipflop-0.0.1.png" style="cursor: pointer; height: 329px; width: 400px;" /></a>
</div>
This<span style="font-weight: bold;"> </span><a href="https://www.dropbox.com/s/wjwskx7tt0luxah/bipolar%20flipflop-0.0.2.rns?dl=0">testbench </a>shows a single flipflop in operation. The clock is running at about 1 Hz and you can hear and see this in the Monitor combi. You can change the clock rate with knob 1 on the Inputs combi. You'll also see four buttons:
<div style="text-align: center;"><a href="http://2.bp.blogspot.com/_gBThNkc2AZA/TAzRs5k8CII/AAAAAAAABWc/0eJTgDGN624/s1600/ff-inputs.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5479985415903250562" src="http://2.bp.blogspot.com/_gBThNkc2AZA/TAzRs5k8CII/AAAAAAAABWc/0eJTgDGN624/s400/ff-inputs.png" style="cursor: pointer; height: 100px; width: 348px;" /></a>
</div><ol><li>reset - used to set the FF into a known state - set the button for at least one clock cycle, then unset it. It is a synchronous reset.
</li><li>data - the input signal that the FF will sample on the rising clock edge and hold.</li><li>enable - used to turn the clock on or off. This version of the clock generator does not implement this correctly.
</li><li>beep - simply for audio feedback, turn it off if you prefer.
</li></ol><div style="text-align: center;">
</div>Below, the MONITOR combi shows four button-lights. The "FF Output" is the critical signal, and it should change to whatever "data" is set to, but only when the clock goes from low to high (i.e. just as the CLOCK button lights up).
<div style="text-align: center;"><a href="http://2.bp.blogspot.com/_gBThNkc2AZA/TAzRtaXKQGI/AAAAAAAABWk/BFAsefK-e44/s1600/ff-outputs.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5479985424703832162" src="http://2.bp.blogspot.com/_gBThNkc2AZA/TAzRtaXKQGI/AAAAAAAABWk/BFAsefK-e44/s400/ff-outputs.png" style="cursor: pointer; height: 254px; width: 201px;" /></a>
</div>
The FF has 3 inputs on the back panel:
<ol><li>ROTARY 1: incoming data that will be sampled and held on the rising clock edge.
</li><li>CV In1: the clock signal - a bipolar CV signal in the shape of a square wave.
</li><li>CV In2: the reset signal - active high, synchronous, sets the FF output to low.
</li></ol>The FF has several outputs:
<ol><li>CV Out1: the sampled and held output.
</li><li>CV Out3: simply a pass-through for the clock for chaining FFs together.
</li><li>CV Out4: simply a pass-through for the reset for chaining FFs together.
</li><li>Audio Out4: this is for an optional 'beep' sound that helps debug the FF operation. You can leave this disconnected.</li></ol><div style="text-align: center;"><a href="http://3.bp.blogspot.com/_gBThNkc2AZA/TAzZufzj55I/AAAAAAAABXk/9RaOhedi-AM/s1600/ff_outputs_back.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5479994239438022546" src="http://3.bp.blogspot.com/_gBThNkc2AZA/TAzZufzj55I/AAAAAAAABXk/9RaOhedi-AM/s400/ff_outputs_back.png" style="cursor: pointer; height: 142px; width: 400px;" /></a>
</div><span style="font-style: italic;">Correction - pass-through outputs are CV Out3 and CV Out4 (not 2 & 3) for clock and reset respectively. The diagram above is incorrect.</span>
NOTE: when you save a Thor patch, it does not save any rear-panel cables. For the FF to operate correctly, you <span style="font-weight: bold;">must</span> connect AUDIO OUTPUT 1 to AUDIO INPUT 1 with a single cable.
<div style="text-align: center;"><a href="http://3.bp.blogspot.com/_gBThNkc2AZA/TAzRsYNDMuI/AAAAAAAABWU/BJrrhl7wpeQ/s1600/ff-audio-connection.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5479985406944686818" src="http://3.bp.blogspot.com/_gBThNkc2AZA/TAzRsYNDMuI/AAAAAAAABWU/BJrrhl7wpeQ/s400/ff-audio-connection.png" style="cursor: pointer; height: 193px; width: 310px;" /></a>
</div>
This FF works by using a little trick to store state information. The incoming data value is used to set the <span style="font-weight: bold;">transpose</span> level of the Step Sequencer. However Thor will only remember this value when the Step Sequencer is triggered by the clock incoming on CV In1 going high. If we stopped here, there would be a problem. The FF output must only change when the clock edge rises, so it must not be transparent to changes on the data input when the clock is high. I forget exactly how I solved this, but I end up converted the stored value (transposed note value) into an audio signal, passing it out of the Thor via a very small delay, taking it straight back in again and converting it to an output CV value. This also creates a very short propagation delay that prevents the FF output from changing simultaneously with the clock edge - if it did, then downstream FFs would see their input value change too soon and that would be bad as it would make all FFs transparent on the clock edge.
Then I simply took the FF and combinational devices and connected them to create 4-bit counter combinators.
<div style="text-align: center;"><a href="http://4.bp.blogspot.com/_gBThNkc2AZA/TAzRrT8I81I/AAAAAAAABWE/RD1Gbkkndd0/s1600/4-bit+counter.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5479985388620149586" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TAzRrT8I81I/AAAAAAAABWE/RD1Gbkkndd0/s400/4-bit+counter.png" style="cursor: pointer; height: 400px; width: 349px;" /></a>
</div>
By chaining four of these in series, via the carry bit, I created a 16-bit counter. I had to add a FF in-between 4-bit counter to buffer the signal and ensure the first FF in the next 4-bit counter would sample accurately - probably an issue with the way Reason handles CV internally in large networks. This does add extra clock cycles unfortunately, but there may be a cleaner way to buffer between these counters.
The BV512 vocoder display is used to display the 16-bit value - you can see the least-significant-bit on the far right, and the most-significant-bit on the far left. It takes some time to reach its maximum value before rolling back over to zero.
<div style="text-align: center;"><a href="http://2.bp.blogspot.com/_gBThNkc2AZA/TAzSAsiBPRI/AAAAAAAABXE/KG2YTRKI8So/s1600/vocoder-display.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5479985755998731538" src="http://2.bp.blogspot.com/_gBThNkc2AZA/TAzSAsiBPRI/AAAAAAAABXE/KG2YTRKI8So/s400/vocoder-display.png" style="cursor: pointer; height: 74px; width: 400px;" /></a>
</div>
This was a very interesting little project and I was immensely satisfied to create a functioning 16-bit counter. Unfortunately other things came up and I lacked the time or energy to take this further, but I envisioned the following projects using these components:
<ol><li>a simple finite state machine that can change CV values in response to events - essentially a way for things to change over time in a programmatic way. One example might be a CV signal that changes after a number of events have occurred.</li><li>a multiplexer design that allows the selection of multiple incoming CV signals so that only one (or a set of several for multi-input muxes) passes through at a time. This would allow programmatic selection of various control signals in real-time.</li><li>hundreds of other little ideas spinning around inside my head.
</li></ol>
I also learned a valuable lesson - in future, when creating many, many different devices with different functions, <span style="font-weight: bold;">keep a log!</span> That way you know what these things all are when you look at them again six months later. Sigh.<span style="font-weight: bold;">
</span>One final note. It is known by some that if you have a <a href="http://en.wikipedia.org/wiki/NAND_gate">NAND</a> gate (negated-and), you can implement any combinational logic function with just NAND gates. I've provided a NOT and an AND gate; the NAND should be trivial. Good luck!<span style="font-weight: bold;"><span style="font-weight: bold;">
</span></span>RNS files in this post:<span style="font-weight: bold;"><span style="font-weight: bold;">
</span></span><ul><li><a href="https://www.dropbox.com/s/vaebwh48w3igvfm/bipolar%2016-bit%20counter-0.0.5.rns?dl=0">16-bit digital counter</a></li><li><a href="https://www.dropbox.com/s/y5gd2qx7z9qnklv/bipolar-logic-gates-0.0.2.rns?dl=0">Logic gates testbench</a>
</li><li><a href="https://www.dropbox.com/s/wjwskx7tt0luxah/bipolar%20flipflop-0.0.2.rns?dl=0">Flipflop testbench</a></li><li><a href="https://www.dropbox.com/s/42805wxkwuib8lg/unipolar-logic-gates-0.0.5.rns?dl=0">Unipolar logic gates testbench</a>
</li></ul>You can pull the device patches directly from those files - I do not plan to publish individual patches separately.
<span>One last comment - although my demonstrations use Thor buttons in a combi for visual feedback, this is for illustrative purposes only. It's important that the "digital" CV signals sit on the rails - i.e. -64 and +63, or whatever the equivalent scaling is. The Thor buttons in a combi are only <span style="font-style: italic;">on </span>when the signal is at the top rail, but <span style="font-style: italic;">off </span>for all other values. To properly debug any use of these devices, I recommend using the <a href="http://offwhitenoise.blogspot.com/2009/04/update-cv-monitor-tool.html">CV Monitor</a> instead of "Thor buttons", and ensuring that the relevant Delay display is either "1" or "2000" and nothing in-between, otherwise these errors will propagate and eventually cause problems.</span><span style="font-weight: bold;">
</span><div style="color: #660000; text-align: center;"><span style="font-size: 78%;"><span style="font-style: italic;">The examples in this article require Reason 4 or newer.</span></span>
</div>meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com10tag:blogger.com,1999:blog-8070825255100764146.post-605214613971702652010-06-07T18:31:00.007+12:002010-06-08T10:15:28.366+12:00My Take on the Glitch DeviceThere have been a lot of fantastic <a href="http://www.peff.com/journal/2010/03/02/cycleon-combinator-refill/">beat-repeating</a>, <a href="http://www.reason101.net/patches/effects-patches/auto-glitcher-effect/">loop-mangling</a> <a href="http://www.reason101.net/101-creative-reason-projects/13-glitch-boxes/">glitchy </a>effects devices around lately. I thought I'd design my own device, with a few special features of course :)<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gBThNkc2AZA/TA1s-BGoTzI/AAAAAAAABX0/XvoNlbuBL_U/s1600/combi.png"><img style="cursor: pointer; width: 400px; height: 74px;" src="http://4.bp.blogspot.com/_gBThNkc2AZA/TA1s-BGoTzI/AAAAAAAABX0/XvoNlbuBL_U/s400/combi.png" alt="" id="BLOGGER_PHOTO_ID_5480156134283693874" border="0" /></a><br /></div><br />I don't have a clever name, so I just called mine the <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/glitcher/Glitcher%200.0.5.cmb">Glitcher</a>. Like most of the other devices, mine uses dynamic delays to create the sonic effects, and a bunch of CV routing to tie it all together.<br /><br /><audio src="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/glitcher/Glitcher%200.0.5.ogg" controls autobuffer></audio><br />Link: <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/glitcher/Glitcher%200.0.5.ogg">Glitcher 0.0.5.ogg</a><br /><br />I'm not going to give an explanation of how it works, but I will outline the main interface and features.<br /><br />Interface:<br /><ul><li>you connect this device like a standard effects combinator - sound goes in, sound comes out.</li><li>hit a MIDI note to trigger the effect. The actual note or velocity has no effect at this time.<br /></li><li>use the Mod Wheel to dynamically change the effect when triggered by altering the delay.<br /></li><li>use the Pitch Wheel to split the effect between left and right channels, for stereo fun!<br /></li><li>obviously you can use a piano-roll track to control the effect in the sequencer by recording these inputs.<br /></li></ul><ul><li>knob 1 - "Dry/Wet" should generally be left alone. This is driven by the combi itself to sample the input signal and begin the looping.</li><li>knob 2 - reserved, currently does nothing.<br /></li><li>knob 3 and 4: L & R "Delay Offset" - these are used to control the internal delays and should generally be left alone.</li><li>button 1 - "ModW / Internal" - switches between control of the delay by Mod Wheel (off), or internal control by the "Delay Matrix" (on).</li><li>button 2 - "steps/ms" - switches between delay increments in steps (off) and milliseconds (on).</li><li>button 3 - "Fine / Coarse" - switches between fine delay control (off) or coarse delay control (on).</li><li>button 4 - "DelayMatrix / LFO" - switches the internal source of the delay signal between the internal "Delay Matrix" or the Malstrom's LFO A.<br /></li></ul>So what can you do with this device? Well, <a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/glitcher/Glitcher%200.0.5.rns">this RNS demo</a> provides an example of the Glitcher messing around with four different Rex loops. The automation switches between different modes of operation and the effect is pretty clear.<br /><br />A few things to note about this device:<br /><ul><li>generally, you can simply hit keys on the keyboard and twiddle the Mod Wheel to get some cool effects.</li><li>the pitch wheel is set up to split the delay unevenly between the left and right channels, creating some interesting stereo effects - try it with the Mod Wheel!<br /></li><li>the "Fine / Coarse" switch can be used to choose between a quite regular and controllable effect (fine) and a more chaotic and unpredictable one (coarse). I find the fine mode to be easier to control in real-time.<br /></li><li>if you engage "Internal" mode (button 1), the effect gating is now controlled by the "Gate Matrix" - use curve values of non-zero to trigger the effect. You can change the number of steps and resolution to make things more interesting.</li><li>when "Internal" mode is engaged, the delay modulation is governed by the "DelayMatrix/LFO" mode - either the "Delay Matrix" controls the delay modulation, or the Malstrom's LFO can be used instead. The LFO has been biased to operate over the same range as the Mod Wheel. Try different LFO patterns for some cool sounds.<br /></li><li>The arpeggiator labeled "Gate Control" is used to control rhythmic gating effects when using keyboard control - simply modify the pattern (i.e. click pattern steps on/off, or automate the Pattern Value) and hold down a key.</li><li>The Thor instance is purely for CV calculations, and uses a global envelope to smooth out the gate edges a bit, avoiding some of the nasty brick-wall clicks you get with other glitchers.</li></ul>Thanks to Peff for the <a href="http://www.peff.com/journal/2006/01/14/equal-power-crossfader/">Equal Power Crossfader</a> that I made good use of in the demonstration file.<br /><br />Current version is 0.0.5:<br /><ul><li><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/glitcher/Glitcher%200.0.5.cmb">Combinator Patch</a></li><li><a href="http://dl.dropbox.com/u/360506/blogs/offwhitenoise/glitcher/Glitcher%200.0.5.rns">RNS demo</a></li></ul>Have fun!meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com0tag:blogger.com,1999:blog-8070825255100764146.post-21238712856047118122009-09-15T23:05:00.001+12:002009-09-15T23:07:59.420+12:00OffSiteNoise - inudgeJust a neat little <a href="http://www.inudge.net/index.en.html">musical toy</a> to play with :)meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com1tag:blogger.com,1999:blog-8070825255100764146.post-90543665817514114932009-07-21T21:32:00.004+12:002009-07-21T21:47:54.022+12:00OffSiteNoise - Resonant Filter<a href="http://www.blogger.com/profile/05805472577735146808">L.72</a> just posted an interesting <a href="http://resonantfilter.blogspot.com/2009/07/cv-delay-combi.html">device</a> on the Propellerhead User forums - <blockquote>"a CV Delay combi geared towards drums and is a new take on dub with a bit of glitch thrown in for good measure."</blockquote>This led me to his new blog at:<br /><br /><a href="http://resonantfilter.blogspot.com/">http://resonantfilter.blogspot.com</a><br /><br />This blog has only been in existence for a month but already has over 20 posts - all well written and thoughtful. There's a good variety of technical and artistic articles covering subjects like <a href="http://resonantfilter.blogspot.com/search/label/Reason">Reason</a>, <a href="http://resonantfilter.blogspot.com/2009/07/record.html">Record</a>, <a href="http://resonantfilter.blogspot.com/2009/07/oddulator.html">real hardware</a>, <a href="http://resonantfilter.blogspot.com/2009/07/art-history.html">musical opinion</a> and a few other <a href="http://resonantfilter.blogspot.com/2009/07/reason-patch-day.html">bits and pieces</a>. There's a good assortment of interesting pictures and linked videos too. If the current posting rate continues, the site will be a very interesting place to regularly visit if you're interested in a broad range of musical technology and techniques.meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com2tag:blogger.com,1999:blog-8070825255100764146.post-43176713662229830822009-05-14T16:36:00.008+12:002009-05-14T18:14:22.350+12:00Shultz's Triple-X FaderLast month on the Propellerhead Users Forum, Shultz (aka <a href="http://www.myspace.com/enotednb">E-Note</a>) posted an <a href="http://www.propellerheads.se/forum/showpost.php?p=617404&postcount=10">innovative device</a> that allows a crossfade between four different audio sources. Essentially, as the mod-wheel is moved through its range, the output audio fades between each adjacent input. I would like to try to explain how this device works for the benefit of everyone else.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gBThNkc2AZA/Sgu1J4JL0bI/AAAAAAAAAx4/lZG7mcWrXeM/s1600-h/triple-x+fader.png"><img style="cursor: pointer; width: 400px; height: 287px;" src="http://4.bp.blogspot.com/_gBThNkc2AZA/Sgu1J4JL0bI/AAAAAAAAAx4/lZG7mcWrXeM/s400/triple-x+fader.png" alt="" id="BLOGGER_PHOTO_ID_5335557364844843442" border="0" /></a><br />Figure 1 - Shultz's Triple-X Fader<br /></div><br />The key behind this amazing device is Shultz's clever use of the Thor Shaper. According to the Reason manual, the shaper distorts incoming audio in various ways, and also suggests a certain random element for some algorithms. One of the shaping algorithms is the Rectify function. This is a very simple function that resembles a diode or 'absolute value' function - the output signal follows the input, except when the input is below zero. In this situation, the output signal is inverted. This means it never falls below zero. Figure 2 shows this relationship.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gBThNkc2AZA/Sgu1AZ73UdI/AAAAAAAAAxo/VwLftfX7Uj8/s1600-h/rectify.png"><img style="cursor: pointer; width: 400px; height: 291px;" src="http://2.bp.blogspot.com/_gBThNkc2AZA/Sgu1AZ73UdI/AAAAAAAAAxo/VwLftfX7Uj8/s400/rectify.png" alt="" id="BLOGGER_PHOTO_ID_5335557202117087698" border="0" /></a><br />Figure 2 - rectification function<br /></div><br />The fading is performed by the Level CV inputs on the back of the Mixer. Each of four channels are driven by a CV signal that consists of a single peak. Each peak is distributed evenly across the mod-wheel domain, so that each channel will be at minimum attenuation (i.e. maximum volume) at a distinct point of the mod-wheel. When one channel is at maximum volume, the other three will be somewhere below.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gBThNkc2AZA/Sgu1AcJQhkI/AAAAAAAAAxw/jIeeXAQK5z8/s1600-h/thor.png"><img style="cursor: pointer; width: 400px; height: 339px;" src="http://3.bp.blogspot.com/_gBThNkc2AZA/Sgu1AcJQhkI/AAAAAAAAAxw/jIeeXAQK5z8/s400/thor.png" alt="" id="BLOGGER_PHOTO_ID_5335557202710136386" border="0" /></a><br />Figure 3 - Thor programming<br /></div><br />The Triple-X Fader consists of two Thor devices, each handling one half of the mod-wheel range. Each Thor performs almost the same function except that different DC signals are combined with the shaper input signal to offset the domain to either the upper or lower half.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gBThNkc2AZA/Sgu1AK_SZ1I/AAAAAAAAAxY/p08xnY2zP28/s1600-h/plot1.png"><img style="cursor: pointer; width: 400px; height: 268px;" src="http://4.bp.blogspot.com/_gBThNkc2AZA/Sgu1AK_SZ1I/AAAAAAAAAxY/p08xnY2zP28/s400/plot1.png" alt="" id="BLOGGER_PHOTO_ID_5335557198104913746" border="0" /></a><br />Figure 4 - first peak<br /></div><br />Figure 4 shows how the first peak is created. On Thor1, CV Out1 is a direct inversion of the mod-wheel added to a constant DC level. This results in a signal that starts at 41 with the mod-wheel input at zero, and falls linearly as the input increases. It crosses zero at an input value of 41. This results in mixer channel 1 at maximum amplitude when the mod-wheel is at zero, and falls away to silence as the mod-wheel increases.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gBThNkc2AZA/Sgu1ABLvAYI/AAAAAAAAAxg/ano3Ot0zADk/s1600-h/plot2.png"><img style="cursor: pointer; width: 400px; height: 291px;" src="http://1.bp.blogspot.com/_gBThNkc2AZA/Sgu1ABLvAYI/AAAAAAAAAxg/ano3Ot0zADk/s400/plot2.png" alt="" id="BLOGGER_PHOTO_ID_5335557195472765314" border="0" /></a><br />Figure 5 - second peak<br /></div><br />Figure 5 shows how the second peak is created. In this case, the mod-wheel input is inverted and fed into the shaper via Filter1. Note that the Thor sequencer is set to run constantly, which keeps a voice "open" and therefore holds the filter & shaper open. A positive DC offset is also added so that the signal into the shaper starts at 41 when the input is zero. This signal also falls to zero as the input increases to 41 and proceeds to go negative for greater values (black line). The shaper rectifies this signal (makes it positive, if negative), so that for input above 41, the signal now increases away from zero (<span style="color: rgb(51, 51, 255);">blue line</span>). The return signal is then inverted (turned upside-down) and a positive DC offset is added to raise the peak (<span style="color: rgb(255, 0, 0);">red line</span>) up to the same level (41) as the first peak. Clever huh?<br /><br />The other two peaks are created in the same manner by the second Thor device. However the DC offsets used are different, which positions the peaks in the top half of the input domain. Also, the last peak is an increasing function of the input signal - it increases as the mod-wheel increases.<br /><br />Each peak signal drives a separate mixer channel, but figure 6 might help you understand how they fit together.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gBThNkc2AZA/Sgu0_7JtMkI/AAAAAAAAAxQ/lbMCoevKv_E/s1600-h/combined.png"><img style="cursor: pointer; width: 400px; height: 281px;" src="http://2.bp.blogspot.com/_gBThNkc2AZA/Sgu0_7JtMkI/AAAAAAAAAxQ/lbMCoevKv_E/s400/combined.png" alt="" id="BLOGGER_PHOTO_ID_5335557193853645378" border="0" /></a><br />Figure 6 - combined mixer control signals<br /></div><br />One major shortfall of Reason is the lack of CV computation. It is very difficult to create even basic CV functions. Thor provides a way to implement addition and subtraction, and now it also provides an absolute value function. Shultz has demonstrated a very clever use of this in his 4-channel fader.<br /><br />He has kindly granted me permission to provide a link to his <a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/Triple-X-Fader_analysis/Triple-X-Fader.rns">Triple-X Fader</a> here.meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com3tag:blogger.com,1999:blog-8070825255100764146.post-88480671235403764002009-05-14T15:51:00.003+12:002009-05-14T16:01:30.350+12:00Update - Noise GateA quick and minor update to my <a href="http://offwhitenoise.blogspot.com/2009/02/designing-noise-gate-in-propellerheads.html">Noise Gate</a>.<br /><br />I've added a Side Channel Monitor button, that allows you to switch off the main audio input and listen directly to the Side Channel input. This may be useful for setting the level of your gate triggering signal.<br /><br />Version 11:<br /><a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/noise_gate_tutorial/meowsqueak%20-%20Noise%20Gate%20v11.cmb">The updated Combi patch is here.</a><br /><a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/noise_gate_tutorial/meowsqueak%20-%20Noise%20Gate%20v11%20Calibrate.rns">The updated Calibration RNS file is here.</a>meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com1tag:blogger.com,1999:blog-8070825255100764146.post-57734973550907194602009-04-27T17:51:00.005+12:002009-05-14T16:04:20.798+12:00Update - CV Monitor ToolA quick update to the <a href="http://offwhitenoise.blogspot.com/2009/03/cv-monitor-tool.html">CV Monitor Tool</a>.<br /><br /><span style="font-weight: bold;">presiato </span>posted an improvement that allows the four Rotary inputs to be used for bipolar CV signals, rather than the unpleasant truncation that occurred in version 0.0.3.<br /><br />His original post is <a href="http://www.propellerheads.se/forum/showpost.php?p=613539&postcount=2">here</a> (if you have access to the forum). Many thanks for the improvement!<br /><br />I have posted the improved CV Monitor Combi patch here:<br /><br /><a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/cv_monitor/meowsqueak%20-%20CV%20Monitor-0.0.4.cmb">CV Monitor Tool 0.0.4</a><br /><br />Note that the display range is set from 1 to 2000 - this is because a direct mapping between a bipolar CV value and the DDL numeric display does not seem possible. You can get pretty close, but it's often out by 1 or 2. To ensure that this inaccuracy does not confuse anyone, I deliberately extended the range to approximately 1000 in either direction. Feel free to consider this +/- 100.0% if you like. Note that the mid-point is now 992 (for a CV value of zero). I realise this isn't ideal, but it's due to inaccuracies generated by rounding within Reason.<br /><br />If you can improve it, please let me know!meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com1tag:blogger.com,1999:blog-8070825255100764146.post-15475440905210995622009-04-23T12:48:00.008+12:002009-04-23T13:20:20.955+12:00OffSiteNoise - Peff's Scream4 WaveformsOne of the things I want to do with this blog is direct readers towards interesting articles written by other people. I will call these <a href="http://offwhitenoise.blogspot.com/search/label/OffSiteNoise"><span style="font-weight: bold;">OffSiteNoise</span></a> posts. They will probably be Reason-related, although some may cover more general topics like music theory or audio synthesis theory.<br /><br />So here's the first <span style="font-weight: bold;">OffSiteNoise</span> post!<br /><br />Following my previous post about the <a href="http://offwhitenoise.blogspot.com/2009/04/scream4-tape-algorithm-phase-inversion.html">Scream4 tape phase inversion</a>, I wish to highlight the observations reported by Peff for the other Scream4 distortion algorithms. You can read all about it with pretty pictures of mangled saw-teeth <a href="http://www.peff.com/journal/2009/04/22/scream-4-waveforms/">right here</a>.meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com0tag:blogger.com,1999:blog-8070825255100764146.post-105889872638114452009-04-23T11:52:00.008+12:002009-04-23T13:20:50.313+12:00Scream4 Tape Algorithm - Phase InversionPeff points out <a href="http://www.peff.com/journal/2009/04/22/phase-aligned-tape-comp-combinator/">here </a>that the Scream4 'tape' algorithm has an effect of inverting the output waveform at lower frequencies. This can have the effect of canceling with the original signal if mixed back (e.g. as a Send Effect). He posts a couple of solutions and a good example that illustrates this "feature".<br /><br />I have seen many examples where the tape algorithm is used on drums - this is definitely something to keep in mind if you're not using it purely as an insert.<br /><br />I did my own test with an Oscilloscope application, listening on my sound-card's "stereo mix" or "What U Hear" channel, and as you can see in Figure 1, mixing the 'taped' signal with the original (blue) cancels out a huge part of the original signal (red). Only the higher frequencies remain.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gBThNkc2AZA/Se-4mIyxPsI/AAAAAAAAAxI/mLd1_-nxtPk/s1600-h/tape+cancel.png"><img style="cursor: pointer; width: 400px; height: 354px;" src="http://3.bp.blogspot.com/_gBThNkc2AZA/Se-4mIyxPsI/AAAAAAAAAxI/mLd1_-nxtPk/s400/tape+cancel.png" alt="" id="BLOGGER_PHOTO_ID_5327679849537552066" border="0" /></a><br />Figure 1<br /></div><br />My test RNS file is <a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/tape_phase_inversion/meowsqueak%20-%20Tape%20Inversion-0.0.1.rns">here</a>.meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com0tag:blogger.com,1999:blog-8070825255100764146.post-80717770387928026132009-04-02T13:28:00.004+13:002009-04-23T13:05:02.942+12:00Blog Review: boddicker.orgToday I came across <a href="http://boddicker.org/">boddicker.org</a>, via a new <a href="http://www.reasontutorials.net/2009/04/side-chain-compression-reason-tutorial/">Side-Chain Compression</a> tutorial posted on <a href="http://www.reasontutorials.net/">ReasonTutorials</a>.<br /><br />boddicker.org is dj.boddicker's site. I don't know any more about this person than what is there, but what really struck me is the <a href="http://boddicker.org/?q=taxonomy/term/2">small but notable</a> collection of Reason-related posts.<br /><br />These devices are great. There's the side-chain compression tutorial I mentioned earlier as well as:<br /><ul><li><a href="http://boddicker.org/?q=node/13">a nifty resonator device</a></li><li><a href="http://boddicker.org/?q=node/11">an awesome glitch/loop device</a></li><li><a href="http://boddicker.org/?q=node/8">some great sounding bass patches</a></li><li>and more</li></ul>The RNS files are provided, as well as demo music files, so have a listen!<br /><br />What impresses me is how simple in concept these devices are, yet so elegantly constructed. Even better, the examples provided are top-notch and illustrate the devices perfectly.<br /><br />There is also a small collection of <a href="http://boddicker.org/?q=taxonomy/term/9">high-quality tutorials</a>, not all related to Reason, that are very interesting and well written. In particular, <a href="http://boddicker.org/?q=node/15">"how to make drums sound bigger"</a> answers many questions that confound the search for good rhythms.<br /><br />Great site dj.boddicker - looking forward to trying out your future creations!meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com1tag:blogger.com,1999:blog-8070825255100764146.post-48174571156560693262009-03-24T13:21:00.022+13:002009-04-23T13:08:00.659+12:00Dual Edge CV GateAllow me to introduce a rather unusual device. I'm not sure if a proper name exists for this, but I have decided to call it a "Dual Edge CV Gate".<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gBThNkc2AZA/Scgn3COD_9I/AAAAAAAAAvA/V-Da51aM57Q/s1600-h/CV+Dual+Edge+Gate.png"><img style="cursor: pointer; width: 400px; height: 235px;" src="http://2.bp.blogspot.com/_gBThNkc2AZA/Scgn3COD_9I/AAAAAAAAAvA/V-Da51aM57Q/s400/CV+Dual+Edge+Gate.png" alt="" id="BLOGGER_PHOTO_ID_5316543186553012178" border="0" /></a><br />Figure1</div><br /><a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/dual_edge_cv_gate_tutorial/meowsqueak%20-%20Dual%20Edge%20CV%20Gate-0.0.1.rns">RNS File</a><br /><div style="text-align: left;"><a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/dual_edge_cv_gate_tutorial/meowsqueak%20-%20Dual%20Edge%20CV%20Gate-0.0.1.cmb">Combinator Patch</a><a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/dual_edge_cv_gate_tutorial/meowsqueak%20-%20Dual%20Edge%20CV%20Gate-0.0.1.cmb"><br /></a></div><br />Actually it's not really a gate - it's more like a switch. The device is designed to switch on or off depending on the input CV signal. When the switch is on, it will output a high CV signal (127); when off it will output a low CV signal (0) . There are two thresholds - lower and upper, such that if the input signal is between these thresholds, then the switch is on. If it is below the lower threshold, or above the upper threshold, then the switch is off. Figure 2 illustrates this relationship.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gBThNkc2AZA/ScgoLGQHpiI/AAAAAAAAAvg/l352Ftqz6i8/s1600-h/plot.png"><img style="cursor: pointer; width: 400px; height: 262px;" src="http://2.bp.blogspot.com/_gBThNkc2AZA/ScgoLGQHpiI/AAAAAAAAAvg/l352Ftqz6i8/s400/plot.png" alt="" id="BLOGGER_PHOTO_ID_5316543531232765474" border="0" /></a><br />Figure 2<br /></div><br />It would be fairly straightforward to extend this switch to control a gate which passes or inhibits the original input CV signal. This way you would get a 'piece' of the input CV signal for a particular domain, instead of a straight on/off value.<br /><br /><span style="font-weight: bold;">So how does it work?</span><br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gBThNkc2AZA/Scgn2ulq9AI/AAAAAAAAAu4/w1InJuMj248/s1600-h/combine.png"><img style="cursor: pointer; width: 400px; height: 262px;" src="http://3.bp.blogspot.com/_gBThNkc2AZA/Scgn2ulq9AI/AAAAAAAAAu4/w1InJuMj248/s400/combine.png" alt="" id="BLOGGER_PHOTO_ID_5316543181283324930" border="0" /></a><br />Figure 3<br /></div><br />Well, once again the Thor synthesiser is more than just an audio synth. Inside a Combinator and with some careful routing rules, Thor is able to implement two step functions. One of these step functions is flipped over. When combined with a logical "AND" operation, the result is a pulse, as illustrated by figure 3.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gBThNkc2AZA/Sck7UkzwZdI/AAAAAAAAAwA/5z_CWkNzbuw/s1600-h/new+wires.png"><img style="cursor: pointer; width: 400px; height: 333px;" src="http://2.bp.blogspot.com/_gBThNkc2AZA/Sck7UkzwZdI/AAAAAAAAAwA/5z_CWkNzbuw/s400/new+wires.png" alt="" id="BLOGGER_PHOTO_ID_5316846059751761362" border="0" /></a><br />Figure 4<br /></div><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gBThNkc2AZA/ScgoLj_dvvI/AAAAAAAAAvo/ZDoDZMRv45E/s1600-h/thor.png"><img style="cursor: pointer; width: 400px; height: 339px;" src="http://2.bp.blogspot.com/_gBThNkc2AZA/ScgoLj_dvvI/AAAAAAAAAvo/ZDoDZMRv45E/s400/thor.png" alt="" id="BLOGGER_PHOTO_ID_5316543539215974130" border="0" /></a><br /></div><div style="text-align: center;">Figure 5<br /></div><br />Figure 4 shows a simplified view of the cabling connections on the rear of the device and figure 5 shows the Thor configuration. The input CV signal is connected to the "CV Input" Spider CV Merger, which drives the Combi's Modulation Wheel input and in turn the Thor modulator wheel. Routing rules 1 to 4 combine this value (sum) with DC signals (via CV In1). However these DC values are scaled by the two Thor Rotaries, labelled "Lower Trigger" and "Upper Trigger". Combi knobs 1 & 2 adjust these rotaries, thereby allowing the user to adjust the DC level added to the Mod Wheel value. The output from these rules (CV Out1 & Out2) are connected to the Combi knobs 3 & 4. These are programmed to modulate the Thor Main Buttons. In a similar manner to my <a href="http://offwhitenoise.blogspot.com/2009/02/designing-noise-gate-in-propellerheads.html">Noise Gate</a>, these buttons only activate when the controlling knob reaches it's maximum value (127). Knob 3 activates Button 1 when the sum reaches 127, and knob 4 activates Button 2 when it reaches 0.<br /><br />This provides two configurable thresholds - upper and lower. The difference between them is that one will activate when the input signal is <span style="font-style: italic;">above the lower threshold</span>, the other activates when the signal is <span style="font-style: italic;">below the upper threshold</span>. You can see the Thor Button1 & Button2 lights activate when the respective thresholds are crossed. You can adjust the thresholds by setting Combi knobs 1 & 2. Typically, you would set knob 1 to be less than knob 2, otherwise the gate will never open.<br /><br />The long routing rule (CV In1 > CV Out3 / Button1 / Button2) implements an "AND" operation. CV In1 is a DC signal (value 127). This value is passed to CV Out3 when both buttons are on. If either or both are off, CV Out3 is driven to zero.<br /><br />There's a bit of logic to implement the "invert" function when Button1 on the Combi is selected.<br /><br />The CV outputs are taken from the "Gate Output" Spider Splitter. The SplitA output is the normal or inverted output, while the SplitB output is always the inverted output.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gBThNkc2AZA/SciqPoEv_DI/AAAAAAAAAvw/-q8BzmdMfh4/s1600-h/gate+open.png"><img style="cursor: pointer; width: 381px; height: 400px;" src="http://4.bp.blogspot.com/_gBThNkc2AZA/SciqPoEv_DI/AAAAAAAAAvw/-q8BzmdMfh4/s400/gate+open.png" alt="" id="BLOGGER_PHOTO_ID_5316686545542970418" border="0" /></a><br /></div><div style="text-align: center;">Figure 6<br /></div><br />Figure 6 shows the gate activating when the Modulator Wheel on the Combi is set within the two thresholds. Both Thor Buttons are lit. Note the two DDL Delays in the CV Monitor Combi - as the Modulator Wheel is moved, the gate will open or close and the DDL displays will indicate this. A value of 127 on the left DDL shows that the gate is open (i.e. the switch is on). The right DDL shows the inverted output (switch off).<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gBThNkc2AZA/Sciqtj9ZJnI/AAAAAAAAAv4/KkRhXgyp4kk/s1600-h/gate+closed+-+below.png"><img style="cursor: pointer; width: 381px; height: 400px;" src="http://2.bp.blogspot.com/_gBThNkc2AZA/Sciqtj9ZJnI/AAAAAAAAAv4/KkRhXgyp4kk/s400/gate+closed+-+below.png" alt="" id="BLOGGER_PHOTO_ID_5316687059834447474" border="0" /></a><br />Figure 7<br /></div><br />Figure 7 shows the input CV value set by the Modulator Wheel below the Lower Threshold. Only one Thor button is lit, because the input signal is below the Upper Threshold, and the gate is closed (switch is off). The left DDL shows zero. The right DDL shows the inverted output (switch on).<br /><br /><span style="font-weight: bold;">So what can this device be used for?</span><br /><br />That is actually a really good question!<br /><br />One idea is to use a CV input value from a Malström LFO. With several Dual Edge CV Gates, you could divide the LFO range into sections, where each section enables a particular instrument. In this example file, the LFO changes through several waveforms, having a distinct effect on the sound. Note that there is some overlap between each section, so that sometimes more than one SubTractor is audible at a time. It's a bit cheesy, but it works.<br /><br /><a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/dual_edge_cv_gate_tutorial/meowsqueak%20-%20Dual%20Edge%20CV%20Gate%20Example%201.rns">Example 1 RNS</a><br /><a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/dual_edge_cv_gate_tutorial/meowsqueak%20-%20Dual%20Edge%20CV%20Gate%20Example%201.ogg">Example 1 OggVorbis</a><br /><br />Another use may be to select different instruments or effects depending on the velocity of a MIDI note, or to select different effects or signal paths in response to the amplitude envelope of another audio source such a drum loop.<br /><br /><a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/dual_edge_cv_gate_tutorial/meowsqueak%20-%20Dual%20Edge%20CV%20Gate%20Example%202.rns">Example 2 RNS</a><br /><a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/dual_edge_cv_gate_tutorial/meowsqueak%20-%20Dual%20Edge%20CV%20Gate%20Example%202.ogg">Example 2 OggVorbis</a><br /><br />This device is really a solution looking for a problem - a building block towards larger, more complex configurations. So if you have any good ideas for creative uses of this device, I'd really love to hear about them.meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com2tag:blogger.com,1999:blog-8070825255100764146.post-55174261918257685482009-03-06T10:54:00.015+13:002009-04-23T13:05:40.417+12:00CV Monitor ToolIn the course of developing my <a href="http://offwhitenoise.blogspot.com/2009/02/designing-noise-gate-in-propellerheads.html">Noise Gate</a>, I found it very useful to visualise CV signals in real time. In fact, it surprises me that there isn't a built-in way to do this. So I thought I'd share my very simple "CV Monitor" combinator.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gBThNkc2AZA/SbBMe5IIfdI/AAAAAAAAAtY/eDQy8UQ-v-o/s1600-h/cv_monitor.png"><img style="cursor: pointer; width: 400px; height: 239px;" src="http://2.bp.blogspot.com/_gBThNkc2AZA/SbBMe5IIfdI/AAAAAAAAAtY/eDQy8UQ-v-o/s400/cv_monitor.png" alt="" id="BLOGGER_PHOTO_ID_5309828054284533202" border="0" /></a><br />Figure 1 - The CV Monitor<br /></div><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gBThNkc2AZA/SbBRAtVWp8I/AAAAAAAAAto/DnMIqiOMxI8/s1600-h/cv_monitor_rear_indicated.png"><img style="cursor: pointer; width: 400px; height: 239px;" src="http://3.bp.blogspot.com/_gBThNkc2AZA/SbBRAtVWp8I/AAAAAAAAAto/DnMIqiOMxI8/s400/cv_monitor_rear_indicated.png" alt="" id="BLOGGER_PHOTO_ID_5309833033280825282" border="0" /></a><br />Figure 2 - Connect CV signals to indicated ports<br /></div><br />It's a very straightforward device to use - simply connect any CV signal you're interested in to one of the ports on the back of the Combi, as figure 3 demonstrates with the SubTractor's LFO output.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gBThNkc2AZA/SbBRAd4mCjI/AAAAAAAAAtg/KrhyXRFT2b4/s1600-h/cv_example.png"><img style="cursor: pointer; width: 400px; height: 393px;" src="http://2.bp.blogspot.com/_gBThNkc2AZA/SbBRAd4mCjI/AAAAAAAAAtg/KrhyXRFT2b4/s400/cv_example.png" alt="" id="BLOGGER_PHOTO_ID_5309833029133666866" border="0" /></a><br />Figure 3 - SubTractor LFO connected to Pitch Bend CV input<br /></div><br />Turn the rack around and you'll see one or more of the DDL digital displays changing in real time according to the incoming CV signal. Because the DDL delay starts at one, not zero, I have centred the displays at 1000. So just ignore the leading 1 and read the CV value directly.<br /><br />Note that the rotary and modulator monitors are restricted to unipolar CV signals from 0 to 127. If you want to view a bipolar signal (such as the sinewave from the Malström LFOs) then you'll want to connect this to the Pitch Bend input. This will display the CV signal from 1 to 2000 for full-range deflection of the Pitch Bend wheel.<br /><br />This hints at something to be aware of. Reason seems to do CV scaling where necessary, so thinking in terms of absolute CV values can be dangerous at times. For example, if you connect the SubTractor triangle-wave LFO to the Pitch Bend input, you'll see full deflection of the Pitch Bend and therefore the DDL will display a signal oscillating between 1 to 2000. But if you connect the same signal to, say, Rotary 1, then two things happen:<br /><ol><li>the signal is truncated for negative values, so the DDL will show 1000 for those parts of the LFO waveform.</li><li>the signal is scaled so that the maximum CV value maps to the full range of the control being modulated, in this case 127.</li></ol>So what is the actual CV value? Does it actually matter? It looks like the effect of the CV signal depends on what you connect it to. This is actually quite useful because it means if the CV generator is oscillating full-range, then whatever you connect it to will also oscillate full range, regardless of the resolution of this destination. Therefore I suppose it might make more sense to think of CV signals as percentages, where unipolar full-range is 0 to 100%, and bipolar full-range is -100% to 100%.<br /><br />I'll think about this some more - if this is true then it might make far more sense for the rotaries to map from 1000 to 1100 instead.<br /><br />Also note that the Pitch Bend wheel generates CV values from -8192 to 8191, a range that exceeds the display capability of the DDL delay. The Combi programming scales this range down to 1-2000 for display.<br /><br />The Combi also accepts and displays Aftertouch and Expression MIDI signals, in case that's useful.<br /><br />Here is the <a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/cv_monitor/meowsqueak%20-%20CV%20Monitor-0.0.3.cmb">Combinator Patch</a>.<br /><br /><a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/cv_monitor/meowsqueak%20-%20CV%20Monitor-0.0.3%20-%20example%201.rns">RNS Example 1</a> has a bunch of CV automations driving the Combi controls directly. Hit 'play' to view.<br /><br /><a href="http://dl.getdropbox.com/u/360506/blogs/offwhitenoise/cv_monitor/meowsqueak%20-%20CV%20Monitor-0.0.3%20-%20example%202.rns">RNS Example 2</a> has several LFOs being monitored simulataneously by the device. Note that the SubTractor LFOs are all bipolar, so you'll see the display stick at 1000 for those parts of the waveform that are below half-way.<br /><br />I hope you find this useful at some stage.meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com1tag:blogger.com,1999:blog-8070825255100764146.post-46075761677525998772009-03-01T18:30:00.005+13:002009-04-23T13:05:02.943+12:00Blog Review: "Reason: Patch A Day"Robbneu from <a href="http://reasonpatchaday.blogspot.com/">Reason: Patch A Day</a> very kindly mentioned this site recently, so I thought it would be good to review his site here, since I have been following it myself for several months.<br /><br />Robbneu updates his site regularly. His <a href="http://reasonpatchaday.blogspot.com/2008/09/patch-day-faq.html">goal</a> is to create a new Reason patch, every day in fact, as a means of learning new methods of synthesis and sharing these with his readers. While I suspect real life occasionally gets in the way of such an admirable goal, he's certainly prolific. There are currently over 100 great patches posted since the site began only six months or so ago.<br /><br />Robbneu obviously spends a fair bit of time creating each patch, and this shows. These aren't your typical trance leads that anyone can create in just a few minutes. Although experimentation and luck can play a large part in designing new sounds, it's clear that he usually has something in mind. Each patch comes with a short description of the inspiration or intended result, and some include suggestions for taking things further. A small RNS file is usually provided to demo the patch, and if it's an effect then the demo may turn the patch on and off to highlightthe change in sound.<br /><br />The patches are typically of very good quality and sometimes follow a theme. For example, recently the theme was "Saturn's Rings" - a collection of subtle atmospheric sounds that have a definite 'space' feel to them. Other times the patches may focus on a particular synth or effect within Reason, or even a particular type of sound, like drums.<br /><br />Just to note - you'll need a copy of Reason (full or demo) to hear the patches, as recorded samples are not provided. Patches are developed with Reason 4 although perhaps some would work in earlier versions.<br /><br />Robbneu was kind enough to allow me to post a <a href="http://reasonpatchaday.blogspot.com/2009/02/meowsqueak-new-white-noise-blog.html">patch</a> myself. I thought it would be interesting to imagine a sound and then find a way to create it. I didn't quite end up with exactly the sound I set out to find, but I was pretty happy with what I ended up with.<br /><br />Summary: a great blog to follow if you like to hear new and interesting sounds in Reason. Regular updates mean there's often something new to download and try out yourself.meowsqueakhttp://www.blogger.com/profile/10559964541118532157noreply@blogger.com1