On a theoretical level and pure out of interest:
Did you figure out the two fm inputs (global and pitch) and their differences? I still kind of fail to grasp it.
Anyway, thanks and it will be an instant buy for me, if only it is to modestly support your great efforts in your wonderful collection!
Mostly figured out - I had some communication with a Sofia owner. Both FM are exponential. The Global modulates the fundamental only (counterintuitive based on name), while the pitch modulates the fundamental and both ripples. I will rename things to make some stuff clearer. Iām not sure if the FM is supposed to affect the ripple decay (damping), but I am not worried about it because I like what I have - For me the decay envelope is triggered every time the fundamental hits phase 0, but otherwise is not affected. My module will add independent phase modulation for fundamental, ripple A, and ripple B, as well as hard and soft sync for the fundamental.
They both operate in virtual 3D space. Cross Fade 3D produces 1 output by fading 8 inputs across 3 dimensions. Pan 3D produces 8 outputs by panning 1 input across 3 dimensions. Both modules are fully polyphonic.
You can read the Cross Fade 3D manual and Pan 3D manual for the feature set so far. They may be complete, except I think I want an option to offer equal power pan/fade in addition to the default equal amplitude. Iām just not sure how I would test that.
Let me know what you think about the importance of an equal power option, or of any other features/enhancements you think the modules should have.
I am in no hurry to release this next version. There are some more free modules I want to add. I also want to delay release until I have taken over management of the 4ms Meta Module port of Venom so I can release for both platforms simultaneously. I have yet to dig into that code. So much to do - so little time.
GitHub users can get the development binaries below:
I crudely tuned by ear 8 different voices, each with a pair of saturated sine waves tuned one octave apart. I use the Pan 3D to pan a 10V Level CV to the 8 voices of one VCO Unit. I use the Cross Fade 3D to directly cross fade the 8 audio outputs of an identically tuned VCO Unit. They each should give identical results, so when I switch between them there should be no audio anomalies.
Use the Bogaudio Switch (near upper right corner) to switch between the Cross Fade and Pan versions.
You can also activate the Cross Fade 3D Mono Output button to sum the output to a monophonic signal, and it also should give the same result.
If the two VCOs get out of sync for some reason then you will hear a disturbance when you switch between the Fade and Pan outputs. You can use the Venom Push 5 top button to resync the VCOs.
You can use the blue ML Modules switch to choose between three options for controlling the X, Y, Z pan/fade coordinates.
Top button uses three uncorrelated triangle LFOs to automatically modulate X, Y, and Z. All X, Y, and Z controls should be at noon, and the CV attenuators should be fully clockwise at 100%.
2nd button uses three Bogaudio Walk modules to automatically modulate X, Y, and Z. Again, the X, Y, and Z controls should be at noon, and the CV attenuators should be fully clockwise at 100%.
3rd button disables CV automation and lets you manually manipulate X, Y, and Z
Lastly, the MindMeld switch in the upper right lets you get an interesting stereo image by directing the low voices to the left, and the high voices to the right, and applying asymmetric Chronoblob ping pong delay. This only works properly when the Bogaudio is switched to the low Cross Fade option, and the Cross Fade Mono Output button must be off.
I am still slowly moving forward with my first paid module containing the complex formant oscillator inspired by XAOC Sofia. I got approval from XAOS to use the name Sofiaās Daughter, and to mention XAOS Sofia as the inspiration for the module in the documentation. Below is the faceplate. Now I just have to actually code the oscillator(s)! I know how to make it work, but I am a bit worried about CPU usage. It requires 5 independent polyphonic VCOs, with lots of parameters and inputs. I keep getting hung up on how to best use SIMD to minimize CPU usage for both monophonic and polyphonic use cases.
I got sick of being in a coding rut, and opted to create the much simpler Cross Fade 3D and Pan 3D modules, hoping it would jump start my coding again. Weāll see how it goes . . .
Super nice! I just played with both the Pan 3D and Cross Fade 3D, and There are so many things I want to try already!
I only have two comments. Will you be adding oversampling to the CV inputs like your other modules? Audio rate modulation can be quite fun with these modules.
And, what do you think about having an option to spread polyphonic signals automatically. For example, with the Pan 3D, a polyphonic signal at the input will be spread to all 8 outputs. You can do something similar to the BogAudio mixer, where you can choose the channels, so in this case, 1-8, and 9-16. The same with Cross Fade 3D. Maybe an input at the lower left can spread to all other inputs. Just a thought.
Spherical polar coordinate (r , Īø , Ļ ) input for the 3D faders/panners too please.
or maybe a standalone module for conversion between (x, y, z) and (r , Īø , Ļ ) ?
I donāt know why I didnāt think to try audio rate modulation - it does sound amazing!
Audio rate amplitude modulation / ring modulation can definitely lead to serious aliasing, and when I drive either module at high frequencies I definitely hear the aliasing. The Venom Poly Fade also suffers from the same fate. But for now I think I will leave it as is, and not provide an option for oversampling. If you find yourself driving any of the three modules at high frequencies and the aliasing is preventing you from getting the results you want, then let me know, and I may reconsider.
Iām not seeing how this would work (be helpful) with Pan 3D.
This one makes total sense to me. I actually thought of this when I originally conceived the Cross Fade 3D. But that was before I decided to implement the polyphony as I have it now.
But upon further reflection, I think I will implement exactly what you propose. If only the Bottom Left Front input is patched, then I can treat it as polyphonic with the first 8 channels being distributed to the 8 cube vertices, and any extra channels ignored. Missing channels will be constant 0V. The X, Y, Z inputs can still be polyphonic and applied to the eight virtual mono inputs on the cube.
If the cube inputs have any other patch configuration, then the polyphony behavior will revert to the current behavior.
Gawd I hate (spherical) polar coordinates! The modules definitely deserve that option, but I do not want to mess with that math. Well, the formulas are not hard, but keeping track of the conventions and conceptualizing what is going on in my head drives me crazy. I donāt want to increase the module size, and I donāt want to mess with dynamic control labels. So I wonāt put that option directly in these modules (convenient excuse)
Hetrick has a 2D polar to XY conversion module. But I am not aware of a 3D corollary. Iāll think about a standalone converter module.
I implemented @Omri_Cohenās suggestion of supporting a single 8 channel poly input for Cross Fade 3D in the lower left corner (circled). The red numbers show how the 8 channels will be distributed to the inputs.
I also implemented @Jens.Peter.Nielsenās idea of a spherical coordinate to cartesian coordinate converter called Sphere To XYZ. Of course it supports polyphony.
Thanks! The only issue is that it will only work with the first 8 channels. Maybe having an option to choose between channel 1-8 and 9-16 can be useful? SO if you have 10 channels, you can use 2 modules and set the correct channels.
And I still think this can be useful for Pan 3D as well. You input a poly signal, and then split it like with a normal splitter, but with the benefit of having control over the X, Y and Z levels. Then you just send the signals to different processing, for example.
Somewhere we have a communication disconnect. Either you are misunderstanding the basic functionality and/or polyphonic behavior, or I am missing an important concept. Iāll describe the design in detail. If you still think I am missing something, then try to give me more details on what you propose and how it fits in with the existing functionality.
The Cross Fade 3D requires 8 inputs. Yes, any one or more inputs could be unpatched to represent constant 0V, but that is a special case. All inputs are already polyphonic. So if there are three channels at each of the inputs, then all the channel 1 inputs are cross faded to produce channel 1 at the output, channel 2 inputs cross fade to the channel 2 output, and channel 3 inputs cross fade to the channel 3 output. Of course each input can support up to 16 channels, creating up to 16 channels at the output.
I extended the poly behavior to conveniently handle the situation where you have 8 monophonic inputs for Cross Fade 3D already present in a single 8 channel polyphonic cable. If patched to the lower left, and there are no other cube inputs patched, then the 8 channels are automatically redistributed to the 8 inputs on the cube. The red numbers indicate where each channel goes. I donāt understand the usefulness of working with a single 10 channel input. The module inherently works with multiples of 8. I could extend the single poly input to work with 8 or 16 channels. If there are 8 or fewer, then it would behave like it does now, redistributing the channels to 8 monophonic inputs. If 9 or more, then it would distribute 2 channels to each of the 8 inputs. Channels 1-8 would go to channel 1 of the corresponding corner, as shown by the red numbers. Channels 9-16 would go to channel 2 following the same numbering sequence. There is no need for any context menu. I thought supporting a single 16 channel input was too confusing at first, but Iāll go ahead and make this change.
For Pan 3D there is only one polyphonic input. Each channel at the input is panned to the corresponding channel at each of the 8 outputs. I donāt understand where your proposed redistribution fits in - there arenāt any other inputs to redirect channels to.
Strike that - it is too confusing because the X, Y, Z fader inputs can also be polyphonic. So if the faders are polyphonic with 3 channels, and there is a single 8 channel input, then the 8 input channels are redistributed as mono inputs to the 8 cube inputs. Then the faders create 3 different cross fade mixes for a final 3 channel polyphonic output.
But if the single poly input has 16 channels that get redistributed as 2 channels per cube input, then that doesnāt match up with the 3 channel fader inputs.
So I am going to leave the poly design as is. When using a single poly input that gets redistributed, it ignores any input channels over 8.
Hi Dave! Iām trying to follow the 3D fader/panner concept, but Iām going to have to come back to digest the above conversation when I have more time.
In the meantime, just the mention of a 3D input makes me think of the 3D output my chaos modules (Frolic, Glee, Lark, Nucleus) can produce. Is there any conceptual overlap here?
(Kind of a vague question, so a vague answer would be appropriate, LOL.)
I definitely could have fun hooking chaos modules up to your spherical coordinate converter!
Yes - I was already thinking about possible overlap. I think the Sphere To XYZ could potentially be useful for Sapphire TIN, Nucleus, and Polynucleus.
My converter is unidirectional. It can convert from spherical coordinates to cartesian coordinates. Currently I donāt have any interest in converting cartesian coordinates to spherical coordinates, as there are not any modules that need spherical coordinate inputs. Also, a given X,Y,Z position can be converted into many equivalent spherical coordinates unless restrictive conventions are applied. And the angles for the point 0,0,0 are undefined. It gets messy!
Well this is a pleasant surprise. I created Sphere To XYZ in response to a request by @Jens.Peter.Nielsen to provide a mechanism to use spherical coordinates as input to the Panner 3D and Cross Fade 3D.
I havenāt tried it for cross fading or panning yet, but I have found it is great fun to transform three simple audio waveform inputs into interesting complex audio output.
Here is a patch and demo video. The unreleased development binaries are available in a post above.
Those are some fantastic sounds and shapes, Dave! Some of the timbres you created are amazing.
I really like it that you created the spherical-to-cartesian module. It is surprising how interesting that is as a 3D vector-folder! It fits right in with my āVector Manifestoā: 3D vectors, and operators on them, make a fantastic source of audio and/or control voltages.
Iām glad you demoed your harmonic quantizer module. Venom HQ sounds like something I will really have fun with for generative slow-chaos ambient type stuff.
That patch is gorgeous. I was able to reproduce it, and then I substituted VCO Lab for the FM Op, and it still sounded great. I had to run the feedback through a VCA before going to the phase modulation so I could get the dynamic feedback level. I was able to pretty much match the sound of the Bogaudio FM Op.
Where HQ really shines is when used to establish harmonic frequencies to be used for all manner of modulation:
Phase modulation
Linear through zero frequency modulation
Amplitude modulation
Ring modulation
And now we can add coordinate system transformation. I think maybe the technique needs a good name!
I think most people think ring modulation is inherently inharmonic and metallic. But just like all the other modulation forms, it can sound very sweet when using integral ratios for the modulator. I made a demo using HQ and Recurse. Ring modulation can also sound great when applied iteratively.