OTHER MODULES

ACCORD R.U.L.E

How to use and Methods

This page will give you some information on using the RULE and how truly flexible it is!

Here are listed tutorials to better help you understand the setup and creating of lines that will make your own Rules for your own system. First I will cover the basics of the Rule Blocks, then how to include a built-in generator or two with your composition to open up a full expanse of possibilities.

The Basics

The 12 jacks, A-L, are bidirectional until defined by a line in a Rule Block. To create lines, click on the [RULEBLOCK] QB (Quick-Box) button, select (1) for the first Block, and click again to enter the Rules Editor. If the Block is empty, all you will see is the "EXIT" selection to save work and exit back to the QB buttons.
To start, imagine doing something really simple like channel a CV voltage from jack A to jack D. Follow this step by step guide.

Scroll the encoder left to make sure the arrow is at the top. This is where the first line of your Rule will be.
1 - Push the encoder button to "click". This will open a drop-down with a selection of what the destination of this line will be, headed by <?>.
2 - Scroll down one to "OUT" (in white) and click. The destination is an Output. "OUTA" will show.
3 - Scroll down to letter "D" and click to select. Now you should seek "OUTD=".
4 - Scroll one right and the Source dropdown will appear as <?>.
5 - Continue scrolling 3  ticks more until "CV." appears in the center. Click on it to show "CV.A" as the source.
6 - "A" already shows so now the line can be finished.  Just scroll right past the end to finish. "D" jack LED will light Red indicating a CV output.

Now the Block has one line: OUTD=CV.A  Any CV input plugged into jack A will be duplicated at jack D. This isn't very useful, well, unless you have a weak CV force that you need to boost the current to drive a module. With this same line, an octave boost, a negative inversion, a signal multiplier, or divider etc. can be done by extending it a little. Lets say you want to add/subtract two CV's together for, perhaps combining two LFO's. This is simple to do with this one line:

1 - Click on the line to edit it.
2- Scroll to the right until just after the A, then click.
3 - Operators (+, -, *, etc) will pop-up. Select "+" as we want to add CV's and click.
4 - Scrolling right will select the second source options. Choose "CV." and click.
5 - This time select letter "G" which will be the second CV input. Click to finish and scroll off right to enter the edited line.

The first line will now be OUTD=CV.A+CV.G  With CV's into A and G this is a basic adder, i.e. A=2 volts and G=1 volt means B will have 3 volts. As all jacks are bipolar, putting 2 volts into A but -2 volts into G will output 0 volts on D. To create a "mixer" scenario instead, change the "+" to "" (asterisk). This will require the voltages , or one of then, be much smaller though. i.e. 3 volts x 3 volts = 9 volts! For a modular friendly scaled multiply, select the "(x)" operator instead.
If an audio frequency is used, this 1 line Rule will act as a linear VCA. Using "^^" (scaled exponent) operator will emulate a real audio gain type VCA.

This is just one line. With more lines much more refined Rules can be created.

Using Variables

To act as intermediaries between inputs and outputs, the value or state must be held in a holding cell. These "cells" are called variables. They are a representation of the value you pushed into them. In the previous examples, the values are mathematically processed then shot toward the output immediately. With variables, these results can be held, processed, then released to the output further along in your Rule or in the Block(s).
There are two types of variables, VAR and BUS. The VAR variable (there's 8 of them) only holds information until the end of the Block. By the next Block they are cleared and ready to use again. The BUS variable on the other hand will hold the value indefinitely. These are useful for accumulations, or keeping a value that was caught by a trigger that needs to be recalled by a different trigger at another time. VAR1 to VAR8 and BUS1 to BUS8 can also be "seen" by some of the built-in generators.

The first line can be made to send the CV.A+CV.G information to a variable instead of directly to the OUTD.
1 - Select the first line (arrow points to selection) and click to edit it.
2 - Click on "OUT" and select VAR instead. Click to change. 
3 - The VAR# should be at "1". If not click the number and change to 1.

So the line will now be VAR1=CV.A+CV.G  Now, what can we do with VAR1? We could use it to set a built in LFO, or ENVelope, or perhaps quantize it? OK, let's do that!
1 - Move the arrow down to the next line, click to make a new line. Scroll to "VAR" and click, the select "2" and click. This line will put a value into VAR2. "VAR2="
2 - Scroll down to "MATH->" and open. Scroll to "INT" and click. next select "VAR1". Scroll right to exit line. Line 2 should be "VAR2=INTVAR1"

Now VAR2 will hold a value that is quantized to the nearest lower Volt like 1 octave, i.e. 1.5 volts = 1 volts, 3.5 volts = 3 volts. You could add a third line "OUTD=VAR2" to verify.
To quantize to 1V/Oct notes, a line would need to be inserted before this one, but first, modify the 3rd line to "OUTD=VAR2÷12" ( use number format 000 not 0.000 as > 9.999)

Inserting A Line

Now is a good time to mention how to insert a line. It's simple. The RUN and STOP buttons, when in the Block editor, are used to show the line numbers, and to toggle insert.
So scroll to the 2nd line,  VAR2=INTVAR1  and push the STOP button to toggle a space for a new line. Add the line VAR1=VAR112.


RULE Prelim. Tutorial 2

So a brief explanation of what's going on here:


The Source voltage at CV.A and CV.G is moved to VAR1, which then multiplies itself by 12 (12 notes in 1 Volt right?) then uses the INT  function to round it down to the next lower whole number. Then next line simply divides it by 12 and sends to OUTD.

For example, if CV.A had 2.7, 2.7 * 12 = 32.4. The INTeger of  32.4 is 32. 32 divided by 12 is 2.666, or 8 notes above octave 2, or Ab2 (if using C scale). What matters is the output is now quantized to notes @ 1V/Octave. How many ever divisions per volt you want is controlled by the numbers (12 and 12). This could be a variable that is changed by yet another CV input, thus CV controlled quantization steps is easy attainable!

The Video the the left is a simple tutorial about making entries in a Block if you want more on what we have covered thus far.

Using Conditional Statements (IF, ELSE):

There may be a requirement to switch something from one process, or Rule, to another. Lets say for example, you have an old school Sequencer's CV out feeding CV.A  of the above example to quantize notes but want to slew some of the notes. The Sequencer outputs a CV to the Slew module on certain steps, but the quantizer we made does it's job and turns the slew into a steppy glissando. Maybe this isn't desirable, so we can use a conditional statements to bypass the quantization rule altogether.

Scroll to the first line and press STOP button to insert a line. Click on the new space and scroll to "IF>". Click it and IF will be the highlighted conditional, so just click to use it.
Next we need to decide which jack will trigger our IF, probably jack J, to keep it all on the same line of jacks. So add CV.J, then the comparison logic can be selected. A gate (GT.x) could be used here also but to keep it flexible comparing a voltage is better. So if the Quantizer is to disable when the Slew is active, use "<", then a number, 2.500 would work in most scenarios.
Now Our newly inserted line looks like this: "IF CV.J<2.500". IF CV.J is low, then Quantization will happen, but if it's high, nothing will pass. This is because once the IF statement is no longer valid, the rest of the lines in the Block are ignored. An "ENDIF" after the Quantizer lines would allow more rules to be added, but if any line writes to OUTD it will over-ride our Quantizer no matter what. What can be done?

The "ELSE" statement is entirely for this purpose! After the now 5 lines, click the next empty line, select "IF>" and click. Scroll to "ELSE" and select. The RULE will want another condition entry "<?>" but don't select anything, rather just click on <?> to skip, and scroll off of the line to save it. Now the lines after ELSE will execute, but only if the IF statement is false.
The next logical step is to simply add a line like the original was before we got fancy: " OUTD=CV.A+CV.G " or just  " OUTD=CV.A " to act as a pass through. Now the Rule will execute as desired!

Using ENDIF

The eighth line should be "ENDIF". Let me explain. The ENDIF statement closes the open IF so that other lines can follow without becoming part of the condition. If an ENDIF is not placed, all following lines (in this case) would only execute when CV.J is over 2.5 volts. At the end of a Block, all open Conditional statements are closed automatically, so if many line are needed for your rules in this block, then it does save space, but even for visual reference, an ENDIF is a good idea!

Using Other Conditional (AND, OR, NOT)

While in the conditionals list you may have noticed these. While nesting (IF statements anywhere inside of other IF's) is permitted, AND, OR, or NOT must be used immediately after an IF or after an ELSE only. This is mostly to avoid visual and conceptual confusion, as using these can get quite complex. Even with this syntax enforced, things can get out of hand quickly. Here is an example listing:

IF CV.A>CV.B
OR CV.A<CV.C
BUS4=CV.A-CV.B
ELSE CV.C<0.000
AND CV.A>-1.500
BUS4=BUS4+0.083
ENDIF
If other declaration lines (like BUSx=) were between the IF and OR, or the ELSE and AND it would become hard to look at, and hard to understand, especially if a line was between the ELSE and AND statements. Would it execute if the ELSE by itself is true? Or would the AND need to be true?

NOT, a statement that, if true, invalidates the IF or ELSE before it, would be insanely confusing! Anyway, most of this you'll likely never use unless you are really into logic and permutations. BTW the OR's and AND's have no use limit (well except the Block size!) so many conditions can be strung together.

 

Conditional Tips

Certain practices with conditionals can be greatly advantageous. Using ELSE statements can be much more compact if you consider the control voltage for example. To the left is a pedantic way to do a CV steering patch, while to the right is a sequential organization. Both will work but the right is more compact:

IF CV.A<1
OUTC=BUS1    Bus1 is sent to OUTC
ENDIF
IF CV.A>1
AND CV.A<2
OUTF=BUS1    Bus1 is sent to OUTF
ENDIF
IF CV.A>2
AND CV.A<3
OUTI=BUS1     Bus1 is sent to OUTI
ENDIF
IF CV.A>2
AND CV.A<3
OUTI=BUS1
ELSE CV.A<1
OUTC=BUS1
ELSE CV.A<2
OUTF=BUS1
ENDIF

...saved 3 lines

I hope you have learned a few things with this little tutorial, and that I have conveyed the possibilities of this module being part of your modular tools in the future!

I will add to this page as time goes on, stay tuned....
 

 

Contact: freshnel@freshnelly.com

R.U.L.E. Basic Architecture (click to expand)


 

 

VIDEOS

This video is creating rules using an HTML page and sending over Wireless directly to the module.


 

 


 




Web Design by Yours Truly!  I know it looks like something out of the 90's when a 1 Mb webpage was unacceptably large.
We strive to separate ourselves from energy consuming bandwidth-heavy script, AI, and other wasteful environmental unfriendliness
toward this beautiful blue pearl in space we all call home. I urge you to do the same please. It feels good!

Last Update July 17th 2026