First alpha version of the Digital MIDI Memory Module.

By modular we don’t mean “fits into a 3U Subrack” or “accepts power vie a 10 Pin DøPFER style connecter…. if we say modular, we mean modular.

Lets break down the Sequencer in its functional Parts; one functional Part determines which Cell is to be chosen (that one can be separated further into external Clock detection, internal Clock, dispatching, User Interaction….lets keep it as one Piece for now) the other is the Cell (and the Grid of it) themselves.

Thus we divided the Exfilinator in these functional Blocks; Command Modules and Memory Modules.

A Command Modules main purpose is to tell the Memory Module which Cells Data should be output, communicating over an GridBus named Interface. You may connect more than one MemoryModule to a single Command Module.

Currently there are the following Modules:

- The Exfilinator Vector Sequencer as Prototype that acts just as described in the The Vector Sequencer Post below

- Analog Memory Module as Prototype with a Grid of 5×5 Pots that outputs pure Analog Control Voltages to a Master CV out or to 5 Line CVouts and has a separate stabilized PSU for stable Voltages (either 0…5V or 0…10V)
- Digital Memory Module in development that outputs MIDI Data; for each Cell Midi Note#, Velocity, Length, CC1, CC2 and Channel.

We are thinking about some other Modules that might expand the Exfilinators Universe:

- The Vector Recorder – Command module that plays an editable List of Grid Positions
- MIDI to GridBus Interface so you can drive your Analog Memory Modules directly from any MIDI capable device
- GridBus Mixer is a unit that mixes/switches 2 GridBus Signals with live User Interaction so 2 Command Modules can drive a set of Memory Modules simultaneously

This way you can configure your personal Exfilinator System just like you would build your Modular Synth. As promised; when we say modular, we mean modular.

Some thoughts about sequencing;

Classical Step sequencing is one dimensional, a row of steps (this single line makes for 1 dimension) on which you can move forward, backward, some Sequencers allow repititions, skips, jumps etc… but its always back and forth mostly on a multiple of 8 Steps.

Now free your Mind and take a breath, we are breaking with habits.

What if you had another dimension to it, not only one single row, instead a Grid of Cells. Each Cell could hold various musical interesting Data such as CV or MIDI Data.

Then how big should this Grid be and how can you navigate thru it.

For the Size of the grid the answer is simple: infinite. This is achieved by allowing to cycle thru the rows (x-direction) and lines (y-direction), when you leave the grid to the right you come in on the opposite side at the same line. Thus you have an finite number of Cells but you can move in any direction infinite as far as you want.

Now comes the tricky part, the amount if Cells. We chose a 5×5 Grid for several reasons:

- 5 is a Prime, so every row and every line is an algebraic ring (more on the implications in a later posting), one of the advantages is that you touch every element in a ring with any constant number of steps you move, so you hit every cell sometime. This is only achieved when the number of cells in a row/line and the step size have no common dividers, therefore you will have to choose a prime number for the lines size.
- 5×5 is physical feasible, 7×7 makes up to 49 cells so you would have to tune 49 values before you can start making music
- 5 is quite nice to split any chord into or for small fractions of a melody
- 5 is my sons favorite number

Now that we have justified the size of the Grid how to navigate? Assuming that the grid is overflowing on each side every cell is like the other, any determination on starting point is only convention. We chose (x,y) = (1,1) as the upper left corner only counting positive, so the lower right corner is (5,5). Oh, this looks like something familiar from school some time ago? Yes, indeed, its called a *Vector*! Now we can point to the start of our sequence with this Vector, its called the Reset Vector (Xr,Xy), every time a Reset Event is triggered the Sequencer will move to this Cell on the next Clock Tick (or instantly when stopped).

So where to move on the next Clock Tick? Follow the Move Vectors! Lets define a set of 4 Values (Xt, X, Yt, Y) Xt, and Yt define the clock tick on which the Sequencer moves X or Y Steps in Positive (to the right/down) direction. Thats about (nearly) all. With these 4 Values you determine how the Sequencer crawls over the Gris, lets look at an Example:

Set Xt=1 X=1 Yt=1 and Y=0, this means move every clock tick (Xt=1) one step to the right (X=1) and every clock tick (Yt=1) do nothing (Y=0) on the y-Axis.

If you hit start the Sequencer will jump to the Reset Position (1,1) and on the next clock tick it will move one step to the right, overflowing at (5,1) to (1,1) just like an old school Sequencer would do.

Now set Yt=5 and Y=1. Hit Start. The Sequencer now will move one step to the right and after the rightmost Cell on the first line (5,1) it will jump to the first cell in the 2nd line (1,2) determined by the Yt=5 (do every 5 Ticks) Y=1 (one move downwards). See this Video.

Just with these 4 Values you can do a myriad of possible movements across the grid. BTW, there is no reverse movement or negative steps as moving one step to the left means exactly the same as moving 4 steps to the right…

To complicate things a bit – or make more interesting sequences – the Sequencer has for both Axis *Events*, defined by (Xet, Xev) and (Yet, Yev), with Xet, Yet the number of clock tick when the Event occurs and Xev and Yev defining the event type.

These Events can be anything from this collection

- Reset to a certain position on the Axis
- Reset to Reset Position
- Reset to a Jump Position
- Jump additional n Steps
- Repeat N Times the Actual Step
- Change the Step Width
- Reverse (only if StepWidth= 1 or 4) for KnightRider Blinkenlight Effects
- Swap X and Y Rules
- Stop Sequencer

So the complete behavior of the Sequencer can be tweaked by 4 Parameters for the Vector, 4 Parameters for the Events and 4 Parameters for 2 Jump Positions making up for Patterns you never could achieve with classical Step Sequencers and are – albeit iterative – strictly deterministic (if you don’t use random events).

We call this principle of sequencing *Vector Sequencer* and its name is

*The Exfilinator*