I’m trying to learn minblep by the WTVCO code in VCV Rack.
Not sure about the meaning of syncCrossing though: why should it need to calculate the delta between the amount of “cross” in respect of the prev value?
What it should do is to reset the phase (to 0) of the slave signal (i.e. the main osc) at that sample: why the amount of the signal passing from last value to the new one (crossing 0 axis) is relevant?
I mean: if the master (external) signal pass from -5V to 2V, it should reset the slave (osc) signal at the same phase of an hypotetic master signal that pass from -3V to 2V, in the same exact “moment”.
Instead, the syncCrossing will be different, and so the way it will reset the phase (and the resulting transient).
Can you explain to me this in simple words? (if possible)
The entire point of minBLEP is that a “real” waveform might cross back somewhere in between two even sample points. So you tell minBLEP how big the step is, and where it occurs. Then minBLEP adds the difference between what you are generating and what it would have been if band limited but with a much higher sampling rate.
I can understand. What I don’t get is why the shape of external signal (master) would mould the slave one (osc).
The master one should just act as “trigger” when cross the 0 axis, as explained in the manual:
Despite the voltage of last/next point, isn’t?
i.e. it would make sense considering the samples of the slave signal (the one which the phase will be reset), not the trigger signal one… or I’m watching wrong the code?
I understand your frustration, but let’s try to keep this civil, ok? I do know what hard sync is, and I feel that reprinting part of the VCV manual with red boxes draw in is sort of like shouting. As if the passage in question were turned into all caps.
Not really my intention, sorry. Its just I’m not a native english, and I try to be sure its clear what I’m refering to. Sorry again.
I’m still not 100% sure what you are asking, but I think I know?
Anyway, I think we can both see why in a normal VCO with no sync you need to use the minBLEP. Because we know that the actual point where a saw wave falls was “really” in between two samples, usually not at exactly a sample border. Yes?
Well, the same is true of the sync input. It is going to introduce a discontinuity in the output at exactly the time the sync input crosses zero. But we don’t know where the sync input crossed zero! It’s the same issue - the place the sync input actually triggered is some place in between two samples. So the sync input can introduce aliasing in exactly the same way a VCO with no sync can alias.
Note that this is still completely true if the output is a sine wave. It still gets a discontinuity and minBLEP should be also to greatly reduce the aliasing of a naive implementation of a sine VCO when it is synced.
Yes we know I believe. When prev value is negative, and the next is positive. So in that case a trigger should start, setting a “bandlimited” ramp on slave (osc) signal only.
Why should I care how much the sync signal has changed during cross?
I would see its relevant the delta only on slave signal (i.e. the audio one), considering its prev value and the next one at phase 0. Thats the “two points” I need to “link” in a bandlimited way…
Well, good luck with your module! It looks very impressive.