Patch showcase - Stereo oscillator based on 3D curves

I don’t think there’s a way to profile/debug patches on device directly. OWL is running on baremetal hardware with an RTOS, patches themselves have separate stack and are loaded to memory at runtime. So patch code is not visible with a debug build of firmare. It’s impressive that Martin made it work in first place, but unfortunately patch contents is a black box for normal tools that are used to debugging firmware.

If you want to profile performance specifically, it might be possible to read MCU cycles counter from memory directly. This is the register that is used by firmware for measuring CPU load, so you could try reading a 32bit unsigned int from 0xE0001004 before/after function call (haven’t tried it myself). Also, https://godbolt.org has support for gcc-arm, I’ve used that for checking how different end up compiled a few times.

Also, I was told this may be useful with native builds - gdbplotlib · PyPI (haven’t tried it myself too!)

1 Like

Awesome, thanks for all that info and resources.

There are methods in Patch you can call to get the number of cycles, or time, since the start of the block.

https://www.rebeltech.org/docs/classPatch.html

So you could do e.g.

float t1 = getElapsedBlockTime();
dosomething();
float t2 = getElapsedBlockTime();
debugMessage("time", t2 - t1);

I’ve updated this patch so it now smoothly blends between the overtones introduced by P and Q integer values and I added parameters to set the FM Ratio (was 2x the oscillator frequency, can now run from 1x to 4x) and zoom the camera in and out (defaulted to zoomed all the way in).

I’ve also added a Genius version that maps the parameters slightly differently and allows independent control over the X, Y, and Z rotation rates (they are tied to P, Q, and S in the Lich version). The Genius version also displays the knot on the screen so you don’t need a scope to see it. :slight_smile: I’ll probably do a video with the Genius soon.

Knoscillator G! That’s my favorite gangsta rapper!

I think it would be usable on more than Genius if you move Tune to first parameter. Parameter E is the expression pedal input on OWL modular/pedal and is present on some devices (i.e. Witch). When it isn’t available, losing direct control for Morph seems like the better option. And patches with UI will run on devices without display without issues as you probably know. That said, it begs for either editing with encoder or using an external MIDI controller.

Have you considered using right audio channel for external FM signal instead of internal modulator’s envelope? It seems like a bit more interesting way to use it.

Also, how does PM work/look on this oscillator? In case of quadrature stuff that I’ve experimented with it preserves VCO’s visual shape unlike FM. Might be an interesting direction to check if you haven’t tried this yet.

Yeah, my intention for the Genius version is that it is specifically for the Genius, the Lich version is probably more appropriate for older devices, particularly the Witch.

I did consider that and you might be right that using an audio input for external FM would be a more interesting way to use that. It is the way it is because I wanted to have CV control over the amount of the internal modulator because that modulator is sync’d to the frequency of the oscillator, which provided an interesting way to “brighten” the sound. If I moved it to a MIDI parameter on Lich it’d be much more difficult to get dynamic changes to it and creating a similar effect with external FM would be much more complicated. I suppose I could move that to parameter B on the Lich and move Morph to a MIDI parameter, I’m on the fence about losing direct control for Morph. The change in sound is definitely less dramatic than controlling the amount of the internal modulator.

The internal modulator is doing PM, not FM, even though the parameter is called FM. And yes it’s like that because it doesn’t disrupt the fundamental pitch as much, it just makes the sound “juicier”. See: