The pitch-shifting core circuit has changed somewhat. I followed my weird idea about doing a wavecycle-based kind of formant-correction. Basically, instead of pitch-shifting, this circuit performs a sort of VOSIM-style processing on the voice signal. Individual tonal wavecycles of the incoming audio are recognized and then brutally () hardsynced to a carrier wave (which defines the new pitch), and the resulting steep waveform flanks smoothed out afterwards. In this way, the formants of the original signal are preserved.

It's an admittedly crude technique, and so I was amazed at how good it actually works. It sounds way better than expected, more artificial than a resynthesis-based algorithm, but still more natural than a vocoder. Also, since it works with a totally different concept, the voiced-unvoiced processing (from the first version) isn't necessary anymore, so I threw it out.

PITCH RECOGNISE Response: Response speed of the adaptive pitch-tracker.
PITCH RECOGNISE Deviate: erm... difficult to explain. Basically defines the "deviation allowance window" between cycles. If this doesn't make any sense at all never mind. Just tweak it and listen to the results.
WAVE Edge: Controls the smoothing of the sharp waveform flanks caused by the VOSIM processing.
FORMANT <shift>: Yes sir . Shift formants upwards for a dwarf choir, or downwards for a ogre choir. Zero is original formant
PITCH (parameters): target pitch
VIBRATO (parameters): vibrato of the target pitch

I liked the first one but my rubbish mic wasn't loving it but this one is so smooth.

Yes, the voiced/unvoiced-processor was difficult to tame. Also, this design is incapable of pitch-warbling, as the wave cycles are brutally forced into line via hardsync.
I still get the occasional waveform warble though, especially when not singing/talking clearly. That is due to the "multiple-zero-crossings-periodicity"-detection (meaning: recognition of periodic oscillations with more than one zero crossing) not being 100% bulletproof, causing discrete "phase-jumps". I'm mulling over alternative approaches to that issue. I'll post an update if it works.

Anyhow, my current favourite performance shtick with this patch is to assign the formant control to the modwheel. A choir of "mes" morphing into dwarfs as I sing. Classic. _________________

Great patch! I know Tim is not with us anymore, however: is there a way to turn this thing into an auto-tune patch? It seems to me the only difference would be that the pitch does not react to all the keys that are being depressed but only to the nearest pitch.
I tried to set the patch to Mono, but that would've been too easy, would it?_________________Fish don't swim. They dive.
For everything else: The Patcher's Toolbox

Great patch! I know Tim is not with us anymore, however: is there a way to turn this thing into an auto-tune patch? It seems to me the only difference would be that the pitch does not react to all the keys that are being depressed but only to the nearest pitch.
I tried to set the patch to Mono, but that would've been too easy, would it?

Don't worry, I still skim this place occasionally, see what you guys are up to.

If you want straightforward auto-tune, this patch probably isn't the right thing to start with.

This patch circumvents the whole pitch-detection/correction problem by taking the played keys as given and doing the formant-preserving waveshaping thing as good as possible. Pitch detection still has to be done, but the errors don't produce nasty pitch warbles but only spectral warbles in the waveform, which are way less intrusive.

The whole thing, as described, only works because the played keys provide the static pitch reference.

If you want straightforward auto-tune snapped to a given scale, the pitch of the incoming signal itself is the reference, and thus has to be detected as accurately as possible. On the other hand, since snapping to the closest scale note doesn't result in pitch-shifting by more than 2 semitones, the whole formant-preserving issue can be discarded.

I've learned a bit since this patch and meanwhile come up with a better pitch detection method than is implemented here. It uses the stock G2 pitch-detection module plus extra circuitry to make it produce more reliable (and meaningful) results. It's published as a building block here:
http://www.electro-music.com/forum/topic-52784.html
Hooking the pitch-detection output to a key-quantizer module representing the desired diatonic scale, and using the inverse difference between actual pitch and quantized pitch to modulate a pitch-shifter fed with the input signal (the stock G2 pitch-shifter module should be sufficient for this) should give you what you want. (For the aperiodic scenario, simply bypass the thing via crossfading.)

Dear Tim, thanks for the info and the building block. I have to say that your patching skills just kill me. Thanks for all you've done here!
Cheers
Seb_________________Fish don't swim. They dive.
For everything else: The Patcher's Toolbox

You cannot post new topics in this forumYou cannot reply to topics in this forumYou cannot edit your posts in this forumYou cannot delete your posts in this forumYou cannot vote in polls in this forumYou cannot attach files in this forumYou can download files in this forum

Please support our site. If you click through and buy from our affiliate partners, we earn a small commission.