TheRack: Documentation

# rack303 (Beta release 4.04, dr9)

## Overview

"rack303" is a rack of monophonic synths, performing a modelling of the classic Roland 303 Bassline. Each synth is associated with its own crude monophonic sequencer, and seperately sends and receives MIDI note and control data. Presently, the sequencers are limited to 16 notes: 4 beats of sixteenths. In other words, this is a snappy little techno groove generator.

This release provides a few more features, and has bloated somewhat over the original. It now offers a crude sequencer edit/record facility, 4 LFOs, function key shortcuts, full midi in and out, and a couple of extra controllers. If you have Dual-66, you may not be able to rack up as many as previously. The added functionality more than compensates. The midi setup is fully configurable. There is an optional flashing mentronome thingy, and additional single window editors for all the sequences in the memory bank, and in the running synths. The sequence start and end points are now entered via the bar on the synth editor. For dr9, the menus are now displayed on a menu bar, rather than the browser app menu.

I've also debated whether there's any advantage in keeping the 303's in their own address space and adding a message passing overhead on top of the DSP. One advantage is that the 303's don't actually have to have anything in common other than the protocol which defines their relationship to the window. As long as they are syncable, there are a wider range of twisted musical possibilities. The previous versions "hack" and "fwack" are now obsolete, as the display control problem with LFOs is ironed out. There is another version "slim303" which doesn't carry around as much baggage. Other, more interesting interchangeable variants will follow. The other advantage is more pressing: the single address space version which I prototyped clapped out much more quickly.

## Usage

The first 303 to be run creates the main control page, and opens the midi in/out ports. Subsequent launches of the 303, up to the hard limit (8: if anybody can creatively use more, I'll extend it), create a status/control region, at the bottom of the main window, specific to the new synth/sequencer pair.

The screen is divided into four areas:

1. The top line and menu bar display system general settings.
   - The menu bar provides access to all the save and load functions, and toggling of the extra edit windows, and the miscellaneous options.
     The sequence/slider settings for either the running synths (the data displayed in the edit window) or the memory bank can be saved and loaded interchangeably. A set of patterns can be created interctively, saved to disk, reloaded into the memory (or back into the running synths), twisted to your hearts content. These can be also dropped onto the icon for a load on startup.
   - The global sequence edit window provides an edit page for every (potentially) running 303s sequence. Likewise, the bank editor provides a single page edit for all the sequences in the current memory bank.
   - The load configuration option loads an ascii file controlling parameter to midi control number relationships. The format for these files is obvious from the example file, and will certainly change to an inbuilt editor fairly soon, at which point the "save configuration" option will start to work (presently it does nothing: edit the config file in a text editor if you need to). The distribution includes a file to restore the normal defaults, and one to run the 303 off the controls of a promix01 in local mode.
   - The "Metrognome" option controls the flashing light in the edit window.
   - First in the next line is the name of the "top" 303, the one which is currently being controlled by the sliders and screen knobs.
   - Two text fields adjacent to this give the midi TX/RX port. This is currently only "midi1" and "midi2", but will eventually include a few surprises, such as our GeekPort object (in the planning stages), which, in the current state of play, may never see light.
   - The next two text fields give channel nos for global midi TX/RX. These channels will send note, and most importantly, control data to whichever 303 is in the top display, irrespective of its own midi channel settings. This can be particularly useful for controlling the 303's from another controller.
2. The next three lines give sequencer controls.
   - The "start" button starts the sequencer, and the "stop" button stops it.
   - The "rand" button generates a random 16 note riff in the current sequence, the key (major) given by the first note (the starting point of this riff can, of course, be set anywhere). A left click randomizes notes, a right click, the rhythm.
   - The "rec" button puts the sequencer into record mode. This functions in two ways.
     - A left click gives real time mode.In this mode, you are given a 1 cycle visual count in, followed by a one shot record cycle. The mechanism of the recorder is crude, but usable. It simply grabs the current note on, and stores it in the current sequence position, effectively trimming it to a 1/16th note duration. Quick passages of notes may well lose bits, as if more than one note is played over a sequence cell duration, only the last is used, and that is placed in the cell. See the note below about midi note 0.
     - A right click gives a step record mode. In which every midi note-on (or keypress) stores that note at the given position, and bumps a position counter on.
   - The "seqi" buttons load (on a left mouse click) and store (on a right click) sequence data into common storage. This data also includes the tempo, start, and end point settings.
   - The slider controls sequencer tempo.
   - The "trans" text field transposes the current sequence by a given amount. It is reset to 0 immediately after acting
   - Two sets of 16 text controls display the data in the current sequence, one line for midi note#, and one for velocity (amplitude). These can be editted, set to off (by note 0), tied to the previous note (by setting velocity to 0) or have their ties removed (by any other velocity). This is a fairly crude mechanism, but is about as good as it will get for a package that doesn't claim to be a "real" midi sequencer. If you want to use such, connect it to the 303s midi in port.
   - The start and end points are indicated by right and left pointing arrowheads in the gaps between the two rows of sequence data fields. They can be selected by left and right click respectively.
   - The begin point gives the point that the sequence is initially started from in its loop. It is indicated by an upwards arrowhead, and is set by a simultaneous L/R mouse click. This is most relevant to the sequence sync function.
   - The Mode slide controls more a few odd extended modes of the makeshift sequencer. "normal" mode is what it is, "rand note" randomizes notes at the end of a sequencs, "rand beat" randomizes the rhythmic pattern, leaving notes intact, "rand all" does what it says. "shuffle" picks a random sequence from between the first two sequences in the song. ":song" mode is...
   - The song text field is an arbitrary length string of sequence numbers, seperated by spaces, used when the sequencer mode is "song". For instance, "1 2 0 2 0 1 1 1 2", plays sequences 1,2,0,3,0,... from the memory bank in a loop. These are loaded at the end of a sequence, so the loop proper will not start until the initial sequence has played. I consider this fairly wierd and will change it as soon as some of the more pressing dr9 problems go away.
3. The next 10 or so lines are controls for the synth itself. The sliders are almost self explanatory, and are best understood by playing with them. They roughly correspond to controls on a 303.
   - The "slideri" buttons store (right click) and load (left click) synth settings to and from an area common to the 303 rack.
   - The first 4 sliders control the operation specific to the filter.
   - The next 2 sliders (feedback/delay) control the delay line.
   - "Glide" controls the 303's rude portamento effect.
   - "Amp" controls the output amplitude of this particular synth. "A-Decy" controls the amplitude decay parameter. "Pan" controls the L/R panning of this synth in the output mix.
   - The "Osc" slider controls the oscillator wave form (saw, square, sine, noise, thin square, and triangle).
   - The four sets of LFO controls give a variable rate LFO on oscillator frequency, filter cutoff, pan, and amplitude, respectively. The first in each set controls rate, the second, depth. The LFOs are reset with each note on, if the reset button is checked, otherwise not.
4. The last region contains controls specific to individual running 303s.
   - The first button sets the selected 303 to be "top" (i.e. under control of the screen sliders and buttons). It may have a different label if a different version of the 303 is running under it.
   - The "mute" button turns sound off for this particular 303, without altering sequencer status.
   - The next two lines give sequencer status ("Play/Pause"), whether it is muted (by an "M"). an indication of which area the 303's sequence was loaded from ("seqi" or "rand"), and a 3 digit indicator for the pan level of it's output (this can be useful for distinguishing between a number of running channels).
   - The next line gives the midi receive channel. Currently understood is noteon, noteoff, and keypress messages, and control data, which is sent to the sliders.
   - The next line gives the midi transmit channel. Control messages are sent from the sliders, and note on/off from the sequenceer. This can be damned useful for pre-hearing sequences if you have a midi keyboard and some headphones handy.
   - The following line gives a sequence to lock onto. When the indicated 303 hits the start of its cycle, this 303 will receive a start message from it. This continues until the sync lock is turned off.

As well, the computer keyboard is used to provide shortcuts.

- The function keys, f1-f8, are used to select a particular 303 and make it the top one. For this to work, the focus must be on the main window: you may have to hit a TAB or ENTER to do this to do this.
- In a similar manner, CTL-function key toggles the mute of the corresponding 303.
- In any numeric field, the up/down arrows increment/decrement the value of the field. The CTL and SHIFT keys increase the step size by 2, 5, and 10 (if both are down).
- Likewise, page-up sets a field to its max, page-down sets it to its min, and the home sets it to a typical median value.

  The relationship between midi control change messages and sliders is:

  - B_PAN controls the pan.
  - B_MODULATION controls filter resonance.
  - B_BREATH_CTRL controls the filter envmod.
  - 0x10 controls the cutoff frequency.
  - 0x11 controls the feedback.
  - 0x12 controls the tempo.
  - 0x13 controls the amplitude slider.
  - 0x14 controls the LFO-1 rate.
  - 0x15 controls the LFO-1 depth.
  - 0x16 controls the LFO-2 rate.
  - 0x17 controls the LFO-2 depth.
  - 0x18 controls the LFO-3 rate.
  - 0x19 controls the LFO-3 depth.
  - 0x1a controls the LFO-4 rate.
  - 0x1b controls the LFO-4 depth.
  - controller 0x0c controls the delay factor.
  - controller 0x0d controls the decay parameter.
  - controller 0x0e controls the glide parameter.
  - controller 0x0f controls the amplitude decay parameter.
  These are however configurable through the load/store configuration options in the top menu bar. These work both on midi in and out, depending on whether its set. They are also user configurable via an ascii text config file. This are configured by lines of tuples: , where name is one of: pan, resonance, envmod, delay, fdecay, glide , adecay, cutoff, feedback, tempo, amp, lfo1d, lfo1f, lfo2d, lfo2f, lfo3d, lfo3f, lfo4d, or lfo4f.

  ## Known Bugs and Limitations

  - There is a bit of lag in the keyboard/external sequencer response. It's not measurable, but more of a feel thing, and probably no worse than that in a lot of old analog gear anyway. This seems to do with the fact that the audio subscriber (as I understand it) doesn't like buffer sizes less than 4k.
  - Dropped settings files will not display the first sequence loaded, though they will play it. This is due to messages getting sent before the window is up.
  - The default sequence gets very annoying.
  - Control change information occasionally gets mangled. This happens somewhere between my keyboard and the BMidi interface, and might not be a problem on other setups.
  - More than 4 running at once will bring a dual-66 to its knees, requiring a 2 finger reset to alleviate the problem. This is not a problem on the dual-133. Forunately, the dual-66 is no longer available.

  ## Authors

  - David Karla (dak@cs.latrobe.edu.au)
  - Alistair Riddell (amr@farben.latrobe.edu.au)
  - Ross Bencina
  Correspondence (feedback and bug reports) will be graciously accepted. Post any queries to dak@cs.latrobe.edu.au.