It seems no one has really made any open source slow-down/pitch shifting algorithms. Of course there is SoundTouch, but the results are ok. Then one can license the others but very expensive.
Is good audio pitch shifting and slow down that hard?
Last time I checked Sooundtouch was the only unrestrictive algorithm. But I am thinking about licencing Rubberband. Its GPL with a reasonable commercial licence (something around 400$ for unlimited usage).
It may not be as sparkling as elastique but for occasional time stretching tasks it should be OK. Plus the API is pretty clear and there is a demo app which you can evaluate pretty easily.
And it’s fairly hard I’m sure there a load of papers on the topic, search for WSOLA and PSOLA.
I contacted you guys, but never got a response. Perhaps the mail didn’t go through.
Here is the list of stuff I found so far:
Paul’s Amazing: http://hypermammut.sourceforge.net/paulstretch/
SuperPowered (ios/OSX/Android): http://superpowered.com/time-stretching
ZTX (Formerly DIRAC): http://www.zynaptiq.com/ztx/
Rubber Band: http://breakfastquay.com/rubberband/
For those of you interested, SuperPowered is OSX/iOS and seems to be free. I have not heard the quality.
I am more than open to paying a good DSP guy for a very good algorithm and I am open to paying a license, but the big guys licenses are outrageous.
Actually, I reckon that the licence fees for the ‘big guys’ like ZPlane are still cheaper than the cost to yourself (assuming you like paying yourself a respectable wage) to create something of a similar quality. Elastique is a long way ahead of things like SoundTouch. Not that I mean that as an insult to SoundTouch. We use it and have a licensing agreement with Olli, the developer behind it.
(BTW in its raw for that’s quite slow)
Out of curiosity…What makes it hard?
I am an engineer, but I have been more on the marketing sales side as I don’t have time for the core DSP side.
Here is my guess, the hardest part is not the actual algorithms as there are fantastic Matlab to c++ conversions. The hard part is optimizing and balancing quality bs cpu.
I’ve actually used zPLane algorithms in my own past music App software projects - but since the JUCE team are already working on their own effects classes for the most common audio processing tasks it would be really cool if the JUCE team were to add classes that managed the zPlane libraries for pitch and time shifting - along with their other algorithms - and then maybe zPlane could do demo libraries ( say that only operate for a limited period - 30 seconds or something ) and leave us to license the libraries if we need them.
There are for example some streaming classes already in JUCE - and to have an easy seamless way to incorporate these well respected libraries into our commercial projects would be great.
I built a granular time stretch / repitch algo based on a paper by Ross Bencina. It wasnt too difficult, and it sounds great:
The coolest thing would be if the mythical JUCE DSP module just had its own pitch/time algorithms. They don’t have to be the absolute best in the world, but something as simple as a run of the mill phase vocoder would suit a lot of the most basic applications.
Pinging @timur … will there be anything like this in the DSP library?
Re: wrapping zplane, from what I’ve seen with some extreme exceptions (zlib), JUCE code almost never wraps or uses any sort of external code since they generally can’t provide the stability/threading/exception guarantees they want.
there are some open-source and free pitch time algorithms but for those of us working on commercial apps I’d also like to have the ability to use best-in-breed of these. and Plane are among the best if not the best ( ceremony are another firm but their CEO founder - is - as I know by experience - extremely reluctant to license his tech to others. Although I understand that recently he’s relented a bit with some 3rd Pty dens. )
So maybe a set of classes with a common API - for which we can switch between free open-source algorithms and one or more top breed licensed algorithms like zPlane. So a developer could for example release a commercial app v 1.0 with the free algorithms but then later - move to a licensed tech. I’ve seen several audio app developers take this path ( Capo comes to mind )
hey @nonchai What is your commercial app that uses the ZPlane?
“WAS” - it was a software arranger similar to RealTracks in Band-In-A-Box.
it was put on the back burner due to potential patent issues with PG Music ( although I can claim “prior art” and lodged it with a patent lawyer while their patent claim was still being processed ) , and project over-reach due to too ambitious a goal.
Went onto other projects i won’t disclose here.
Just an update guys…From my experience and for the money, the best you’re going to get is Rubberband. ZTX LE is free, but you have to do a lot of tricks to get the stereo phasing, but the ZTX for iOS is very cheap…
I have not tried SuperPowered on iOS yet…
Hope this helps anyone with their commercial apps.
I know this is an old thread by now, but I am working on implementing ESOLA pitch shifting in JUCE, and I have managed to find several good examples of how to code pitch shifting algorithms online. These are not necessarily libraries, nor are they all in C++, but these have given me a great starting point to learn how to build my own implementations:
Hi @benvining @Doug , I am currently using SuperpoweredSDK on my audio processing app but the sound quality after time stretching is really bad even when you increase to 20% or decrease to 20%. I am looking for how to fix this as I have seen many audio apps that handles Time stretching 100% tempo increase / decrease perfectly. Please is there any iOS/Android Developers that you can suggest that can help me fix this issue or replace the current SDK with and like RubberBand or SoundTouch SDK that could work well? Please any suggestion is welcomed please. Thanks
I am currently using SuperpoweredSDK on my audio processing app but the sound quality after time stretching is really bad even when you increase to 20% or decrease to 20%. I am looking for how to fix this as I have seen many audio apps that handles Time stretching 100% tempo increase / decrease perfectly. Please is there any iOS/Android Developers that you can suggest that can help me fix this issue or replace the current SDK with and like RubberBand or SoundTouch SDK that could work well? Please any suggestion is welcomed please. Thanks
Are you looking to achieve time stretching without affecting the pitch?
Yes. Thats exactly what I am looking for. The Only problem I had with SuperpoweredSDK is the audio distortion when increasing or decreasing just 10% but I am looking for 100% audio time stretching without changing pitch nor affecting the sound quality.