Namespaces

Variants
Actions

ReWire and Reason

From Cycling '74 Wiki
(Difference between revisions)
Jump to: navigation, search
Line 195: Line 195:
  
 
At this point, we can directly access individual Reason devices, so we probably want to have sequencers for each device that match their capabilities. The grid device that we created is perfect for a percussion synth (like Kong), but doesn't really work that well with a standard synthesizer like Subtractor. In order to deal with this, let's reformat our patch a little (in fact, we'll hide some of it inside of an encapsulation to free up some on-screen room), and create a second sequencer that will produce basslines suitable for Subtractor.
 
At this point, we can directly access individual Reason devices, so we probably want to have sequencers for each device that match their capabilities. The grid device that we created is perfect for a percussion synth (like Kong), but doesn't really work that well with a standard synthesizer like Subtractor. In order to deal with this, let's reformat our patch a little (in fact, we'll hide some of it inside of an encapsulation to free up some on-screen room), and create a second sequencer that will produce basslines suitable for Subtractor.
 +
 +
 +
[[File:MaxReason-Connection-3-3.gif]]
 +
  
 
''This is a work in progress...''
 
''This is a work in progress...''

Revision as of 07:05, 7 December 2012

Contents


Using Max with Reason

In the ReWire Essentials tutorials (linked at the bottom), we used Max as both a mixer (hosting application) and "device" (controlled application). These are the two sides of the ReWire connectivity equation, and Max can work equally in both modes. In order to dive into ReWire at a deeper level, let's look at a connection to one of the most-used ReWire packages there is: Propellerheads Reason.

In order to have the most fun with our Max/Reason combination, we are going to do some sequencing and audio processing in Max, and use Reason as a synth/sampling and mixing device. What we *won't* do is run the Reason sequencer or use its recording capabilities. In this way, we'll get to do goofy and interesting Max sequencing and processing (something Max is really good at...), and let Reason handle the synthesis (something Reason is damned good at).

Let's start by creating a very basic connection between Max and Reason. Here's the patch that I created:

MaxReason-Connection-1-basic.gif

Unlike what you see in most of the ReWire help files, I'm using the rewire~ object with a named device. This allows me to state explicitly that this is a connection to Reason, and I don't have to mess around with application selection or other confusing UI elements. I connect the outputs of the rewire~ object to an audio chain (live.gain and ezdac~), and I create two message for the input: "openpanel" and "closepanel".

Different ReWire clients work differently, and even the same application not work the same on Windows vs. Mac. In my case (Max OS X, Reason 6.5), clicking on the "openpanel" message will actually launch the Reason application in ReWire client mode, and will be completely active with no other interaction. If I create a Reason instrument (Kong, in this case), I can play that instrument and receive the audio within my Max patch.


MaxReason-Connection-1-all.gif

Send MIDI Messages to Reason

The next thing we want to do is to fire notes into the Kong instrument using MIDI messages from Max. To do this, we have to send a specially formatted message into the rewire~ object. The format of the message is:

midi <timestamp> <bus number> <MIDI message> <note value> <velocity value>

Since we don't care about sequence timing or routing, our timestamp and bus number are always 0. Since we are sending notes, our MIDI message is always 144. The note number and velocity information is created by a makenote object, which will take our incoming note information and turn in to MIDI note pairs (noteon and noteoff messages).

The basic note-playing patch will look something like this:


MaxReason-Connection-2-1.gif

In order to virtually "play" any of the Kong's pads, just click on one of the message boxes (numbered 1-16).

Sequencing in Max, Playing in Reason

The next step is to create some way to do an interesting sequencing system in Max. Let's start by making a simple drum matrix sequencer that is run off the transport:

MaxReason-Connection-2-2a.gif

In this case, we have a transport-based timing system that uses a counter to output a step position. This goes into a live.grid object (set to matrix mode), then the output is split apart and sent to our input keys. These keys are used to send the MIDI messages from the previous patch to the Kong drum machine. This creates a basic grid-style drum sequencer that can play back Kong without having to mess around with pad programming.

But why program the grid at all. By watching for the first step of the sequence and randomizing the grid, we can have Max do the hard work for us! In this updated patch, I have a compound message that is activated whenever the first step is seen:

MaxReason-Connection-2-2b.gif

At that first step, the message will clear and randomly place one note in each column. But I also want a four-on-the-floor kick drum, so I'm using the setcell message to force the kick to fire on every downbeat. While this is really simple generative stuff, it also is surprisingly good-sounding. In fact, some of the patterns are so good that I don't want an immediate change to the next pattern, so I placed a switch at the output of the generator to allow me to "hold" a pattern until I'm sick of it.

Here it is as a copy-compressed patch:

<code>
----------begin_max5_patcher----------
2118.3oc2b01aaaCD9yI+JHLFv9vb036TpnXX6uv951PghMqCaskLjjS51v5
u8wWjbjarnncsXSLJpcjDMycO2Cu6Huy4eu8lY2U9YY8LvaA+A3la92au4F6
sL23l1quY1l7OuXcdscXyZJWsZsb1b2iVbubwmjKWTttrxMKnD3b.b+K5KA+
U6f2l2r3dUwp2WIWz3FMgmkjkwQL1b.ARRv52orj1W2+IUKs+tKu6iugimse
5px2HajUuWVjemVlzCA19rhcaTEqkMVYF8zMK207028txpkxpvz.2Gu4u2Jc
CclpPqH+k4g+2s2ZdYdfv3p5GUZzX1vPCkIRvzVnIkXDEpUzH3dRTejAcxHC
wKx7Ls87T0Eka1H03T6r1H+biiIcuD7i0xlEx0q+QvFYcc9JIXWsrFXdzGJq
17VP6yAuSaf9Ev6pJeT+J5mg+R2zsVUHWTtqnou9bD3jIxLfGNKyvtPLpEPE
GGJoYcS+GJKZJzfo8Q+VkJe8LeTLyvqU+ic3Hscp61UqtyZDRfGEwgmAr1BX
OCVWrVlWMGTkWrrby78.Hx7umtjc3kYGdIhXt9nPLyCiUCwcL1VbNytDRL.i
kJNQXF6GlmTZbg7QsL+L3tVtFflEHnvwFPgvsLQ3wAER5TBJ3g.k6xKVMa9E
FbzNgpJAHdA3WyWzndP5Gpn3DZav.Tpv57Ei7gUb32EBjEqtn9BKJaju051a
sFkRVUoVBT0.UA3O0SPSk5y+4LvlxkRevmdwVG7Q0gJLDNH0G7wPu7cyM.yR
oitEHUhSHVrP3CJn7KKT7cyUD.CH.p1+NGH.oFG6P.R6LGacpS0Q9zqG8fbX
iN.XLW9F7DALKyCrwNUXSbR3lXL2Ueud+xZ3.0MxsO7DjMFila4xrTuLZ3Tx
nOmkxW1sNvPn8acnkt5ciCDwUwFGFfB0ny2qdaYUyrvPLDwIiLmuwgxEgMkw
Wy7ANy2+1GVWlOvObrQcQg0p.VY57X5Buv7mZG4DgS3KufL1MBHqL6OfGn6J
Lx5nR3M.L5TwF1ofMzQnZ8ISmEZsOssNY8g7p8Jwyd3l7pOoc+7frpQsPqe8
L0ifkTdpcKDv1ku8QykJymQUVze95AwdO4DjukyGBl78ZgIwTaVodoeyOx+2
Kz04OHW997F8Tc2tF4S+TcKZ2B2FDc8NY4G5tc286qNc+VaOGfCdlp3AUs5P
s8fATeu184f1rCF55xhUGYjtAZYNcucYVz8Sfm7DeDBBJ0F+CkYWgQ7lyOA+
cYKSm8BqgNlCudeHYzjTFAhEyAYr1CMytqxA.E3qnChXPDwGEo+AshbQrFAR
PWCPB0GjnyTDQxvo3vHI3zqADg3CQzNMzvAkFHGAmcMfHXe41oIFTLiwSCji
vuFPDeGRGV.SzvAmGpiDr3Z.Rf9fDsiDABkhIARRnWAHRl2cDA0geoYASQXW
A.RpuDzzzhrrTnHv7Qv3q..Q3CPDnDDUSNBkgPtB.DeYrhnbcnWJgFZflqgL
V8tmFLRG4UPEA6D4ZHgUe4qlwSXBHGFX5pnqgzU8ksp1Eh.QDDQfDDz0P1p9
RVU6BI0jZVVfDjqhDyF8fYCiave82IBayW7I.D.G+fhLMmgAYfDumH6qojPz
S9cdqHbmpSbmSOzqlGPnjStHReasmQ64Te9cdvPcnQ9mjllO.voZ9PHbGAND
tyoldB4hfReUEhtndZ1nVpLKuzopQA+.B7C3wAKRaU1ft0aC3740z1Ak+yx7
EewaQFsqub8sCsqtrGUuEyBulCvytlL4phuLbQY5+zA0FJk3hj35ByALi7PJ
uRYkRVzj2UklSnpK6a7tJYc2TzSReptyNeaGHkOy3WqVUXXW8+oCph5ZUcyD
WjFXf0fomIZrhvLzP2UnZpa9amofdjArQSbrk1JAdzmprVq2HfG84J8zqbkw
yZHbqr91pDzvs2YYsbadgzaIoccFhvxW4o9b9bMbzKkakEiAItUxs0M00+LC
V5iW+4BVIeTUI+B32k40kE.73.iqCyQPl2v5SYKEwOUmU8Jl7YfbFeX6T9.l
dkLSSXrGDAB6seJwWV7wHhtt6QtYaYei76eTsr4dKpASXPRJk8sv1rJisOu+
puKHVXwb+CAx5xcUK5lptuUFfdchfrtQUrOJ2e7zWPgdC5d0xkxC5UgkpZS7
xkCGvOX4AEf7fim3.CPbLklKVxS.hiHpRCJ.oAEEogEBU1zNFQBcXgPchlzP
EgtPGGG4IDpLEFO7wXtPzwnOnHKPrwDnXiP3w7MmEYAhLl.kFYAZznWhHKPi
4hFyiq.kNl7vhq7jMl7Piq7vGSdHwUdDiIO33JOi4jFGYmzi4iFGYezi4hFE
YWzi4gFEaOziIOQ1A8nIIFQ+yunxYkjFRNhwyZQDur1gAgDB9DQ4IjcfghH+
IjCSfLVzqMpkaKUEMsmvBQj8zW1Yg6OJAYzjtq58k53hoFvIPMnPZBosS6Qb
t6qgfSMLWMEpwKJeKe09TtPbCbVhnsOriB0.mNEZAilva6u93PMvhIPMvovD
XWCOGGqAeJrF5EpYscxdjrFrovZPfZ+MtVKNNFC5TnELVBtsiwijwfLApARu
zf21EuwwXfmBiAjoiD6ZN6HYLlhDJLeity5ZX13XMlhDJzIDoi84ZD5HYMBI
623s2IzTjQQJR6uosWYiB2.MEYTffZFPaKPGGtAZJxnfw0gvb8oajzhIIgBT
Rz7zfBJ5U7N+mfjm3cblnfbgEOwIjvan3cZlnfp9NNtxCJD4INU7NDyUDi+E
.3vOSrw0mK4a29frptcJsBxrM4ez8mwGaWHo80U3tzNiypjl+1Q3Fu3Vyr8e
29+Ps7lFK
-----------end_max5_patcher-----------
</code>


Adding a Second Instrument

Jumping back to Reason, I've now added a second instrument: a SubTractor analog-ish synth. When you create a new instrument, it makes a new track in the sequencing area of application:


MaxReason-Connection-3.gif


If you start our grid-based sequencer, you will hear that the MIDI stream is not routed; rather, the MIDI input is used by whichever track is currently selected. This isn't optimal, so we want to find a way to force our sequence to be routed to a chosen instrument. Performing this sort of routing magic will require two things: MIDI routing setup within Reason, and manipulation of the midi message that we are sending to the rewire~ object.

Let's start with the Reason MIDI routing setup. If we go to the top of our instrument rack, our basic Hardware Interface display doesn't even have anything related to MIDI showing. Clicking on the Advanced MIDI will reveal a MIDI router, which is where we do our dirty work.


MaxReason-Connection-3-1.gif


In this case, the MIDI Interface shows "No MIDI Input" (because I didn't set it up in Reason's preferences), but that doesn't matter - we will access these devices directly. For the first channel, we set the MIDI routing to the Kong 1 Input; for the second channel, we set the MIDI routing to the Subtractor 1 In (make sure you are selecting the In option as opposed to the Mixer connection). Now, within Max, if we can access the MIDI Bus A device, we should be able to send MIDI to the individual devices - either individually or simultaneously.

Next up is the changes to our Max patch. We need to change the contents of our midi message to route the message to the correct MIDI channel of Reason's interface device. Luckily, the changes are pretty simple using a few extra inputs and some message formatting.


MaxReason-Connection-3-2.gif


We now use the bus number value of the midi message to choose a MIDI bus: #1 is Bus A (in the Reason Advanced MIDI interface), #2 is Bus B, #3 is Bus C and #4 is Bus D. We also have to adjust the MIDI channel by changing the message number (144 in the earlier example) to the range from 144-159; we do this using a "+ 143" after a channel input to set the channel number. Now, if we select a device number of 1 and switch between midi channels 1 and 2, we can switch the MIDI output between the Kong and Subtractor devices.

Here's the updated version of the patch:

<code>
----------begin_max5_patcher----------
2513.3oc2bsziiaiD9b2+JH71.YWDGshukFDDrK1bIG1K60IKFHKywMyXKYH
I28jDj42d3CIY4tkrdXa1JCFL1sjnIq5qJ9whEI0ue+cKVk9YQ9Bv6.uGb2c
+982cm4V5abW402sXWzmi2FkaJ1hDwyoq9kEKsOpP74Bys+V.jfqta5ghshh
hecuvVyKjIpR8+Kepbs4Wnpku63O4ioIEIQ6L+fE+6LYz1pmrOpH9QYxlOjI
hKr0Gh66QYALFcI.Cwd9KADn9Sjumec6jbXmLQIGF4F0ncxk+locfH0uotrV
g1TXn9l+w82q+X4.wk3zc6DJ07k.y+8m9weB7edLJIQTqRMQ.XsdlIxUUPTg
LMogthoHOT.hPTZG2np9keTqniB6ZVer.cUEPNOzAqZlrMqzW6WiZCBL8m.X
JShWKh6zc5iaSiZ2gBR6CNQXOJEi4zZ8+U3YanFBp73HAvv5eFxeXv19nLks
oPj8AQRzpsFc3541opgUhry1waIXwpnjMGwKkPJ2cXWSgrADhC6ABQbjBB4H
T2HnRDqaA1k1CurQnWA7dPNrnqXu+eT7jLV.9aszyGRlD2GVg.U8ewF9.Je1
0+sK3PyCtQ.d.CJRA4hsJsBDALTjqNjuDDaedwiB6MEOopEf1eF72gDx+P+y
JKSrkRM2qpQ1JSDwoGRLsDoElVzzFqgP83PX.BqPZhFj.PqqH6qBFSL6bJeH
8Hao0a6qVZu5tiMHuHSyigTyOV1CcNScUjtYipoFanaLz4HoBIdATrOhqBPC
oB3P4+n5GU94zAgUoYqEYwoaSyrMDr4vOK0W1rxa5jUd23GEweRrtmpXBv3l
7mkJbnSbrcPDdFPjnH1QDFjpixMnQTtXTC0TZI7fsAoXmzWrKxdMK92jKJhE
a29Mfch77HEu8gbQtgf+ioY6dGn74fuWYQ9Av2mk9r5S3+z+GZkVG2Bsd3jn
0o7PSexvPsWIjZhAlvmQL5k.1qf03shnrkfrnj0o6VVCfP8+NdI8zKCO8RHV
ecqPLcTNvD9jPehB8qbsKMAgldebza1D35XhspnTNhTuBTLivrrCvAGb4fCC
oAGL6JN6Vz0CbTjJYopP7S.+qn3B4Sh9fpVIA8mFLoBFiDZgIXfIFXHZtlEf
jzBw6LzdaUnj2lL4ZfLGHS.+rpBJxje9mW.1ktVzxDEnvogOpdTU3CQMvg1a
xe9MU+N7rjEmI7t1ohXWraDSEtlFlF5DpdKnh.H.FPT76L.GDnI18APEYNxP
pSTCko5O1Ke0a02sa4nSxxAMNyTpMvHlG2OL7rlM9nra7qngCjWH1+TTqI.7
xY+XLiCKM3J5156tYRf4mKNMHzKrTOKM0ecOOhNbgJTw6kuOMqnu47V9kcB+
s9GsUp1MLSqeYSSFDaACpkX85Lvb30CVydYOygMVCFeALV1gWn8DRm+azfLl
IBHxzyOf0muVSuoVyFO9h41PPCqFumgjoiAsHS.spCaqRteJJqVgd0CesWzx
V9esprVpUdYZRSCeCbDMPvhvBLyVv2uNMkmu6lMzSSbm8vbBaEIY00S1mTE+
IQVgLVYaanF4QOIV+gnBUCs5Pg33ekWh1kvsFQ2dPj9wpaWc+lxSEhVlGfSd
lL4IYt7Tw8jBj+nh9rSa1IEcaZxlVJosfFOmputNc59VvQt1gOt4zRnMDy8n
XBlDnbQBMYAASdim1TW453LTPsCISKXJb.qNckgzxTrYlV47CQniDQl1jGwr
FigiPyaHgLNHAMszxfU8af3PT.Z96jfGIhLsbnhg0akfYuOBZjHxzRl.Jf6Q
PTJKX96i.GIhLsL8ZRfY4B4O6cR7GIjLsUvGoHRpVQ4YtSR3HAjoMgQjRWBn
jv+B3hDLR.YhgnonQBCC74y+3Q3iDPl3DmYXOHApWR84tGxHiXE4Owf3CTC8
ZChel6gLx.VQSKfUHDqF4kS3+EfDYjwqBmV7pAAdTtOye9Gt5HiVENsnUUTH
b0bew74uCxHCVExm3rdUi5pBMKb9Gq5HwC1Ejc14huQGYJZeT7m.9p+AUx6X
IRt7DFgCsKzNOzbKM4R2oMhbywnIrK.ahGvKGOvzY+F7qq8tQzmD5sk.fQ.P
e+d15nKO6tt2+xARtMm093yij3aMZ0EGzN4Zopa2CXvCDvCPvCijjlbwPDAE
XgHSNaeColD+15n3uzxZYyO6tYzrmosaeXR0J41iJb4qIsM48Qxjuz8B2z7o
uxXlK2jnMQM+qSV5zsx7N1gr8bNJNtVwV5CcV3O2YPwBZU6AcjcCg1qWvvWL
m5c9WlrRZaV3q5B4bHQVjW7qVwgzxJvrSYEMqvTke6KdpzHaeG2u0mKUUuzt
NTuu4ASo0ESxefqUTC2j9VrHSQu7UKp6s.ZZtXeTiST1v3flX5YrADwMeYOK
NyvXDS2KRl.jLwUn1Furc0yr69l4WnhYhmkYhu.9ehn7zD.ZzTbudgpaNl+E
.bj.KGlO8JtikXS.4zbXGjirSzzhhlxBqWQMkGiIOEFcY.5u1j9gmkqKdznn
9dTeb.YT64gppRqw1MTjX29zEMvLiHX1K3u37.aTF88OEHySOjEWgTUGlWvQ
MYsHuPlTOLx6ONGD.ttPOJWuVbx1dXsLWOL05tGvenxi9fL1q77Bg9MWdzqu
qijmWzTsKOuPnuo3CYn9OH2fOng3+3Nyk+PgGGJOvgHOPmHOrgXtzG3JGgOu
noZWdbm4hMH2G2wFxFf3vcpz.Gfz3FWY5PbkwtajhgLPg65XQ3CsitaFmfLD
WYhu6vGs4BR5y8A5XAh1m.4ZDB0G2bniEHbeBTfiEndG8h6XApOJZDysBTPe
xC0sxSXexCwsxCqO4A6V4g2m7fbq7zGIMxwjz8wQibLGceTzPGSQ2GCMz0Lz
8IONlft2fDcH+7rJlUbvPhQzcVKLedMCC7PhgFSlW4hB6NuY7PxsJwg1qgLC
UnC6eMjjsf6az8cx06SkIEkI.GygGeCSvsunXzuhXpN7T5a03L7c0zE+agtD
x7vkGwIHyb1SOQWz25VnKyJVXT3s.YQPOd4ofwcNInfagpPXdrxi3jCcRP7a
ftneKU5WcvSbncgcKzEUm2vxiUjKsKzagtfPJhH6g8vglExsPUTBNp7f73Ry
B9FnKPU2EV4IrvglEzsPUB4pgssmdFWZVtEgfn2MxgUGqAGZWtEgfnEbdPCi
firKCIxY2EIO7VDCBGqHhJOaCtyKAdKhAILvyu7Xq3PmD3sHDDRfZjN6Arvk
pxMIBDy6uGW5aMnA4bW51Fj73vMewPFrA5tr0NDwg4ToAN.oYJqlucaxEse+
Shr7xpzHHK1E8K12EXl2JN5W2z1KM03hLg90Sis776001eb+eBboQs5E
-----------end_max5_patcher-----------
</code>

Adding a Second Sequencer

At this point, we can directly access individual Reason devices, so we probably want to have sequencers for each device that match their capabilities. The grid device that we created is perfect for a percussion synth (like Kong), but doesn't really work that well with a standard synthesizer like Subtractor. In order to deal with this, let's reformat our patch a little (in fact, we'll hide some of it inside of an encapsulation to free up some on-screen room), and create a second sequencer that will produce basslines suitable for Subtractor.


MaxReason-Connection-3-3.gif


This is a work in progress...

Modulation of Reason Parameters

Wrapping it Up

Additional Material on ReWire