edit: attached project.hex-es for the LPC and STM32f4 cores in case anyone wants to try this out - let me know if you notice any bugs. The STM hex is untested - I haven’t built my stm core yet.
How to use the Robotizer:
MENU+FX -> Robo - enters the robotizer page
Robot on/off - enables and disables all robotizers for this track.
Prob - the overall probability that any robotizers are applied. This overall probability setting is combined with individual probability settings for each robotizer, so you can make one robotizer happen more often than others (eg: change notes often, but never skip them, and only rarely change the velocity). Hold SELECT and use encoders to set individual robotizer probabilities (indicated by vertical bars beside each robotizer). Individual probability is multiplied by overall probability, then compared with a random number. If the random number is lower, then the robotizer will be applied. A different random number is called for each individual robotizer.
Skip - skip some steps (play them at zero velocity)
Octave - changes octaves. the selected number is the range - if “2” is selected, the note will jump up or down 0, 1, or 2 octaves.
Note - changes notes. Cumulative with octave changes.
VelCC - velocity changes. This robotizer is weighted using some bad math in order to avoid out-of-range numbers, and produce more musical results. As a result of the way it’s implemented, it’s got a distinct character when the numbers are low (you’ll get more loud accents if you keep the number low when you’re starting with a velocity that’s already relatively loud.), and a different character when the number is higher.
Len - changes the gate length.
Sustain - adds sustain to some notes.
NoFX - temporarily disables Echo and LFO.
+Echo - Adds echo to some notes. Uses the settings on the Echo FX page, ignoring the FX enabled/disabled state on the Echo page. In other words: adjust the +Echo setting on the FX robotizer page to occasionally apply echo to notes, using the echo settings currently selected on the FX echo page.
+Duplicate - Adds FX Duplicate to some notes. Uses the settings on the FX Duplicate page.
Prob, Skip, and NoFX do not have ranges, only probabilities. The vertical bar and the number for these robotizers controls the same variable.
ROBOTIZER MASK:
- hold SELECT on the robotize page and use GP buttons to edit robotizer mask (indicated by GP LEDs). Only selected steps will have robotizers applied to them. Mask is 16 steps long, so it repeats from measure to measure.
###############################
As a first MIDIbox programming project, I’d like to screw around with the humanize function a bit… I’m thinking I’ll duplicate it, call it humanize2 or something, and add a few enhancements. To start with I think I’ll make note, velocity and length each have individual intensity settings rather than just on/off, then maybe add a few other features, like probability of playing each note, delays and repeats, etc. Then, I was thinking I might add a “humanize mask” - use the GP buttons to select steps in a measure, and the humanizing would only apply to the selected steps (so you could set it up to only humanize certain steps in each measure).
From a look at the code, at least the first couple of items on that list look like relatively easy projects for a C noob.
I’m wondering where I should store the data for this though - looking at the code, it seems that seq_cc_trk (defined in seq_cc.h and .c) is used to store the track data that’s accessible via CC - eg: the current humanize values are stored there… I don’t want to interfere with the already defined CCs, and there aren’t too many free slots apparently. Since this is just a screwaround project I don’t need my variables to be accessible by CC. Is there another struct where track variables not accessible by CC are stored that I should use?
[STM-project.hex](< base_url >/applications/core/interface/file/attachment.php?id=11848)
[LPC-project.hex](< base_url >/applications/core/interface/file/attachment.php?id=11849)
