Hard Sync for the lazy one
Posted: Sun Dec 21, 2014 12:42 am
Hi,
Just played around a bit, trying to find a cheap less aliasing hard sync method. The result is attached.
Basically it works like that:
Parallel to the master oscillator (Schematic doesn't have on, though) runs a wavetable oscillator with a band limited rectangle (0-1 range). The rectangle is most of the time high and just starts/stops hard at zero. Basically an inverse BLIT.
There is a ramp counting parallel to the master oscillator for triggering the Sync of the slave. When a sync happens (ramp > 1) the phase offset ( (ramp -1) * slave freq / master freq ) is passed to the slave oscillator. That's just simply because a sync might happen between samples. At the end is the inverse BLIT wave multiplied by the slave osc output to smooth out the sync transitions.
It kind of works. But the way how I generate the BLIT Wavetable is really a hack. I used the wavetable primitive to generate a band limited wavetable, and rescaled the output to a 0-1 range, because it wasn't made for such a accurate task. There might be better ways.
Have fun!
Maik
Just played around a bit, trying to find a cheap less aliasing hard sync method. The result is attached.
Basically it works like that:
Parallel to the master oscillator (Schematic doesn't have on, though) runs a wavetable oscillator with a band limited rectangle (0-1 range). The rectangle is most of the time high and just starts/stops hard at zero. Basically an inverse BLIT.
There is a ramp counting parallel to the master oscillator for triggering the Sync of the slave. When a sync happens (ramp > 1) the phase offset ( (ramp -1) * slave freq / master freq ) is passed to the slave oscillator. That's just simply because a sync might happen between samples. At the end is the inverse BLIT wave multiplied by the slave osc output to smooth out the sync transitions.
It kind of works. But the way how I generate the BLIT Wavetable is really a hack. I used the wavetable primitive to generate a band limited wavetable, and rescaled the output to a 0-1 range, because it wasn't made for such a accurate task. There might be better ways.
Have fun!
Maik