Michael Rees' Tools

Contents Index Help Prev Next

Michael Rees' Tools: Introduction Bypass Valve - Redirects Events to another Tool further down the PipeLine. CCRider - A vertical slider that sends Control Change Messages. CrossFade - Translates Control Changes to create modulation. Curves - Generates a curbed sequence of MIDI Events. DurationFilter - Re-routes Notes based on their durations. MegaBranch - A selective branching Tool. Modomatic - Controllable Transpose Tool. NewEcho - Real-time controllable MIDI Echo Tool. RandomNumbers - Accessory to replace B&P's internal random number generator. Space - Allows you to position audio using co-ordinates. StickIt - Emulates a hardware vector joystick. TimeWarp - Stretches or squashes Events in a Track or Clip. UpIsDown - Inverts the intervals between Notes in a sequence. Wye - Re-directs MIDI Events to another Track in real-time.

Michael Rees - Introduction

Contents Index Help Prev Next


Finally, here they are: Bars & Pipes tools and accessories for your perusal and amusement and use and abuse. Each archive contains the executable tool or accessory, a Multiview documentation file, and a groovy icon for each. This is the place where the usual caveats and conditions and disclaimers are presented for your edification:

No warranty, express or implied, nor guarantee of fitness for any purpose, sacred or secular, is extended to users of this software. (You break it or it doesn't work for you, it isn't my fault.) 
The author is not responsible for any damage or inconvenience or anything else unpleasant resulting from use of this software. (What d'ya want for nothing?) 
This software may not be distributed for a fee in any form. 
The author retains all rights to this software. 
Use it, abuse it. If you like anything, or if you don't like something, or you have a question (about one of the tools, in particular), send an email (there is a mailto: at the bottom of each of these pages, and my email address is stashed in the tools' tooltypes). 
Use of this software indicates your agreement with these terms, and signifies acceptance of your obligation to make some good and/or interesting noise using these tools. 

Some essentially extraneous information for the anal-retentive: 

This stuff was developed between 1991 and 1998 on an Amiga 2000 (ultimately containing 68030+68882 @ 40mHz + 11M RAM) under AmigaDOS versions ranging from 1.3 to 3.1 using various incarnations of SAS/c through version 6.56. 
Testing was done on the same system using Bars & Pipes Professional v2.5c beta2 (7/20/94). All known Enforcer hits and MungWall anomalies have been squelched. 
If there are any bugs left, they are not my fault. 

It is possible that some of these tools were compiled as 68030-only code. If this is a problem for anyone, let me know and I can recompile for a different processor if you ask nicely. 

One word of warning: A couple of the tools have a gadget in the title/drag bar that should allow you to toggle between music time and SMPTE time. I never managed to get the conversion to work correctly (it seems to be a problem with functions->startoffset and functions->smptetype), so don't use the gadget! (Actually, you can, I seem to recall, use the gadget, but if you toolize while the SMPTE time is selected then bizarre or horrible things happen.) 

Michael Rees - Bypass Valve

Contents Index Help Prev Next

Bypass Valve

TOOL ID: BYPS (0x42595053)

DESCRIPTION: The Bypass Valve Tool redirects the MIDI events it receives to another Tool farther down the PipeLine. The Bypass Valve can be controlled in real time using MIDI Control Change messages and System Exclusive messages.

NOTE: This is another old tool. It doesn't have all the groovy features that newer real time tools have.

SPECIAL TYPE: Realtime.

USAGE: PipeLine.

CONTROLS: The Bypass To gadget invokes a pop-up menu of available destination tools. The Bypass Valve tool sends events it receives to the tool selected from this menu whenever its state is set to Bypass.

The State gadgets select and display whether the tool is passing events, or redirecting events to the destination tool. If the control window is open while the transport is running, state changes are displayed as they occur.

The Controller slider sets the control change number that controls the state of the Bypass Valve tool. A controller-off message (byte 3 less than 64) sets the tool's state to Pass. A controller-on message (byte 3 greater than 63) sets the tool's state to Bypass.

When Discard Control is selected, the tool's controller inputs are discarded. Otherwise, they are passed to the appropriate destination.

The Reroute gadgets allow you to choose to reroute only Note On/Off events, or all MIDI events.

The Snapshot gadget (the pygmy camera between the title bar and the front/back gadget) saves the tool's state as a system exclusive message in the track. If the transport is running, the message is saved at the time the Snapshot gadget is clicked. If the transport is not running, the system exclusive message time is the same as the Song Position flag.

Michael Rees - CCRider

Contents Index Help Prev Next

CCRider

TOOL ID: CChg (0x43436867)

DESCRIPTION: The CCRider is a vertical slider that sends control change messages.

SPECIAL TYPE: Ontime, Realtime.

USAGE: Pipeline.

CONTROLS: The StickIt tool window has a fewgadgets, and one menu, and an annoying requester.

The requester pops up when you stop the transport only if you generated events while the transport was running. You get three choices of what to do with the events:
 * Mix mixes the new events with any already in the clip;
 * Replace deletes old events in the clip, and sticks in the new ones;
 * Noway leaves the clip alone and frees the events you generated.
(There is another requester that alerts you if the track's clip is locked because the tool can't save anything in that case.)

The slider controls what value is sent in the control change message. Above the slider is the current value; below it is the control change number that is sent.

The Send gadget forces the tool to send a control change event.

Three additional sliders allow you to configure the tool. Note that these sliders are not visible until after you select Show Config from the CCRider menu.

The CC slider sets the control change message to be sent. The selected controller is displayed beneath the main slider.

The Hi and Lo sliders set the range of values sent on eachaxis. 

Because the CCRider tool has such a puny window, there isn't roomfor a lot of control gadgets, and that is why there is a menu.

The subitems under Send CCs control when the tool send control change messages. Selecting While Dragging causes the tool to send control changes while you are moving the slider. Select Manually if you only want to send a control change by smacking the Send gadget. On Gadget Down and On Gadget Up send control changes when you click on the slider and/or when you release the slider, respectively.

The Auto Save item allows you to avoid the annoying requester that pops up after stopping the transport (if you generated any events with the tool). When Auto Replace is selected, the tool automagically replaces any events in the clip with the new events generated. Otherwise, you have to make a selection from the requester to determine the disposition of the events.

The Show Config / Hide Config item enlarges the window to reveal or shrinks it to conceal the configuration gadgets.

The Snapshot item writes the tool's current state to its track as a sysex message. If the transport is running, the message is saved at the time the Snapshot gadget is clicked. If the transport is not running, the system exclusive message time is the same as the left Edit flag. The track's Edit flag position is used if the track window is open; the Tracks window left Edit flag is used if the track edit window is not open. Snapshots won't occur any closer than the length of the default note from the position at which a new snapshot is to be inserted. For example, if the default note is a quarter note and you snapshot a tool at measure 2, beat 3, the tool will delete any of its own snapshots found between 2.2.01 and 2.3.191 before inserting the new snapshot. If the track's window is open, the default note set for the track is used. Otherwise, the default note set in the Global Parameters window is used.

Use SysEx toggles response to tool sysex messages. The CCRider tool disregards its sysex unless this item is selected. When the item is selected, the tool changes its current state to that saved in the sysex. Note that the tool does not change the state of the Use SysEx item so that you can choose to use or not use tool sysex as you please.

Free SysEx frees CCRider sysex messages. Otherwise, they are squirted on down the pipeline.

The Close Window item, well, uh, closes the tool's window. No room for a close gadget.

Michael Rees - CrossFade

Contents Index Help Prev Next

Crossfade

TOOL ID: XFAD (0x58464144)

DESCRIPTION: The Crossfade tool was originally conceived as a cheap and dirty way of coaxing spatial modulation out of equipment that only minimally supports this luxury (i.e., a Yamaha TX81Z). The tool translates a control change input into another control change that is distributed between the track in which the tool resides and the track connected by a branch. For example, assume the input controller value is 64 which is conveniently half of the full range (127). The output controller values for both tracks would be 127. If the input value is 127, the output controller for the selected Primary track would be 0, and for the branch track it would be 127. 

Use the Space tool for more refined spatial control.

SPECIAL TYPE: Branching.

USAGE: PipeLine.

CONTROLS: The In and Out sliders determine the controller numbers the Crossfade tool responds to and outputs, respectively.

The Primary gadgetry allow you to select which track, the track in which the tool resides or the branch, is treated as the primary track. (Think back to the genesis of this tool -- panning -- and think of the Primary track as the left channel and it makes some sense.) When the input controller value is 0, the primary track gets an output value of 127 and the other gets 0. When the input value is 127, the primary track gets 0 and the branch gets 127. The simplistic diagram below shows what happens to the two outputs as the input value changes.

                                      constant        decreases to
Primary track CC value   127------------127----------------0


Controller Input value   0---------------64--------------127

                                    increases to       constant
  Other track CC value - 0--------------127--------------127

Michael Rees - Curves

Contents Index Help Prev Next

Curves

TOOL ID: CURV

DESCRIPTION: The Curves tool generates seven-bit MIDI channel message events.

SPECIAL TYPE: None.

USAGE: ToolPad

CONTROLS: The Type gadgets allow you to select either linear, exponential, or logarithmic curves. When selected, the Scrub Curve gadget causes the tool to eliminate redundant consecutive events, minimizing the number of events generated.

The Events slider allows you to select the type of events to generate: Control Change, Program Change, Aftertouch, or Pitch Bend. If Control Change is selected, the Controller gadgets allows you to select the MIDI controller number for the generated events.

The Rate gadgets set the time interval between generated events. The Rate gadget displays the pop-up note menu, from which you may select a rate. The slider allows fine-tuning of the generation rate with an accuracy of one clock tick.

The Break gadget, when selected, causes the curve to rise to the End value after the percentage of time set by the slider, and then return to the Start value. For example, consider a clip lasting 1000 clock ticks. If the Break slider is set to 75%, the curve will rise to the End value at 750 ticks. At 751 ticks, the curve is reversed to return to the Start value at 1000 ticks.

The Start and End sliders define the range of data in the generated events. Curves generated start at the Start value, and end at the End value. To reverse a curve's direction, set Start greater than End.

Michael Rees - DurationFilter

Contents Index Help Prev Next

Duration Filter 

TOOL ID: DrFi (0x44724669)

DESCRIPTION: The Duration Filter tool is a configurable, controllable filter which reroutes note events based on their durations. 

SPECIAL TYPE: Branching, Real-Time.

USAGE: PipeLine, ToolPad.

CONTROLS: Oh, my; what a load of controls, eh? Well:

Some gadgets appear multiple times in connection with sundry other gadgets. The Mystery Note gadgets allow you to set various parameters from a pop-up note menu. The pop-up pipe gadgets control what happens to control change inputs. The plug deletes them; the straight pipe passes them; the elbow branches them (or deletes them if the branch output is not connected).

The Duration: slider sets the test value for the filter. This setting is what the tool tests incoming note durations against to determine whether they are branched, or passed down the pipeline.

The State: gadgets control the operation of the tool. If CChg is selected, the controller set with the CChg: slider will turn the tool on and off with MIDI switch on and switch off values, respectively. The < / > gadget determines whether notes with durations less than or greater than the Duration setting are branched. The Off and On gadgets disable and enable the tool. These gadgets change in response to the CChg: controller.

If the Controller Mapping gadget is selected, things get trickier: the tool's test duration is controlled by the lower CChg: controller. Control change values are mapped to the range set by the Max: and Min: gadgets. The range can be quantized to the value set by the Quantize: slider, or not if the slider is set to Off. The current test duration is displayed in the Now: line so there's some hope of keeping track of what's happening.

There is also one menu. The Show CC Numbers item lets you toggle the CChg: slider displays between numbers, and MIDI standard controller definitions.

As usual, the miniature camera in the edit window title bar writes the tool's state to the track as a system exclusive message. The Snapshot menu item duplicates the snapshot gadget.  A sysex snapshot is inserted into the track:
 . at the song position pointer if the transport is running;
 . at the track's left edit flag if the track's window is open; or
 . at the main window left edit flag if the track's window is not open.

What happens with system exclusive messages is determined by two menu items. The tool responds to its sysex messages when the Use SysEx item is checked. When the tool receives one of its sysex snapshots, it will change its internal state to that reflected in the sysex message. If the tool's window is open, the display will be updated to reflect the new setting. Unless Free SysEx is selected, the tool passes these events to the next tool in the pipeline. Foreign sysex events are always passed down the pipeline.

Note that snapshots and sysex do not function in the ToolPad. Control changes, however, are functional when the tool is used in the ToolPad.

Michael Rees - MegaBranch

Contents Index Help Prev Next

MegaBranch

TOOL ID: MBra (0x4D427261)

DESCRIPTION: MegaBranch is a selective branching tool: no more branching, or elbowing, or passing events unless you want to.

SPECIAL TYPE: Branching, Real-Time.

USAGE: Pipeline, ToolPad.

CONTROLS: For each type of event, there is a pop-up menu that allows you to select whether that type of event is passed down the pipeline, redirected to the branch out, or duplicated and sent to both destinations. In conjunction with the CC: slider, you can set a destination for each control change number. Three menu items facilitate setting all controllers to the same destination.

As usual, the miniscule camera in the edit window title bar writes the tool's state to the track as a system exclusive message. The Snapshot menu item duplicates the snapshot gadget. The time of the sysex message is: 
 . the current song position pointer if the transport is running; 
 . the track's left edit flag if the track edit window is open; or
 . the song left edit flag if the track edit window is not open.

Note that you can't take snapshots from the ToolPad. (If you can tell me how to get at the real clip that's being edited, I'll be happy to add it to all my tools that use sysex snapshots.)

What happens with system exclusive messages is determined by two menu items. The tool responds to its sysex messages and changes its internal state according to the sysex message when the Use SysEx item is checked. If the tool's edit window is open, the gadgets are updated to reflect the new state. Unless the Free SysEx menu item is selected, the tool passes these events to the next tool in the pipeline. (Foreign sysex events are always passed down the pipeline.) The Use SysEx and Free Sysex settings, and the currently displayed control change number are not changed by any sysex message the MegaBranch tool receives. In addition, sysex doesn't work when the tool is in the ToolPad (because I can't figure out what's screwy with it).

NOTE: You probably should not change the destination for Note events while the transport is running (until I decide I need to add support for tracking them) because, unless the sysex is synchronized with the notes, you might very well end up with stuck notes. The tool was fat enough without matching up note ons and note offs, and I don't need to do that right now anyway. So, there.

Michael Rees - Modomatic

Contents Index Help Prev Next

Modomatic

TOOL ID: AMod (0x414D6564)

DESCRIPTION: Modomatic is similar to the Auto Transpose and Auto Modulate tools from the Creativity Kit, but it works correctly. Note and Polyphonic Aftertouch events are transposed according to the Note On events received at the merge input. 

SPECIAL TYPE: Merging, Ontime, Realtime.

USAGE: Pipeline.

CONTROLS: The Axis gadgets determine the basis for transpositions. The distance between the Axis note and notes received at the merge input determine what change is applied to notes flowing through the pipeline. 

Ordinarily, Modomatic does a straight transposition ("modulation" in Barsss&Pamp;Pamp;Pipes parlance). The Mod gadgets allow you to alter that behavior. When the Key/Scale gadget is selected, the tool locks its output to the current Key&Scale/Mode (which can be mighty confusing if you play a C Major scale and it comes out F# Lydian). To disregard the octave of the merge input, select the PitchClass gadget. Then, Modomatic concerns itself only with interval and direction. For example, set the axis to C, and squirt in a G5 on the merge input. The tool transposes pipeline inputs by +7 halfsteps, the distance from C to G. So, a G#6 received from the pipeline leaves Modomatic as D#8. If the next merge input is an F5, the transposition changes to -5: 5 halfsteps because that is the distance from C to F; a negative transposition because the new merge input note is lower than the previous.

The Route gadgets control what happens with notes and poly aftertouch events received by the tool. You can choose to pass (the straight section of pipe), or free (the plug) Original, untransposed events, and/or events received at the merge input.

The three Reset gadgets determine when the tool resets the transposition to 0. Start resets when you select the transport's play-from-beginning gadget; Play causes a reset when you punch the transport's play gadget. The Now gadget resets the transposition immediately.

As usual, the miniscule camera in the edit window title bar writes the tool's state to the track as a system exclusive message. The Snapshot menu item duplicates the snapshot gadget. The time of the sysex message is: The current song position pointer if the transport is running; The track's left edit flag if the track edit window is open; or the song left edit flag if the track edit window is not open.

What happens with system exclusive messages isdetermined by two menu items. The tool responds to its sysex messages when the Use SysEx item is checked. Unless Free SysEx is selected, the tool passes these events to the next tool in the pipeline. (Foreign sysex events are always passed down the pipeline.)

Lastly, the Auto Snapshot menu item causes the tool to write sysex every time the transposition changes. This allows you to preserve that perfect transposition sequence that you played without using up an extra track to record what you played.

Michael Rees - NewEcho

Contents Index Help Prev Next

NewEcho

TOOL ID: NEco (0x4E456365)

DESCRIPTION: The NewEcho tool is a configurable, controllable replacement for the standard-issue B&P Echo tool.

SPECIAL TYPE: Branching; Real-Time.

USAGE: Pipeline, ToolPad.

CONTROLS: As usual, there are probably too many gadgets, and a menu, too.

The On and Off gadgets turn the tool on and off (so far, so good). The Source and Echoes pop-up pipe gadgets determine the destinationfor events received, and echoes generated. Source events may be freed (the plug image), passed down the pipeline (the pipe image), or branched (the elbow image). Similar options are provided for the echoes, except they cannot be freed (wouldn't be much sense in that now would there).

The gadgets in the Echo: group allow you to select what events will be echoed.

The Delay: pop-up note gadget and the associated slider allow you to set the time between echoes. The u2, u , and 3 gadgets operate on the delay time, multiplying it by two, 1.5, and .6, respectively.

The Repeat: gadget sets how many echoes will be generated for each event received. When the Repeat: gadget is set to Random, the Max: and Min: gadgets are enabled, and determine the range for the random selection of repeats.

The Slope: gadgets determine how the Change: is applied during echoes. If Falling is selected, Change: is subtracted; if Rising is selected, Change: is added; if Level is selected, Change: is ignored. When the Random gadget is selected, the tool selects one of the slopes at random each time it is called upon to generate a series of echoes.

The Change: gadget sets the difference between generated echo events (the difference in velocity for notes; byte2 for bend, polytouch, control change events; and byte1 for monotouch events). This can also be set to Random, and in that case the change amount is randomly drawn from the range set by the corresponding Max: and Min: gadgets.

REAL TIME CONTROLLERS: The configuration gadget (the diminutive pliers in the title bar) expands the tool's window, revealing seven slider with which you configure the tool to respond to control change events (when the menu item Respond to CCs is selected). If the window is large, the gadget returns the window to its normal size.

The real time controllers have the following affects on the tool.
State: switch on turns the tool on; switch off turns it off.
Delay: controller value mapped to the range for the delay, 1 tick to 2 measures.
Repeat: controller value mapped to the range for repeats, Random to 30.
Slope: sort of a four-level switch. Controller values 0 to 31 select Falling; 32 to 63 select Level; 64 to 95 select Rising; 96 and above select Random.
BranchSrc: a trinary switch. Controller values 0 to 42 delete the source; 43 to 85 pass the source; 86 to 127 branch the source.
BranchEcho: switch on branches the echoes; switch off passes echoes.
Change: controller values are mapped to the range for change, Random to 25.

To the right of each slider is a gadget that determines the disposition of each control change. If the length of pipe is showing, the control change is passed; if the plug is selected, the control change is freed. Note, however, that if a control change is to be echoed and is also selected as a real-time controller for the tool, it will not be freed regardless of the setting of the pipe gadget in the controllers section.

SYSEX: The wee camera in the edit window title bar writes the tool's current settings to the track as a system exclusive message. (The Snapshot menu item duplicates the snapshot gadget.) The time of the sysex message is: 
 . the current song position pointer if the transport is running; 
 . the track's left edit flag if the track edit window is open; or
 . the song left edit flag if the track edit window is not open.
Note that you can't take snapshots from the ToolPad. (The NewEcho tool does, however, respond to sysex in the ToolPad, but does not free sysex in the ToolPad.) On playback, the tool sets itself according to the received sysex message (if the Use Sysex menu item is selected).

MENU: Five menu items provide additional control of the NewEcho tool. The first three are concerned with system exclusive behaviors:
 . Use SysEx enables you to turn sysex response on or off. Note that the state of this item is preserved when a sysex message isreceived; a sysex message will not turn it on or off.
 . Free SysEx determines what the tool does with a sysex message after it receives it. If Free SysEx is selected, the tool's sysex is freed after the tool responds to it. Otherwise, the sysex message is passed down the pipeline. Note that sysex messages are not freed unless Use SysEx is selected. Also, foreign (i.e. for another tool or device) sysex messages are never freed.
 . The Snapshot item duplicates the functionality of the snapshot gadget.

The other two menu items deal with control change type stuff.
 . Respond to CCs turns real-time controllers on and off. The state of this switch is also preserved when a sysex message is received.
 . Show CC Numbers toggles the display of control change gadgets between your basic numbers and MIDI names.

Michael Rees - RandomNumbers

Contents Index Help Prev Next

RandomNumbers (Accessory)

Version: 1.1 (first public release) (v40.11 14 Sep 97)

*IMPORTANT* RandomNumbers.paccess was compiled as 68030 code. If you want or need a version for a different processor, let me know (addresses are at the bottom of this file). Also, this accessory requires mathieeedoubbas.library and mathieeedoubtrans.library in your friendly neighborhood LIBS: directory.

TOOL ID: RNMB

RandomNumbers.paccess intercepts call to Barsss&Pamp;Pamp;Pipes' random number generator (i.e., functions->random()). This will give you a better -- or, at least, different -- palette of random numbers for tools that use random numbers, such as Articulation Modifier, Velocity Modifier, and Random Notes, among others.

You can choose between three replacement random number generators: RangeRand(), FastRand() (which are both amiga.lib calls), or lrand48() (from scm.lib). Both RangeRand() and lrand48() allow you to set a seed (< 65535 due to limitations inherent in proportional gadgets) for the generator with the Seed gadgets. Usually it's easier to set the seed with the string gadget. If none of the replacement generators is selected, the accessory calls the usual functions->random() (which is, I believe, FastRand() in reality).

The Reseed gadget reseeds the random number generator. Whenever you enter a new seed with either of the Seed gadgets, the generator is automatically reseeded. Use this gadget if you want to reseed at any other time.

In addition to replacing the random number generator, you can also select a random distribution to use. Some of the distribution choices allow you to set parameters with sliders in the bottom of the box.

Linear: A linear distribution. Small values are more likely than large ones.

Inverse Linear: Large values are more likely than small ones.

Triangle: Values in the middle of the range are most likely.

Rand-Rand: A recursive random distribution, it is similar to an exponential distribution, but more variable.

Poisson: The distribution is controlled by the Spread parameter, which is the mean of the distribution.

Cauchy (+): This isn't a true Cauchy distribution; the negative part is folded to positive. If this were not true, the distribution would be similar to a Gaussian distribution but approaching zero more slowly at the extremes. The Spread parameter determines the horizontal dispersion of values.

Beta: The two parameters, Prob0 and Prob1, control the shape of the curve. Prob0 contols the occurrence of values at the low end of the range; Prob1 controls the high end. Smaller values increase the probability of values at the respective end of the range. If the parameters are equal the curve is symmetrical around the middle of the range; otherwise, the curve tilts in favor of the smaller parameter. If both Prob0 and Prob1 are set to 1.0, the output is a uniform distribution. If Prob0 and Prob1 are greater than 1.0, the output will resemble a Gaussian curve. Note that if they are too much greater than 1.0 the system will slow down due to increased numerical crunching.

Gauss: Your basic bell-shaped curve (ok, it's really an approximation). The StdDev parameter controls the standard deviation. The mean is automatically half the range the functions gets.

Gamma: A continuous, asymmetrical curve whose shape is governed by the Spread parameter. Values for Spread greater than 10.0 are to be avoided as theresulting curve gets increasinlgly Gaussian.

Exponential: Well, what do you know, it's an exponential curve. Values at the low end of the range are most likely, and the probability of large values decreases exponentially. The Spread parameter controls the dispersion: Large values increase the likelihood of small results.

Random Walk: The new value is +/- 1 from the previous value. A (not terribly) special trick is employed: The starting point for the walk is set to half the range of the first call to the function following selection of the Random Walk gadget.

(Weibull: This used to be in the empty slot, but it is sort of broken and has been removed until I get around to being motivated to fix it.)

As an extra added bonus, if the RandomNumbers accessory window is open when you save a song, it will automagically open when you reload that song ... usually. Haven't tracked down why it only usually opens; there are other mysteries to pursue.

Michael Rees - Space

Contents Index Help Prev Next

Space

SPAS (0x53504153)

DESCRIPTION: The Space tool is useful for coaxing spatial modulation out of equipment that does not directly support panning. The tool remaps MIDI controller messages to position sounds in a two- dimensional virtual acoustic space (i.e. you can, with minimal effort, make sounds move from left to right, and sound louder or quieter). In terms of Cartesian coordinates, the Space tool positions the listener at the origin, (0,0), the left speaker at (-1,1), and the right speaker at (1,1). Sound events may be placed at any location in the virtual acoustic space bounded by (-1,1), (-1,3), (1,3), (1,1) via MIDI controller messages. Even so, the Space tool is still a primitive approximation. Used in conjunction with digital delay controlled by the Left/Right controller and reverb depth controlled by the Distance controller the effects generated can be more realistic.

To reduce the amount of extraneous MIDI data in the pipeline, the Space tool generates control changes only if their values are different from the previous change that it sent.

NOTE: The Space tool is similar to the Crossfade tool, but provides additional refinement, such as scaling in the y axis, duplication of events, and System Exclusive support. For simple linear crossfades, the Crossfade tool is a better choice because the Space tool requires more math. As a result of the more extensive computation, however, the Space tool provides better gain control across the virtual acoustic space.

SPECIAL TYPE: Branching, Realtime.

USAGE: PipeLine.

CONTROLS: The sliders in the control window set the MIDI controller numbers to which the tool responds. The Boolean gadgets control some aspects of the tool's behavior.

The Left/Right Controller slider sets the MIDI controller which the tool translates to a sound's left/right position. Whether left is MIDI 0 or 127 depends on the setting of the Left Channel gadget. The default controller is 10, which is the MIDI Pan controller. 

The Distance Controller slider sets the MIDI controller which the tool maps to the y coordinate in the range 1 to 3. This controller's values determine how distant sounds appear, and roughly translates to a sound's apparent volume. The output value from the tool is calculated according to the inverse square law (i.e. a sound's amplitude is scaled by 1/distance squared). The greater the input value, the more distant the sound, and the less the resulting amplitude (actually the output byte2 value, but pretend they are equivalent). The default controller is 7, which is the MIDI Volume controller.

The Track Controller Out and Branch Controller Out sliders set the controller numbers the tool outputs. A change in the Left/Right controller or Distance controller values cause new Trackand Branch Controller control change events for the track and branch, if one is connected.

The Left Channel gadgets select whether the track in which the tool resides or the connected branch is the left channel in the virtual space. If Track is selected, the track gets large values for small Virtual x input values (panned left), and small values for large inputs (panned right). The opposite is true if Branch is selected.

The Duplicate MIDI Events gadgets select which events are duplicated and sent to the connected branch. Notes duplicates note events. Control duplicates controller messages. Channel duplicates all MIDI channel messages (status bytes 0x80 through 0xE0: note off through pitch bend). Note that if Discard Inputs is selected and Duplicate Channel or Control is selected, copies of the tool's input controllers will not be branched.

If you do a sysex Snapshot of the Space tool, not only visible stuff is saved.  Also saved are the output values for the Left/Right and Distance Controllers. Consequently, you can use sysexmessages to control spatial location instead of relying on control changes. For that reason, here is the format for the Space tool sysex:

   Byte 1   0xF0  SysEx status byte
   Byte 2   0x01  Manufacturer ID
   Byte 3-6 0x53 0x50 0x41 0x53(ToolID)
   Byte 7   Left/Right Controller value (0..127)
   Byte 8   Distance Controller value (0..127)
   Byte 9   "left" track: 1==track; 2==branch
   Byte 10  bit mask for Duplicate and Discard gadgets:
            bit 1 == 1 == Duplicate Notes
            bit 2 == 1 == Duplicate Controls
            bit 3 == 1 == Duplicate Channel messages
            bit 4 == 1 == Duplicate All messages
            bit 5 == 1 == Discard Inputs
            Note that, when set, bit 4 has
            priority over bits 1 through 3. The
            same duplication exclusion rules are
            applied when decoding SysEx messages
            as when the tool is edited via the
            control window. Bits 1 and 2 may
            both be set, but bits 3 and 4
            exclude all other bits 1 through 4.
   Byte 11  virtual x controller number (0..63)
   Byte 12  virtual y controller number - 1
            0..64; 0==off)
   Byte 13  track output controller (0..63)
   Byte 14  branch output controller (0..63)
   Byte 15  0xF7End of Exclusive status byte.

SysEx messages may be shorter than 15 bytes as they are read only until an EOX is encountered. So, if you want to roll your own sysex, you only have to enter bytes 1 through 8 and an EOX to make soundsfly about without using control changes.

When selected, Discard Space SysEx causes the Space tool to discard its own system exclusive messages. Usually, you will want to select this gadget. You may choose to pass system exclusive messages if you have some kinky network with multiple Space tools in the same pipeline.

Example:
Now that you're probably completely confused by all this tripe, perhaps a practical example will straighten outthings. Put some notes in Track 1. Put some control change 10 events in Track 1 -- over the duration of the notes, make cc10 gofrom 0 to 127. Now, put the Space tool in Track 1's outputpipeline. Put a Merge In tool in Track 2's output pipeline, andconnect the output of the Track 1 Space tool to the Merge In tool. Set the output MIDI channels of the two tracks to different channels. To your synth now. Put the same patch (or program orsound or whatever) on the two MIDI channels for the two Tracks. Pan one patch hard left, and pan the other hard right. Make surethat the patch will respond to cc7 (Volume), or this will be a very disappointing experience. Punch Play. If everything is set up correctly, voila!. The notes will play and pan from one channel to the other.

For additional dirt on how the guts of this tool work, refer toElements of Computer Music by F. Richard Moore, section 4.2. Thealgorithm and some of the code was lifted from there.

Michael Rees - StickIt

Contents Index Help Prev Next

StickIt

Stkt (0x53746B74)

DESCRIPTION: The StickIt tool emulates a joystick forgenerating control events. Drag the slider gadget around, and the tool sends events. All this and more...If the transport is running and you drag the humongous joystick-type slider, the new events replace any matching events (events of the same type the tool is squirting out) already in the track. AND the tool saves a list of new events. When you punch stop, you canchoose to replace matching events in the track with the new events, mix the new events with existing events, or leave thetrack alone and trash the new events (i.e., the tool can be non-destructive -- see below). This can be a handy tool ifyou have, for instance, a Wavestation A/D and don't like always having to reach over and to twiddle with that teeny little joystick it has on the front panel.

SPECIAL TYPE: Ontime, Realtime.

USAGE: Pipeline.

CONTROLS: The StickIt tool window has several intriguing gadgets, and one menu, and an annoying requester.

The requester pops up when you stop the transport only if you generated events while the transport was running. You get three choices of what to do with the events:
 . Mix mixes the new events with any already in the clip;
 . Replace deletes old events in the clip, and sticks in the new ones;
 . Nope leaves the clip alone and frees the events you generated.

(There is another requester that alerts you if the track's clip is locked because the tool can't save anything in that case.)

The Min, Mid, and Max gadgets set the slider to the minimum, middle, and maximum of the ranges for the axes respectively. The gadgets for the axes (MinX, MinY, etc) set only the axis to which they refer. Unless a Defer gadget is selected, using a Min, Mid, or Max gadget also send a control change.

The Send gadgets force the tool to send a control change event. Use them in conjunction with the Defer gadgets to gain greater control over when the tool sends events.

When selected, the Defer gadgets turn off an axis. You can still drag the prop gadget, but events are not sent until you smack the Send gadget.

The Play gadget allows you to watch the prop gadget whizaround in response to control changes received by the tool. If you can manage to grab the pot you can still move the gadget, but events are not sent by the tool unless you whap a Send gadget. It's not very useful, but sort of fun. The menu item Playback CCs duplicates the functionality of the gadget.

The configuration gadget (the small pliers in the title bar) expands the window to show the gadgets that allow you to select the types of events the tool generates, and the range of values in the events. The configuration gadget also shrinks the window again to get all that junk out of the way when you are just grooving with the tool.

The Event sliders allow you to select the kind of event the tool generates for each axis. You can choose control changes, mono aftertouch, or pitch bend. (The tool sends only 7-bit pitch bend.)

The CC# slider sets the control change message to be sent. You can toggle between displaying names or numbers with the menu selection Show CC Numbers. In addition to the slider display, the selected controllers are also displayed on the left side of the main area of the window in a small font. (This is handy if you, like me, can't remember what controller is on which axis from time to time.)

The High and Low sliders set the range of values sent on each axis. Note that the tool a bit strangely if the range is less than the Res setting. (I suppose I should do a sanity check on that, but you can do more easily as I just thought of it.)

The Res sliders set the resolution for event generation. Changes in values less than this are not sent.

In the title bar is the ever-popular Snapshot gadget (the wee camera). Click on this gadget to write the tool's current state to its track as a sysex message. If the transport is running, the message is saved at the time the Snapshot gadget is clicked. If the transport is not running, the system exclusive messagetime is the same as the left Edit flag. The track's Edit flag position is used if the track window is open; the Tracks window left Edit flag is used if the track edit window is not open. Snapshots won't occur any closer than the length of the default note from the position at which a new snapshot is to be inserted. For example, if the default note is a quarter note and you snapshot a tool at measure 2, beat 3, the tool will delete any of its own snapshots found between 2.2.01 and 2.3.191 before inserting the new snapshot. If the track's window is open, the default note set for the track is used. Otherwise, the default note set in the Global Parameters window is used.

Most of the StickIt tool menu items duplicate the functions of gadgets; a couple provide additional goodies.

Show CC Numbers toggles the display for the CC# sliders between names assigned to controllers in the MIDI spec, and your basic digits.

Use SysEx toggles response to tool sysex messages. The StickIt tool disregards its sysex unless this item is selected. When the item is selected, the tool changes its current state to that saved in the sysex. Note that the tool does not change the state of the Use SysEx item so that you can choose to use or not use tool sysex as you please.

Playback CCs duplicates the Play gadget.

The Auto Replace item allows you to avoid the annoying requester that pops up after stopping the transport (if you generated any events with the tool). When Auto Replace is selected, the tool automagically replaces any events in the clip with the new events generated. Otherwise, you have to make a selection from the requester to determine the disposition of the events.

The Snapshot item duplicates the functionality of the Snapshot gadget.

Michael Rees - TimeWarp

Contents Index Help Prev Next

TimeWarp

*IMPORTANT* TimeWarp.ptool was compiled as 68030 code. If you want or need a version for a different processor, let me know (addresses are at the bottom of this file).

TOOL ID: STRC

DESCRIPTION: The TimeWarp tool (not the popular dance) performs augmentation (stretching) and diminution (scrunching) on the rhythmic structures in a Clip in the Clipboard, or the MIDI events in a single track. When operating on a clip in the Clipboard, the TimeWarp tool adjusts the times of all Barsss&Pamp;Pamp;Pipes events (rhythm, dynamics, chords, etc.) in the clip with the exception of Time Signature events (it just looked too hard, and I don't use them anyway). 

You can toggle the display of music time and SMPTE time with the button in the title bar. (SMPTE time is shown with the offset,so don't get confused.)

NOTE: The maximum change the TimeWarp tool can make is 42,949:1. This means that the maximum length a clip can be expanded to fill is 559.0.184 (which should be sufficient for most applications).

NOTE: When smooshing clips into a short time span, beware of generatinga throng of simultaneous events.

USAGE: ToolPad.

CONTROLS: The Time Span gadget sets the amount of time the modified clip will fill. The time is expressed in measures.beats.clocks based on the current ruling time signature, or in SMPTE hours:minutes:seconds.frames if SMPTE display is selected.

When the Durations gadget is selected, the durations of note events will be scaled by the same factor as their times. (Resulting durations will never be less than one clock tick.) Otherwise, durations are left untouched.

MIDI Only is valid only when operating on a clip in the Clipboard. When selected, Barsss&Pamp;Pamp;Pipes events are left alone and only MIDI events are modified. (Maybe someday I'll modify it to work on the edit clip for a track. Maybe not.)

When Calculate Clip Time is selected, the TimeWarp tool calculates the duration of the clip to be processed instead of believing what Barsss&Pamp;Pamp;Pipes says is the duration of the clip. This essentially means that the resulting clip will completely fill the Time Span selected; i.e. rests at the end of the clip are disregarded. When Calculate Clip Time is not selected, the tool trusts Barsss&Pamp;Pamp;Pipes version of the input clip, and includes any dead space at the end of the clip.

Warp Selected Clip causes the tool to modify the events in the selected clip in the Clipboard. A new clip will be posted to the Clipboard. (If anyone can point me toward finding where the Clipboard keeps its clip list, I would dearly enjoy changing this tool to modify the input clip's name instead of being stuck with the Clipboard's Clip#x names.)

Michael Rees - UpIsDown

Contents Index Help Prev Next

UpIsDown 

TOOL ID: INVR (0x494E5652)

DESCRIPTION: The UpIsDown tool inverts the intervals between notes in a sequence. This is a "real" inversion without regard for key (e.g. an ascending m7 becomes a descending M2).

SPECIAL TYPE: Branching, Real-Time.

USAGE: PipeLine, ToolPad.

CONTROLS: Controls in the UpIsDown window provide control over some aspects of the tool's operation.

The Initial Note gadgets allow you to set the pitch class and octave for the basic of the inversion, similar to the Flip tool's axis setting. The Initial Note specification is used only if theUse gadget is selected, and then the UpIsDown tool behaves mostly like the Flip tool. If Use gadgetis not selected, the UpIsDown tool uses the first note it receives as the basis for inversion. 
					 
The Initial Note gadget also display the current basis for inversion when the CChg gadget is selected, and the Use gadget is not selected.

The Reset On gadgets control when the UpIsDown tool reinitializes its internal initial note, The first two, Start and Play, correspond with the start and play transport controls. If the Startgadget is selected, the UpIsDown tool resets its initial note whenever you click on the start-from-beginning transport control. If the Play gadget is selected, the tool resets its initial note whenever you click on the transport play control.  The value used to reset the initial note depends on the settings of the Initial Note gadgets. If neither of the Reset On gadgets is selected, the UpIsDown tool never resets its initial note. TheCChg gadget resets the initial note whenever the designated controller's value is greater than 63 (a switch on). If the initial note Use gadget isselected, a switch on resets the tool's initial note to whatever is selected in the Initial Note gadgets. Otherwise, when the tool receives a switch on message, it resets its initial note to the next note it receives. In this case, when the tool receives the next note, the Initial Note gadgets are updated toshow the current initial note.

Three pop-up pipe menus allow you to select where the tool sends its control changes, and input and outputnotes. A straight pipe sends events on down the pipeline; an elbow pipe sends events to the tool's branch output; a plug deletes the events. Note that you cannot select a plug for the output notes.

As usual, the miniscule camera in the edit window title bar writes the tool's state to the track as a system exclusive message. The Snapshot menu item duplicates the snapshot gadget.

What happens with system exclusive messages is determined by two menu items. The tool responds to its sysex messages when the Use SysEx item is checked. Unless Free SysEx is selected, the tool passes these events to the next tool in the pipeline. Foreign sysex events are always passed down the pipeline. Snapshots and sysex don't work when the tool is in the ToolPad.

Michael Rees - Wye

Contents Index Help Prev Next

Wye Valve

TOOL ID: WYYE (0x57595945)

DESCRIPTION: The Wye Valve tool allows you to redirect MIDI events to another track in real time. Think of it as another cool Branch Out tool.

SPECIAL TYPE: Branching, Realtime.

USAGE: PipeLine.

CONTROLS: The State gadgets display whether the tool is currently passing events through the PipeLine, or wying to the connected branch.

The Controller slider sets the controller number that controls the state of the Bypass Valve tool. Controller-off messages (byte 2 values less than 64) set the tool's state to Pass. Controller-on messages set the tool's state to Wye.

When the Discard Control is selected, controller inputs are discarded. Otherwise, they are passed to the appropriate destination. Wye Valve system exclusive messages are always discarded.

The Reroute gadgets allow you to choose to reroute only Note On/Off events, or all MIDI channel message events.

The Snapshot gadget (the petite camera between the title bar and the front/back gadget) saves the tool's state as a system exclusive message in the track. If the transport is running, the message is saved at the time the Snapshot gadget is clicked. If the transport is not running, the system exclusive message time is the same as the Song Position flag.

NOTE:This is an ancient tool. It doesn't have the hip menu items to turn sysex on and off, or show controller names. Even the margins in the doc file are wrong! C'est la vie.