Befaco Rebel Lich + Gen~ journal

Hi all, with the release of the Lich I am taking a dive into gen~ patch development and would like to document and share procedures and resources that I’ve been able to collect or figure out from information available on the forum, github and experimentation.

I am a new comer to the OWL platform, so these posts might seem fragmented and biased to Lich functionality, but platform wide gen~ support will be kept in mind as much as possible.

corrections, suggestions, enlightnment are welcome!
I’ll update tthis first post as more information is available and the module matures.

At this time, firmware 20.10, supports the following in gen~

A B C D Knobs

knobs are accessed via gen~ objects “Param A”,“Param B”,“Param C”,“Param D”
their range is defined from 0.0 to 1.0 and can be adjusted with gen code to suit your input objects and functions
CV inputs for A,B,C,D knobs are hard linked and summed to the knobs values. Their attenuators are unipolar.

2 buttons that are hard linked to Gate 1 and Gate 2 jacks

buttons are defined via gen~ objects “Param ButtonA”, “Param ButtonB”
their 2 values are defioned from 0.0 to 1.0

USB input
(Not fully explored yet - only assumptions from what was found on forum on github)
Mono, Omni channel midi input for Note Gate, Note Number, Note Velocity, Pitch Bender are defined as"Param Gate", “Param Freq”, “Param Gain”, “Param Bend”
How the incoming midi values are converted can be seen in the gen~ translator code here

USB output
(not explored)

Gate Out
no Lich support in firmware 20.10
current firmware/hardware Input parameter link is “Param Push” - however on Lich this is an Output parameter, so it is inaccessible

CV Out
no Lich support in firmware 20.10
update 12/5/2020
CV out support being tested with gen~ object defined out 3 and out 4 acting as signal outputs
update 12/9/2020
CV is 0-10v

general discoveries
CodeBox input parameter definition works

CodeBox functions to define “Push” values were unsuccessful
“setparam” object for nested gen objects was unsuccessful - expected behavior was to nest “Param F”, “Param G” and “Param Push” in a gen object withing parent gen~ object and use “setparam” to change values resulting in CV and gate outputs from Lich jacks.
update 12/1/2020
some gen~ objects are autotranslated to economy versions or native STM versions at compilation - this can cause a difference in sound when uploaded to Lich
update 12/4/2020
“cycle” object won’t understand negative values unlike in gen~, so you must use an “abs” when feeding a number
overall oscillator frequency seems lower than when testing in MaxMSP and on the website
update 12/9/2020
tricking gen~ Data to populate from code is possible with using a selector object, but maximum supported values is 253 via the web encoder currently. You can split the data into more loops or just hardcode poke functions per sample.

Owl Digital mk2 Rev7 Specs
48kHz 24-bit stereo audio
this could be a reason for differences in sound in Gen~ vs Lich - same settings on dev machine should help
3500 operations per sample
STM32F427 180MHz, 256Kb RAM, 1Mb Flash
8Mb NOR Flash
Integrated DSP, FPU, DMA

1 Like

I was curious when will the first Lich users appear from the beyond, but it’s @undefined!

There’s also firmware v21.0 out there. I’m not sure if this would make any difference for CV/Gate outputs, @mars will probably clarify this soon. It’s main difference is that instead of USB MIDI interface you’ll get USB Audio interface (which includes MIDI too). There may be some issues on Windows as its USB audio device handling has certain problems, other OSs should be less problematic.

Also, official docs for Gen~ patches don’t exist yet, but I’m sure that they would be quite welcomed if you’re interested in making some.

Hi @antisvin! Yeah I am sure we will get docs sorted and some videos will appear. The platform is very capable already.
Currently I am experimenting with the intricacies of gen~ and how patches sound in Max, on the website and on the module - all seem unique so far.
I’ve built mine so there could always be building error, but the other patches seem to be fine - its probably some funkyness in the object translation and support.

Gonna be a good time
USB audio sounds insane.

hello @undefined, and welcome! Thank you so much for collecting and posting this information.

“setparam” object for nested gen objects was unsuccessful

We never got output parameters to work in gen~, though we explored a few options together with Cycling '74, such as abusing the history object.

The conclusion was that it’ll be easier, from the patching point of view, to instead assign any extra audio outputs to any available output parameters. In the context of the Lich, this will probably mean that if you create a gen~ patch with 5 audio outputs, then they will be assigned to: audio left and right, CV out 1, CV out 2, Gate out.

Along with updating the docs it’ll be good to get some updates done on the gen integration. How does this plan sound to you?

Coming soon, not released yet!

Sounds great and awesome job with everything so far.

Signal outputs would be great.

Currently I am exploring the differences of a compiled patch running on Lich vs the website vs maxmsp.
Hoxton website seems to have hosted a wiki with some of that information but looks like it blew up - but there was a post that copy pasted some text about the math operations like tan and cos being different - i’ll add that once i find it again.
The double precision calculations in gen~ vs how OWL does it is something unfamiliar too right now.
Looking forward to the Lich updates and will be glad to tidy the package up if you need extra hands

My bad, I saw the tag in github releases page and though that it was officially released. I hope it would take less than “2-3 months”! That said, it may be stable enough at least to make a pre-release build.