[sdiy] dsPIC pitch shifter

Olivier Gillet ol.gillet at gmail.com
Wed Jun 15 18:40:19 CEST 2016

Here's a little trick that can make autocorrelation feasible on
low-performance CPUs (or on higher-end platforms with little CPU

- Quantize the input sample to 1-bit (ie, keep the sign bit)
- Store each group of 32 (or 16) consecutive samples as a memory word
- The cross-correlation between two blocks of N samples can thus be
computed by N/32 XNOR operations between a word and a shifted word,
plus some bit counting.

On some platforms, it turns out to be more efficient than evaluating
the cross-correlation with two FFT and one inverse FFT (or naively),
and surprisingly the ridiculous clipping doesn't impair detection.

On Wed, Jun 15, 2016 at 6:26 PM, Richie Burnett
<rburnett at richieburnett.co.uk> wrote:
> Thanks for the comments.  Some responses inline below...
> Peter Ullrich wrote:
>> I love voice "transforming" tools, I have the Digital Vocalist II, Korg ih
>> and the Boss Voice Transformer VT-1...
>> I think that your results are already in the same quality level as these
>> tools!
> I'm very flattered, the PSOLA technology is similar to what is used in those
> products, but IVL have taken it further to preserve/manipulate formants in
> the Digitech and Korg products.
>> Your software solution combined with potentiometer for parameter changing
>> on  the fly like in the Boss VT-1 would lead to a very cool gadget!
> This currently just has two CV pots that vary the pitch shift amount for
> each output from -12 and +12 semitones.  I might add push-switches for
> common musical intervals though.  You can get some nice close-in harmonies,
> but this is a chromatic pitch shifter, so unless you ride the pitch controls
> it will eventually stray out of key.  You can get a nice imitation of the
> classic dual H910 harmonizer trick to thicken up a lead vocal with 1% or
> less detuning +/- on each channel panned left and right.
> Eric Brombaugh wrote:
>> I've done 2-pointer pitch shifters in just about every CPU
>> architecture that I've ever used but the AM effects from simple
>> cross-fading make them sound pretty awful.
> The autocorrelation really is key to reducing the artefacts on monophonic
> material.  Of course it sounds absolutely awful on polyphonic material!
> Chris McDowell wrote:
>> ...Are you using a codec for audio in and out?
> I used a 16-bit CS4270 CODEC for some of those examples, and others used the
> 12-bit built-in ADC and 16-bit audio DAC.  Sampling rate is 48kHz.  The
> "single_harm" example was definitely using the internal ADC and DAC.
> Original audio input for comparison is here: (whoops, should have given
> credit!):
> https://youtu.be/MmKGLYZ4zWs?t=15s
> Jim Credland wrote:
>> That's impressive to get running on a dspic ... how big is your
>> autocorrelation window?
> The two pitch shifters take up about 50% of the maximum available MIPS.  The
> autocorrelation size is 8ms and the search range is 5.3ms to 10.7ms.  It
> currently won't track anything below 93Hz!
> The 1984 Agnello (Eventide) de-glitching patent is a good place to start
> reading if interested in this stuff.  Hildebrandt's Autotune patent is also
> worth a read to get an idea of the sort of ways the autocorrelation can be
> optimised for better efficiency.
> Best regards,
> -Richie,
> _______________________________________________
> Synth-diy mailing list
> Synth-diy at dropmix.xs4all.nl
> http://dropmix.xs4all.nl/mailman/listinfo/synth-diy

More information about the Synth-diy mailing list