Help me understand VCF keytracking.
-
I was wondering what the formula for general VCF keytracking on common synthesizers is.
my suspicion would be
filter_cutoff_frequency + (note_frequecy * keytracking_intensity)does that make any sense?
-
Idk what is standard, but I always use middle C as the base frequency. And then the filter basically doubles frequency every octave, moving in these increments
-
Pseudocode. I'm sure you've figured it out by now, but might as well post it since I remembered that my original response sucked lol.
FUNCTION keytrack(midiNote, baseNote, baseFreq, trackingAmount) // Step 1: Find the difference in semitones semitoneDifference = midiNote - baseNote // Step 2: Convert to a freq multiplier frequencyScale = 2 ^ ( (semitoneDifference * trackingAmount) / 12 ) // Step 3: Apply scaling to the base freq RETURN baseFreq * frequencyScale END FUNCTION
Example usage:
midiNote = 72 // Target note (C5) baseNote = 60 // Reference note (Middle C) baseFreq = 1000 Hz // Reference frequency (e.g. filter cutoff) trackingAmount = 1 // Full keytracking trackedFreq = keytrack(midiNote, baseNote, baseFreq, trackingAmount) // Expected Output: 2000 Hz
-
This post is deleted! -
@griffinboy I'm down with the men flu for over a week now, my brain still does not compute ;(
-
Oh dear! Well you've been working hard, hopefully you'll feel back to normal soon!
-
@griffinboy I've had a quick look at the JUNO-6 when the fever went down briefly, and how it works there is the lowest key is always the set vcf cutoff, and at maximum keyboard tracking the highest key would be the fully open filter...
so I recon it's ((22khz - cutoff) / 88 keys) * intensity (from 0-1) to get the cutoff increase by each key
I don't feel well enough to be able to translate this to faust code, also I have no idea how to limit those values ranges, as midi can have more than 88 notes.
other synths offer a bi-directional intensity, so the lower keys can have less cutoff than higher ones... which makes the selected cutoff kind of the midpoint and the whole frequency range along the keys pretty skewed... no idea there. in faust probably the break point function (ba.)bpf would be a good solution to that but I can imagine it takes a lot of cpu to calculate the curve all the time
-
You can map it to a function of best fit using python / matlab.
Ask chat gpt how to do this from a table of data.Alternatively you could create a lookup table of accurate values.
I didn't realize you were going for analog tracking, that's a different case to digital, yes.
The tracking lookup only happens once per note, so you don't have to worry about efficiency here. Envelopes by comparison need optimization as they are applied per sample.