rack303(Beta release 3.10)
Overview
The rack303 is a rack of monophonic synths, performing a direct
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,
an LFO, 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.
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. To make use of this, this
distribution also comes with a slight variant: "hack303". This version
applies LFO1 to pan, for dynamic panning effects, but is identical in
all other ways. Another version "fwack303" applies LFO1 to cutoff
frequency. Ideally, the rack should have a few more LFOs, but I'm
running out of room on the screen.
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), 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:
-
The top line displays general settings.
-
First is the name of the "top" 303, the one which is
currently being controlled by the sliders and screen knobs.
-
Next to this is a button marked "Settings", which is used to store
the current sequencer and slider memories (note that this may or
may not correspond to the current sequencer/slider values,
only to the button-accessed memory for these). A left click loads,
and a right click stores. Any wierd file error that happens will not
be reported. Also, the file is hard coded to being "settings" in the
current directory. This should be ideally off a save panel, but
the windows "BrowserSavePanel" was causing wierd problems. This should
be fixed up soon.
-
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).
-
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 C-major sequence in the current
sequence.
-
The "rec" button puts the sequencer into record 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.
-
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 (see Bugs below).
-
The start and end points are integer indexes into the sequence.
-
The 16 text controls display the data in the current sequence. These
can be editted, set to off (by note 0), tied to the following note
(by an '=') or have their ties removed (by a '-'). 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 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 controlls the oscillator wave form (saw, square, sine,
noise). The sine wave is tacky for the synth, and is mainly used
internally for the LFO.
-
The LFO controls give a variable rate LFO on oscillator frequency
(or another parameter in one of te other distribution versions,
"hack303" and "fwack303").
-
There is a conspicuous gap to the right of the LFO controls. This
is for another LFO for the filter. Unfortunately, the window
barfs badly when I add another parameter control to the window. I
suspect a bug/internal limitation in the View stuff, as it doesn't
seem to metter what kind of object I add to the display: it just freaks
out. When I found out what's wrong, I'll put LFO2 back in.
-
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.
As well, the computer keyboard is used to provide shortcuts. Notably,
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 to do this.
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.
- 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 work both on midi in and out, but it would be ace if they were
user configurable.
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. This is quite a whack of pre-
calculation, and I share your concern. (Be: please prove me wrong).
-
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.
-
The transposition textcontrol does not send a message if the text
is not changed. This is a problem with the BControl itself. Changing
the field with a space will get around this problem (eck!).
-
More than 7 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, but the limitation is presently
hard-coded.
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.