# Exploring the subharmonic series with Host

Isn’t it just log2(ratio)?

3 Likes

Yes. So you can also just use this calculator: https://miniwebtool.com/log-base-2-calculator/?num1=3

Yes. Even better log2(3) - Google Search Thanks! I wasn’t aware of this.

When I started with Rack, I made this for quick reference.

These days I just run everything through the Submarine AO modules. They do have a Log base 2 function.

Before using Rack, I never even knew what a Log was.

5 Likes

14 Likes

1 Like

With VCV (Eurorack), the math for computing V/Oct CV needed to play any harmonic partial is conceptually quite simple.

You always start with the root note (the fundamental, or first partial). Depending on how your VCO is tuned, that pitch will be represented by a specific voltage. But It does not really matter what the fundamental voltage (pitch) is. Each harmonic partial for that root note will also have its own V/Oct CV value. The difference between the nth partial CV and the fundamental partial CV will be a constant value. Once you have that delta value, you can add it (or subtract for subharmonics) to any root CV to get the correct nth partial V/Oct CV.

As others have pointed out, the formula is log2 of the integral harmonic value. And it is pretty simple to verify that is correct.

Starting with the first partial (the fundamental), log2(1) is 0, which is perfect. We don’t want to change the pitch of the fundamental.

The 2nd partial is 1 octave, and log2(2) is indeed 1, and 1V represents 1 octave. For a subharmonic we would want the negative value, or -1V.

The 4th partial is 2 octaves, and log2(4) is indeed 2, or -2 for the subharmonic.

The 8th partial is 3 octaves, and log2(8) is 3, or -3 for the subharmonic.

It works equally well for all the other partials. I stuck with the octave partials just to simplify the math so that all the deltas are integral values. But the non-octave partials will give the correct fractional CV delta values.

There are a few modules that can do the log2 computation. My favorite is the docB Formula One module.

You patch the fundamental V/Oct CV to X, the integral partial number CV to Y, and type in this simple formula: `x - log2(y)`. The correct CV for the subharmonic will be sent to the OUT output.

Formula One is fully polyphonic, It will perform the computation on each of the channels found at the X and Y inputs.

Of course there is a slight problem in that there are not any modules with a knob that directly outputs integral voltages from 1 to 16. A module like VCV 8VERT will give you fractional voltages between -10 and +10. A module like Vult KNOBS will give you fractional voltages between 0 and 10 in unipolar mode, and -5 and +5 in bipolar mode. You will need to do additional math to scale and round the CV values to integral values from 1 to 16. There are many ways this can be done.

But even if you get all this done, there is one more significant complication - you want to use a VST virtual instrument, which will expect midi values, not CV voltage. And only the perfect octave partials of 1, 2, 4, 8, and 16 coincide with a tempered scale. So you would have to quantize the partial CV to the closest semitone. VCV can transform that into a midi note for you just fine. But then you also need to compute the difference between the raw partial CV and the quantized CV and transform that into the correct amount of midi pitch bend to achieve the true harmonic. I’m sure it can be done, but you will have to work that out.

The SlimeChild SubStation is a great plugin. I have it, and it is beautifully documented, simple to use, and sounds fantastic. But I don’t think it will help you much with getting subharmonics out of VST instruments.

I have a big favor to ask - I have a very complete VCV Subharmonicon emulator patch that I created after scouring the Subharmonicon manual. I did my best to implement as many features of the hardware as accurately as I could, including a patch bay. But I do not have access to the actual Moog hardware, so I have nothing to compare it to. I would love to know how closely the emulator comes to the real thing. I’m sure the sound will be quite different because of differences between digital and analog, but more importantly because it does not have a Moog filter. But I would like to know if the workflow and capabilities are similar to the real thing.

I would be forever grateful if you could download my patch and have a go with it, and report back what you find. There is extensive (but terse) documentation at the bottom of the patch that describes all differences and enhancements that I am aware of. I’d like to know if I got anything wrong, so that I can either change the patch and/or correct my documentation.

Below is the most recent version 5.2 of my emulator. There are a few extra modules to the right that use the patch bay, and can be ignored. The actual emulator to the left is created entirely from free VCV plugins. There is a link in the Patch Storage writeup where you can get the free Stoermelder PackOne plugin - it is not available yet in the VCV version 2 librarly.

If your are interested in the construction of the patch, then you may want to look at earlier versions, where I talk about my design decisions and how the patch was built. The early ones will not work with VCV Rack version 2, but the writeup may be of interest to you.

Version 1, for VCV version 1 only

Version 4, again for VCV version 1 only

Version 5.1 - the first good version for Rack 2.0

6 Likes

If you truly want non-integer divisions you will need some module that can compute logs. But if you only want the integer divisions like the “sub harmonics” then you just need a bunch of fixed voltages you can calculate / look up ahead of time. No need to compute logs in a module.

But, as I say, if you want non-integer subharmonics then you do need that.

I do wonder, however, about the previous post that says a VST running in host needs to see MIDI notes, and these harmonics and sub-hardmonics are not even MIDI notes.

Yes, I almost described how you could use something like Bogaudio POLYCON16 or docB PLC to create a polyphonic signal with constant CV for the first 16 partials, and then ComputerScare Toly Pools to select any one of the 16 channels via CV. That works great for a monophonic track, but you need a separate Toly Pools for each channel if you are dealing with polyphony.

The beauty of POLYCON16 or PLC is the standard VCV UI lets you right mouse click (or command-click on Mac) and key-in log2(n) into the context menu, and it will compute the log2 value for you.

Wonder as in, is that correct? or wonder how that would be done?

I must admit I am fairly ignorant as to the ins and outs of how VST instruments work, I don’t normally use them. Maybe there is a simple solution. But based on my very limited understanding, it is not a trivial thing to get a VST instrument to play a specific harmonic of a root note.

1 Like

Well, wonder if it’s correct, and it probably is. If t is, then this sound impossible or very difficult.

If only it did polyphonic MPE, I know someone put it on the wishlist allready - at least here on the forum. The Host manual doesn’t mention MPE at all.

But now, using a vst-host for each note, receiving note+pitch bend, it should be possible to get the non-12-TET tones ?

1 Like

Fascinating discussion here folks, thank you all for your contributions and time! It looks like this is turning into a weekend project for me, so I’ll have to report back when I have time to sit down and patch out some of these ideas.

@DaveVenom Your breakdown above is very concise and clears up a fair few of my questions. I’ll be happy to try out your patch and let you know. I invite any other Subharmonicon owners reading this to do the same and share your feedback.

This community is so cool!

4 Likes

Heres a little patch idea I’m working on

It’s set up to take a 4 channel polyphonic midi input and distribute it to four host modules. I haven’t tested it much - I don’t have any “real” MPE device. Perhaps someone will find it usefull and/or inspiring.

mpehost.lua.txt (3.3 KB) (remove .txt)
mpe2host_WIP.vcv (8.6 KB)

It uses the excellent WrongPeople LUA module (not in the Library yet for Rack 2.)

GitHub - WrongPeople/WrongPeopleVCV: Modules for VCV Rack 1.x.

line 36 in mpehost.lua can be modified - “if cpusaver % 8 == 0” means process the ports each 8th sample. it uses 1.8% process time here. A change to “if cpusaver % 16 == 0” results in approximately 1% load.

2 Likes

Wouldn’t it be awkward to set that up, even if it would work? It’s so easy to patch this up in VCV. It seem punishingly difficult to set it up with a combination of midi notes and precise poly pitch bends.

This would probably help. I haven’t used it yet though.

3 Likes

Great find - that looks perfect.

Terse documentation is available in the Nysthi Change Log

1 Like

I was just playing around with very similar things the other day!

I made some presets for PolyOff16 for harmonics 1-16 and 17-32, which I’d be happy to share but it seems I’m not allowed. But as DaveVenom noted above it’s easy enough to set up yourself.

I wanted to crossfade smoothly between harmonics, so I’ve been using poly VCOs as single voices for that purpose. Such a setup potentially turns any poly VCO into an additive synth of sorts, which may turn out to be a more interesting case than what I was originally going for!

1 Like

An easy way to explore subharmonics:

4 Likes

Whelp, I got wrapped up in work for the last few weeks and I just checked in last night to see your post. This module pretty much solves my original quandary to a tee! But the many other useful insights in this thread have expanded the horizons of my project a good bit. I think MPE and proper microtonal tunings could add another level of expression and detail to a ‘Sub Kontaktnicon’.

For now, I plan to implement the original idea and share the results. I think it’ll fall somewhere along the lines of @DaveVenom’s wonderful patch shared above. Might as well use the powers of VCV to add further control and modulation beyond the original.

My thanks again for everyone’s input!

1 Like