In today's desktop environment, musicians often need to integrate sound emanating from a wide variety of sources. Although working entirely on a computer frees us from the hassles of patching cables, music applications bring their own connectivity issues to the table. Luckily there is ReWire — a communications protocol developed in 1998 by Propellerhead Software that removes many of the challenges of interconnecting music software.
In this article, I'll discuss how ReWire works and how to use it. I'll also provide some tips on how ReWire is best used in several major music applications. (There are currently more than two dozen ReWire applications on the market, and many have their own unique implementations.) ReWire is free to the user, but manufacturers pay a license for its use. There's nothing to download or install. If you own two applications that support it, you have everything you need to get started.
ReWire is a protocol that is used to move data between two applications in real time. It was originally designed for use with Steinberg Cubase and Propellerhead ReBirth, but it has since been adopted by a large number of companies for use with their software. ReWire lets users extend their available sound palette beyond simply adding plug-ins to a host application. Two separate programs running on the same computer can communicate in ways that a simple plug-in architecture would not allow. For example, you can send the audio output of Sony Acid 5 — which can't be implemented as a VST, DXi, or other plug-in — into Steinberg Cubase.
You can think of ReWire as a set of invisible cables that stream audio and MIDI between two music applications. One application will always be the host (or the mixer), and the other will always be the slave (also known as the client or the device). For this article, I'll use Propellerhead Reason as the example slave. The host feeds MIDI and tempo to the slave, and the slave responds by feeding audio to the host. Either application can be the transport master, which means that you can press Play in one program, and both will play in sync.
ReWire is currently at version 2 (often called ReWire 2). In theory, ReWire 2 supports as many as 256 audio channels and 4,080 MIDI tracks. Most applications, including Reason, can play only 64 audio channels at once. The 256-channel limit comes into play when a host is receiving ReWire audio from several slaves simultaneously — it's the total channel count of all applications.
When setting up ReWire, the first rule is simple: always open the host first and the slave second. The slave will boot, usually indicate that it recognizes the host, and then immediately establish the ReWire link. In Reason, the Hardware Interface (under the Audio Out section) will show that Reason is the ReWire slave if it is launched with a host already open.
Ableton Live is another popular ReWire application (see the sidebar “Extending Live's ReWire Capability”). Although it too can be used as a slave, when it is used with Reason, it needs to be the host, because Reason can act only as the slave. Therefore, when using the two, make sure you open Live first.
Up and Running
Every ReWire host must recognize the ReWire slave as a destination for its MIDI tracks. In addition, the host needs to recognize ReWire audio channels as inputs to its own audio and auxiliary tracks. Establishing that configuration requires a lot of setup in some hosts and no setup whatsoever in others.
FIG. 1: Sonar''s Synth Rack (shown here in track 1''s data area) is used to create audio and MIDI connections to the ReWire slave.
Apple Logic Pro 7, for example, ships with template sessions that implement ReWire devices. But because Logic allows users to customize everything in their Logic Environment, most Logic users create their own ReWire Environments (see the sidebar “Creating ReWire Devices in Logic Pro 7”). Unlike Logic Pro, MOTU Digital Performer (DP) requires no work — simply open DP and a ReWire slave. Once that is done, DP's MIDI tracks instantly recognize the ReWire slave, and DP's audio and aux tracks show the ReWire ports as inputs.
Digidesign Pro Tools establishes a ReWire link by instantiating the slave as a plug-in on either an audio or an aux track. To do that, choose Multi-Channel RTAS/Instrument under the Plug-in hierarchy. Then choose which ReWire audio channels the track should listen to. If you want to access audio beyond audio ports L, R (3 through 64), use the Multi-Mono version rather than the Multi-Channel version. Because Pro Tools TDM (unlike Pro Tools LE) offers a choice of plug-in architectures, it's important to note that ReWire slaves will be found only under the RTAS option.
Cakewalk Sonar creates the ReWire link through its Synth Rack, found under the View menu. That window provides access to the software instruments installed on your system and is also where you create MIDI tracks for those synths (see Fig. 1). Once the Synth Rack window is open, click on the “+” button to add a synth. If a slave has already been launched on your system, it will appear in the list, at which point you select it and click on OK.
Steinberg Cubase configures its ReWire links through the Device Manager. Once Cubase and a slave have been launched, choose Devices/Reason (or any other slave), and a list of ReWire audio ports will appear. Activate the channels you want (1 through 64, with 1 and 2 being mix Left and mix Right in Reason) by clicking on the button to the left of each channel, and those output channels will now be available as inputs on all of Cubase's audio and aux tracks.
FIG. 2: Propellerhead Reason can supply as many as 64 channels of audio data to a ReWire host. The figure above shows the rear panel of the Reason rack where the 64 ReWire audio ports are accessed.
Note that in Pro Tools, Sonar, and Cubase, setup is required only for audio. Once the ReWire link is established, MIDI slave devices will automatically be available to all of the host's MIDI tracks.
Routing the Audio
Depending on the slave application, there can be as many as 64 mono audio streams available as inputs to the host. Fig. 2 shows the back of the Reason rack with all 64 ReWire audio ports available. Most situations call for nothing more than a stereo mix in the slave to be routed to the host, but others call for individual track-to-track routing. When deciding how to bring in your audio, use these helpful guidelines:
Decide whether you want to monitor the audio from the slave or if you need to record it. I recommend that you record the incoming audio (usually individual tracks, not a stereo mix), because you never know when or where you might need the music from this session. Each host has a different method of recording incoming ReWire audio tracks, and some are easier than others. For example, Logic Pro 7 and Digital Performer allow you to create an audio track and set its input to the correct ReWire channel, record-enable the track, and then record the audio. Pro Tools, however, requires that the audio be brought into an aux track and then bused out to an audio track for recording. That is because Pro Tools' faders are postrecord, so inserting Reason and pressing the record button will not print the audio. Cubase requires that you create an audio file from the incoming ReWire audio using its Audio Mixdown function.
If you simply want to monitor the left/right mix of incoming audio and have no intention of recording it, create a stereo aux track in your host. Aux tracks do not record audio, but they do allow you to hear any incoming audio. Reason users should wire all their devices into a mixer to sum the audio, and then connect the Mixer to ReWire 1, 2 (L, R) so that all the audio runs to those ports. Set the input of that aux to ReWire L, R (the stereo mix coming from the slave), and the audio mix from the slave will appear on that stereo channel.
Rewiring the mix into the host often isn't enough. For example, you may wish to send separate audio channels into the host for processing, such as EQ or compression. Even though you will not record the individual channels, you can still process the signals individually, so you'd still create aux (and not audio) channels in the host. When choosing to route individual channels to the host (mono bass to a track, stereo pad 1 to another track, mono kick to a third track, and so on), first determine the number and type of audio channels being sent to the host. Create the appropriate aux tracks to accommodate the incoming channels.
For example, if you wish to ReWire 16 mono channels from Reason into the host, create 16 mono auxes whose inputs are ReWire 1 through 16, respectively. Reason users should not use a Mixer in this case but should instead connect each device to its own audio port. The audio connected to each port in Reason shows up individually on the aux track in the host whose input matches the ReWire port. For example, a mono bass connected to ReWire audio 3 in the slave requires a mono aux in the host whose input is ReWire 3.
Be sure to send the slave stereo channels to ReWire port pairs that start with an odd number, such as 3 and 4 or 5 and 6. The host will invariably want to see input pairs in the same configuration. If you miss this step, you could end up with audio spread across two tracks for the same sound. For example, if a stereo pad is rewired to pairs 4 and 5, then the host would see only ReWire 4 as the right side of one stereo track and ReWire 5 as the left side of the next track. In that case, you'd still hear both sides of the stereo pad, but they will appear in opposite speakers, and you'll need to automate two faders to control the sound.
What About My Effects?
Creating music with many ReWire channels can get complex, but using effects in your slave can make things even more complicated. For example, let's say that you used a mono chorus effect on a mono bass part in the slave and sent its output to a ReWire port. Should you also send the dry bass part to a port to have more control? That would require an additional ReWire channel.
FIG. 3: A send-return configuration is the best option when using a time-based effect in Reason.
As a general rule, when deciding whether to use effects in the slave, consider the host itself. Does your host have a similar effect? Does it sound better? Is the character of the sound better for the song with the host effect or with the slave effect? Those are important considerations when deciding where the effect should be applied.
When dealing with time-based effects such as reverb and delay, use a send-return configuration within Reason (or any other slave). Reason will automatically route the sends from the mixer to the inputs of the effect, and it will route the outs of the effect back into the mixer's aux returns if you click on the mixer before you create the effect (see Fig. 3). By using that configuration, you'll have more control over the sound than you would if you inserted the effect on the ReWire chain, as in the earlier case of the mono bass and the chorus.
Try This Experiment
Create a simple drum pattern in a ReDrum module in Reason. Apply a reverb to the pattern by connecting the outs of the ReDrum directly to the ins of the reverb, and then connecting the outs of the reverb to the line input of a mixer. Slowly twist the knob for the wet/dry mix on the reverb until you feel that there is an equal amount of wet and dry sound. You might think that will be at 50 percent, but in most cases it's closer to 20 percent wet. Now bypass the reverb and see if the dry drums sound louder than the wet/dry mix (I'll bet they do). Next, configure the reverb effect using the send-return approach mentioned earlier and slowly increase the amount of send on the mixer until you achieve a similar blend of wet and dry. Now mute the return of the reverb and compare volume: the drums should sound just as loud with the reverb as they do without it.
Note that nontime-based effects such as distortion, EQ, and compression should not be set up as a send-return. That's because it would be difficult to hear the EQ when you mix the equalized and the unequalized sounds together. For those types of effects, it's better to insert them into the signal chain directly. That applies regardless of whether you apply your effects in the slave or in the host — experimentation is highly encouraged here.
Using the send-return configuration in a ReWire channel is no more difficult than using a standard audio channel. Simply connect the outputs of the effect from the mixer returns to the ReWire ports and create a channel in the host to receive them. Set the input level accordingly, and be sure to name the track in the host so that you know what the sound is.
If you create an insert effect in the slave, then the dry sound no longer exists, as the dry sound runs through the effect 100 percent to the mixer. When you connect the end of that signal chain to the Hardware Interface, you'll bring in only the effected signal, so be sure you're committed to using the effect.
Sending MIDI to the Slave
If you're using DP, Pro Tools, Cubase, or Sonar, any sound modules that you created in Reason should appear as potential destinations in the host's MIDI tracks (see Fig. 4). Create however many MIDI tracks you need and select the device(s) of choice in the track's output section, and ReWire will handle the rest. With Logic Pro, there's a bit more work to do, so you should refer to the sidebar “Setting up ReWire with Logic Pro” for details. Note that most hosts allow as many as 64 MIDI channels to be sent to the slave.
FIG 4: In this figure, the output of a Cubase MIDI track is directed to a Reason Malstrom device, and Reason''s audio output is directed to a ReWire channel that is activated in the Device Manager.
It's a good idea to create the audio return from your ReWire application before attempting to send MIDI. By doing so, you'll get an immediate sonic confirmation of a successful connection when you send MIDI data to the slave. For example, when rewiring with Reason, first create the aux return in the host, and then set its input to ReWire L, R (in this case, I'll assume only a stereo mix). Next, create a sound module in Reason, and route a MIDI track in the host to it. Then test the MIDI with your keyboard — if everything is working, you should hear audio from the slave as it appears at the newly created aux return.
Reason lets you create a default document containing preset drum or synth sounds that you use often. That can be a real time-saver if you use the same sounds repeatedly. To set that up in Reason, open the Preferences page and choose the document that has all your favorite presets in it from the General section. Now, when you first open Reason as the ReWire slave, it automatically creates your favorite drum machines, string samplers, or bass synths, and all you need to do is create a MIDI track in the host and choose your favorite sound. Alternatively, some producers don't like to reuse the same sounds too often, so they create every device from scratch each time they use Reason. That approach has the advantage of keeping your rig clean and simple, because your host's MIDI output options will reflect a new Reason device only when it is created.
It can be helpful to give your devices intuitive names that you will remember. Get in the habit of naming devices according to their sound (“mono driving bass”) or the part they play (“backbeat hi-hat”). In addition, name all tracks in the host. Don't be creative here — try to be fastidious.
ReWire makes it easy to expand the capabilities of any DAW host by allowing it to receive audio from any one of more than 25 different applications. With as many as 256 simultaneous audio channels and 4,080 MIDI channels, there's plenty of opportunity to expand your sound-production capacity. There are many potential problems involved with connecting ReWire applications, but those problems are typically much easier to overcome than ones involving hardware synths. If you own a DAW and you need to expand your synth sound library, you are no longer restricted to software-synths that operate within your host exclusively. Though this tutorial was written with Reason as the slave, remember that other slave applications work the same way.
For a list of companies and software that support ReWire and ReWire 2, see the Propellerheads Web site at www.propellerheads.se. You'll find some basic tutorials that may be helpful. And while you're at it, go ahead and register so you can download some free sounds.
Matt Donner has a master's degree in music/music technology from New York University He's worked on projects ranging from demos to Cannes Film Festival — winning films.
FIG. A: This figure shows the list of ReWire ports available to Logic. Note that some are named bus and some are named channel. Logic uses whatever term is given to it by the slave to identify each port.
CREATING REWIRE DEVICES IN LOGIC PRO 7
When working with Logic Pro 7, follow these important steps to get your ReWire devices in the Environment.
In the Environment window, go to the Layers menu and choose Insert. That will create a new Layer in your Environment, and you will be presented with an empty screen. Double-click in the Layers area of your new Layer and call it ReWire. That way, when you choose that Layer from the Arrange window, you'll get nothing but ReWire-related devices.
Next, tell Logic how many tracks of MIDI it should make available to send to ReWire. For that, there is a special MIDI object called ReWire. To create that object, go to the New submenu within the Environment window and choose Internal/ReWire. A yellow MIDI object will appear in the window. You can create as many objects as you want up front or create them as needed, but for now, create 16. Select all 16 and double-click on Multiple Selected in the Parameter window, then type “ReWire MIDI 1” (Logic automatically names all of the objects 1 through 16).
Click on and hold the desired track in the Arrange window's Track list, then select ReWire MIDI 1 from the Internal submenu of the context menu that pops up. In the ReWire MIDI 1 parameter box, use the Device menu to choose a ReWire slave application, then use the Channel menu to choose an instrument in the slave — for example, one of Reason's soft synths. As you play your MIDI keyboard, MIDI will be routed through that Logic track to the ReWire instrument you've chosen. (If you followed the tip about setting up the return first, you'll know that works because you can hear the sound coming through the return channel.)
In Logic, all audio passes through Audio Objects. That is an important point, because there are many kinds of MIDI objects but only one kind of audio object. The audio object can be assigned to pass audio in many different ways (for example, using a bus, a track, or an audio instrument). Choose New/Audio Object and make 16 of those objects to start (remember that ReWire supports as many as 64 channels of audio, so if you're going to use them all, make them all). Double-clicking on those Audio Objects will turn them into faders.
To determine which ReWire channels the Audio Object will receive, choose ReWire/RW: Mix L from the Channel drop-down menu in the Audio Object's parameter box, as seen in Fig. A. Once you've chosen the first object and set it to Rewire Channel RW: Mix L, select the second object and set it to Rewire Channel RW: Mix R in the same fashion. Continue that process until all appropriate ReWire channels are set to the correct inputs from the slaves you have running. Be sure to pan the Mix Left and Right to reflect stereo input from the slaves.
Note that the first set of audio inputs in Fig. A uses the term bus (3 through 16) and the next set uses the term channel (3 through 29). That is because Logic itself does not identify the slave by name, but merely uses whatever term (bus or channel) the slave provides. (On my system the first set is Live, and the second set is Reason.) If you're running more than one slave simultaneously, you'll have to use trial and error to determine which set of ReWire inputs refers to which slave.
EXTENDING LIVE'S REWIRE CAPABILITY
Though Reason offers 64 ReWire output ports, versions of Live before version 5 default to only 16 ReWire ports (version 5 defaults to 64). You can increase that number to a maximum of 64 by hacking Live's Options.txt file. Create a text file called Options.txt and type“-ReWireChannels=64.” (Note that you can specify only an even number of channels, and that you must use the dash symbol at the beginning of this line.) That file must be placed into the same folder as Live's preferences.cfg file. In OS X, that is the Preferences/Ableton/Live (version) folder. In Windows XP, it should be the Program Files/Ableton/Live (version)/Preferences folder. See the Live Support FAQ at the Ableton Web site (www.ableton.com) for some other ReWire features that you can tweak in that file.