Monophonic pitch-shift: real-time, timbre-neutral?

    Jul 24 2010 | 4:25 am
    I've got a piece of kit from Roland called a VG-99 that uses a divided guitar pickup as input (i.e. six separate signals) and lets you detune the guitar in real time without making it sound like it's not a guitar. It's a great idea, but the VG-99 is horribly inflexible. Therefore I want to do it myself, in Max (or using 6 copies of some VST, if I must). Does anyone know of an algorithm, or a Max object, or a VST plugin that allows one to detune a guitar string in real time while maintaining a guitar-like timbre? I don't need big pitch changes -- just +/- 3 semitones.
    I think I've read about the needed technique: one has to somehow separate the (high) formants from the (low) partials, and transpose the latter while keeping the former in the same shape. But I'm not nearly awesome enough to program it myself.
    I tried Mattijs Knepper's granular time stretcher / pitch shifter (, but it creates a weird bumpiness when the pitch shifts, even for single-pitched signals. Demo videos of elasticx~, which costs money, seems to exhibit the same problem. There are also FTT-based stretchers, but those seem to make it smear. And yet somehow Roland manage to get it to work with barely any artifacts.
    Any ideas?
    Many thanks in advance, Jeff

    • Jul 24 2010 | 11:04 pm
      I've looked through a number of plugins, and they almost all seem to have the artifacts I described. However, the Elastique Pro monophonic algorithm called Soloist does not -- it sounds amazing ( I can either buy that from them, at a cost of $200, or buy Reaper (a DAW) for $60, which includes the Soloist algorithm in the ReaPitch VST plugin. I'm going to do the latter ...
    • Jul 24 2010 | 11:42 pm
      Good choice, Reaper is very quickly becoming an amazing DAW :) It also uses the newer Elastique 2 pro algorithms with formant preserving modes and all those goodies. Also, you can do the Ableton Live/PT Elastic Audio stuff on any audio in the edit window by just splitting and alt+dragging the split, which can often be more useful than the plug-in; it depends on the context.
    • Jul 25 2010 | 1:27 am
      > Good choice
      Thanks! But while I'll keep an open mind, I don't yet know that I'll be using it as a DAW per se -- right now I just want it for the plugins it comes with!
      > Ableton
      Yes, I wish that were an option for me, because I already own it. Unfortunately, my desired application -- retuning the six strings on a guitar independently while I play it -- requires a real-time solution.
    • Jul 25 2010 | 12:28 pm
      I've recently been playing with a sinusoidal+residual model with the guitar to do real-time tranformations to the spectrum. It reconstructs the original signal fairly well. In theory you could simply double the frequency of each oscillator and it would sound fine. The attack is left untouched so it'd only transpose the appropriate part of the sound.
      I'll try to post a patch later but its essentially the sigmund~ partial tracking patch with frequency domain subtraction to isolate the attack/noise.
    • Jul 25 2010 | 1:14 pm
      Oy, that sounds hard. What about changing the frequency by a non-integer factor -- say, 3 semitones? Would that work as easily?
      I just downloaded and tried playing with sigmund~, and it's beyond me. If you post that thing I'll try it out, though.
      When you say "it reconstructs the signal fairly well", what's the catch? In what way does it sound different from the original -- phasey? Bubbly? Something else?
    • Jul 25 2010 | 10:45 pm
      Here it is but it needs some work particular with eliminating any outliers from sigmund~ and reducing artifacts during the attack. The frequency domain subtraction could probably also made better and the delay between sigmund's output and the original signal is just a guess.
      Its probably not good enough for your application but it certainly could be with some work. Perhaps someone else feels like fixing it up, I don't have the time unfortunately.
    • Jul 27 2010 | 8:46 am
      Just to notice, Gabor package (downloadable from ircam and free) also have some nice monophonic pitch-shift possibilities with formant control : gabor.psola.maxpat gabor.psolastic.maxpat
    • Jul 28 2010 | 4:42 pm
      I tried Reaper out, and realized that its pitch-shift plugin has a 150 ms latency. That appears to be inherent in the Elastique algorithm. It sounds fantastic, but it's not a viable realtime solution. I'm looking now at options from Celemony, Antares and Mu-Technologies. They all cost two or three hundred dollars. The last boasts of a latency of only 5.6 ms; that's exciting.
      Thank you both for the suggestions you posted above. I hope other readers of this thread find them useful. For me, I'm afraid they both look ... um ... hard. I don't really understand enough about pith-shifting algorithms to hack them myself. When it comes to the time vs. money tradeoff, I think I'm better off spending my money than my time on this project. (I know that's disappointing, but it's true ...)
    • Jul 28 2010 | 8:49 pm
      The classic "harmonizer" approach for transposition is using a delay line, which gets read out faster/slower than written. You can do this with tapin/tapout by setting the delay with a phasor~. Due to the nature of this algorithm you will get a "sliding" latency, also depending on the overall delay time. There's a patch in examples/effects/transposer-folder
      I think the digital whammy guitar pedals also use this technique. It doesn't preserve formants, but sounds ok in the range of some semitones.
    • Jul 29 2010 | 2:51 am
      I just tried demos of a whole bunch of for-pay algorithms, and my tentative conclusion is that every real time pitch-shift algorithm not specifically intended for a guitar, when used on a guitar, either sounds like crap or has an impractically high latency. The only thing I've gound that sounds good enough and works fast enough is the Roland gear I've already got, but it's user configurability is worthless. (I haven't tried the Eventide plugins, but at this point I'm sure they're just as crap.)
      My only remaining hope is to buy a Hipshot Trilogy bridge and make a Lego Minstorms robot to control it for me in response to MIDI pedal commands. Ugh ugh ugh.
    • Jul 29 2010 | 11:09 am
      To me, the gabor pitch-shift examples ( gabor.psola.maxpat ) have quite short latency. It will sound good as long as your guitar sound is - really - monophonic. it's free at : (gabor is part of the ftm package)
    • Jul 29 2010 | 5:22 pm
      Have you tried running the pitch-shifters you've tried at a higher sample rate? If you double the sample rate, you'll have about half the latency figure etc....
      Also, have you thought about using a hexaphonic pickup on your guitar? If you did that, you could process each string individually with a monophonic pitch-shifter, and if you used a high sample rate it's likely that you could get latency down to a useable amount, and have pretty decent sounding polyphonic formant preserving shifting.
    • Sep 19 2010 | 11:41 pm
      "Here it is but it needs some work particular with eliminating...."
      what are good texts for this?
    • Jan 09 2011 | 1:58 pm
      Have you tried 'shifter~', a "Formant-happy, pitch-synchronous-overlap-add-based (PSOLA) pitch shifter" by Tristan Jehan?
    • Feb 12 2012 | 8:24 pm
      Looks like the tristan site isn't working anymore?
      Anyone know where else one can download shifter~? (maxobjects just points to tristan's site).
      I've been using a gizmo~ but it sounds pretty weaksauce, particularly as compared to a whammy-pedal.
      Anyone find any good sounding monophonic pitch shifting options in the last year? Or more specifically something that sounds similar to a whammy-pedal (where it shifts ok, but more importantly the artifacts sound interesting, and not too fft-y).
    • Feb 13 2012 | 11:26 am
      Hi I briefly had some fun with elasticx, which I believe is delay-based, and it's not free:
      and I recall an external called free-elastic, but can't find it here:
      These delay versions are less artefact-y than gizmo, and then there's always the granular approach - if you're talking realtime stuff, I don't know what the latency implications would be tho.
    • Feb 13 2012 | 1:04 pm
      That Delicious one sounds pretty good, better than gizmo and sounds realtime enough. There's an awesome sounding gen one in the examples folder but it's no good for realtime as it slides around all over the place.
    • Feb 13 2012 | 1:16 pm
      Gabor sounds Far better.... ( -> gabor.psola.maxpat )
    • Feb 13 2012 | 1:32 pm
      The recent external grainstretch~ by Timo Rozendal has also a pitch shifter function in real time.
    • Feb 13 2012 | 2:56 pm
      I saw the gabor thing mentioned before but I wanted to avoid using something as heavy lifting as ftm (since I currently don't have it installed).
      I'll take a gander at grainstretch~ though I do want to stick with vanilla objects for this.
    • Feb 13 2012 | 5:41 pm
      Hi Rodrigo if I haven't done so already, will I post my own granular pitch-shifter? 2 x play + 2 x phasor objects. If you can build your own realtime record buffer, then this'll work fine. I think it sounds quite smooth and artefact-free.
    • Feb 13 2012 | 5:54 pm
      I implemented a tapin/tapout system similar to the video you linked. Sounds alright.
      I'd like to see if if you wouldn't mind posting. Curious on the latency of a dynamically filled buffer system like that. (If I'm understanding it right).
    • Feb 13 2012 | 9:58 pm
      Hi Rodrigo here it is; while it may seem a little heavy-handed, it forms the basis of a larger more powerful granular playback engine - pitch shifting is merely one feature of it - so you might want to stick with the simplicity of dude837's tapout version above
    • Feb 13 2012 | 10:25 pm
      That sounds good but not worlds better than the tapout version. What a finicky effect pitch shifting is....
    • Feb 19 2012 | 12:23 pm
      I'm joining in late here. I've been using the tapin~ tapout~ technique for quite a while now. Maybe I can share it later, although it won't be much different from Brendans version.
      But I must say these psola externals are quite nice. Although some other artefacts are definitely audible. Does anyone know how to design them in max? (Time domain preferably.) I've been looking around the internet, but haven't found out exactly how it is done. Here's an article explaining a bit about psola:
      Is it just a granular synth, in which the window size is a division of the pitch period?
    • Feb 20 2012 | 8:20 am
      You should try diracLE~ by Timo Rozendal. It sounds very good and gives you control over the formants too. It's a bit heavy on cpu though.
    • Feb 20 2012 | 10:29 am
      I was going to suggest DiracLE~ but then saw that the OP's issue is the glitching when changing pitch, and sadly DiracLE~ does that too. Have you tried Noboyasu Sakonda's Realtime Pitch Shifter ( )? I'm not at a Max machine right now, so I can't test if it does this too and it's a while since I used it, but from what I remember, it does a pretty reasonable job of pitch shifting otherwise. And Sugar Synth, which is on the same page, is, well, sweet! (as indeed is his Autotune patch, P.Molder), Cheers Roger
    • Feb 20 2012 | 10:31 am
      I personally would be into some glitchy-ness, though I'm trying to stay external-free (as much as possible anyways).
      I'll check diracLE out though as it's been mentioned a couple of times now.
    • Feb 20 2012 | 12:07 pm
      Actually seems like diracle adds latency for realtime usage which makes it a no go unfortunately as it sounds good
    • Feb 20 2012 | 12:41 pm
      Hi here's my realisation of dude837's realtime pitch-shifter, sounds damn good to my ears:
    • Feb 20 2012 | 3:27 pm
      Mine's quite similar though I preferred the sound with just 2 voices and a short delay window (I think I used 50). To my ears going to 3+ voices sounds worse and worse.
    • Feb 20 2012 | 4:40 pm
      Here's my tapin~ tapout~ version. Needs a little more debuggin. But overall I quite like the sound. Because I made this one to create a choir, I added a little vibrato. I don't know if it works so well on other sounds.
      Any suggestions to make it better are more than welcome.
    • Feb 20 2012 | 5:14 pm
      Would be interesting to revisit these designs in gen~, since you have different interpolation modes that might affect the quality of the sound. It also might be interesting to try using allpass interpolation.
    • Jan 14 2014 | 11:49 am
      HI there! Happy new year 2014! I think using tapin/tapout to built overlap-add-like pitchshift is wrong: Apparently, tapout cannot delay less than the vector size… and in overlap-add algorithms the delay go down to 0 all the time!
      one should use delay~ instead in that case.
      And by the way here is a BENCHMARK of the quality/latency for various pitch shifters used on a monophonic source: