Hi all,
I am the author of the Owl Morphing2D patch that we built with @mars two years ago. It is a morphing oscillator for complex “user made” wavetables. So you need an external wavetable editor as the one I suggested. The Owl patch worked as a 2D XY axis that interpolates between waves. The hidden part is an additional “third” dimension for the frequency sweeping to avoid aliasing. I’d like to make it a Magus patch and I’m asking for some help and recommendations.
First, you can have a look at the previous works :
Previous thread about wavetable oscillator
Owl modular patch
I just got my Magus working and updated recently so I am very new to it. I managed to build a quick patch using the screen and two different morphing osc. And right input is for FM.
Here’s the link : Github link to patchsource
I can upload it in the web patch library if someone wants to store it this way. However I think the player doesn’t support it.
I don’t have much modules now. Could someone tell me if v/oct left input works properly ?
Considering its numerous patch CV points, one interest could be to use Magus standalone even though that’s not my use. So I got different ideas that I can resume in three patches.
PATCH 1: Polyphonic 5 Morph Osc
As it is now with CPU, I can run up to 5 oscillators together. So it could be a MIDI driven patch that you can remotely play with a midi keyboard. Or a 5 notes chord transposed with v/oct input. I would use a single wavetable for every osc. I’d include envelopes as well as LFOs to get around the X and Y wavetables axis. FM in would be nice too.
I saw there is midi integrated in a few patches though I am not familiar to it. I guess there might be algorithm to sort out polyphony with midi notes…
PATCH 2: Dual Morph Osc
Back to monophony, I’d make a 2 osc patch again with integrated LFOs to trip around the XY. This one would use 2 different wavetables. v/oct input and why not MIDI too.
PATCH 3: Dual Morph Osc with Sequencer
This would be the PATCH 2 standalone version where the LFOs parameters get limited to leave more space for a sequencer and envelopes. I’d like the sequencer and LFOs to be driven by an external tempo clk input.
Now some general improvements :
SCREEN
I managed to display the left signal on the screen. A nice improvement could be to split the screen for left and right. And a big improvement would be to display the interpolated wave. Which is, IMHO, a lot of work for a small result because X and Y phases are not locked and it’d need structural changes.
FM
Here I’m not sure how to do. Default patch point are DC coupled 0-10V if I’m right. So it needs audio amplifying to be used as an FM input around +5V. Then this float parameter has to get offset -0.5 to get back to audio values. And finally, this has to go in the setfrequency method argument (freq + FM). Nevertheless, I never succeeded this way
So I thought another solution is to use one audio input as FM input and write the setfrequency method in a buffer loop with agument (freq+right[n]). This gives results but not sure it’s the right result. Could someone try and give his view ?
TEMPO
I’d like to make a trig input to synchronize LFOs and sequencer to an external clk. I don’t remember anything like this in the C++ patch library. So I wonder: Is that even possible ? And what about generating a clock ? So that Magus can be either master or slave.
LOW VOLUME WAVETABLE
I noticed some waves are very low volume so it might need some sort of normalization. Maybe an other type of interpolation could give better results. It is linear for now. Alternatively, a compressor would do the job.
BASS
As explained in the previous threads, the 256 samples waves aren’t made for bass (except if you’re into this dull digital bass sound ). 47Hz Bass playback at 48KHz samplerate needs 1024 samples/wave. So it would need a lot more storage. I need to make some calculations to know how big I can expand the wavetable and how big can the header files be.
There are few options here. The simpler way is to change all waves to 1024, this would induce UGE storage needs and a wavetable downsizing. Otherwise, for “dual morph synth”, we can define left channel as 1024samples “bass” oscillator over 4-5 octaves before it aliases and right as 256samples “lead” (e. with two octaves offset). Finally, I think it is possible to playback different sized waves and this would be the most advanced algorithm but way different than the actual one…
WAVETABLE EDITOR
As I mentioned in the previous thread about wavetable oscillator, waveedit makes 256 samples wave “by default”. I managed to change the sample length to 1024 in the source code here and then build the editor myself on ubuntu. So that’s a good start ! Let me know if you need some help with that. It’s actually a very useful free tool ! I’m not sure you can find an equivalent out there… You can do many sort of editing on it.
I thought about a nice feature for the lazy ones. It is a wavetable interpolator. So if we take the existing Owl patch as an example, instead of making all your 42 waves yourself on WaveEdit, you could just make 6 waves for the first X axis and 6 waves for the last X axis. Then enter that in an algorithm that creates the “in between” waves, in a way you get a “progression” from first to last wave on the Y axis. We could even extend that to the “corner” waves and let the algorithm build all the “inside waves” with some degree of randomness, effects…
This could be a way to reduce the header .h file size too.
Ok… Already a long post ! Thanks for reading.
Please share your ideas if you’ve got other features.
I am not sure how and when I’ll come up with new patches but I’ll try to get into it when I have time. Feel free to take part of it ! I can help you understanding the code. I’m not yet too familiar with github group working so let me know if I have to create specific branch or unlock anything.
I can also create a wavetable library for Rebel Technology devices so that we can share them.