hi! I’ve got an audio application. I want to implement a DAW, where I can speed up and slow down the BPM without changing the pitch of the audio.
I didn’t find any solutions after a few hours googleing and reading forums, please help!
hi! I’ve got an audio application. I want to implement a DAW, where I can speed up and slow down the BPM without changing the pitch of the audio.
I didn’t find any solutions after a few hours googleing and reading forums, please help!
I suspect you didn’t use the right search terms. Searching for “c++ timestretch library” will give you a number of different options.
You need a time stretching/compression solution. You can attempt developing your own (will probably take at least a few months of development time) or you can use an existing library. Juce does not have this but there are some building blocks that perhaps could be used for making your own.
Some commonly known libraries are :
SoundTouch : Open source. Not very high quality but free of charge to use if you can follow the LGPL licensing rules.
https://www.surina.net/soundtouch/
RubberBand : Possibly acceptable quality. Open source. Not free for commercial closed source projects but the commercial license isn’t prohibitively expensive.
https://breakfastquay.com/rubberband/
Z-Plane Elastique : Used by some known DAW applications like Reaper, Ableton Live and Tracktion. Quality is of course subjective but it probably has the best sounding modes of the ones I am listing here. Licensing prices are not public information, the last I have looked at it, but it’s a safe bet it is quite expensive.
https://products.zplane.de/company/technology-licensing
There are also libraries by Zynaptiq and Izotope, same notes as for the Z-Plane one probably apply. Prices not public knowledge but can be expected to be high etc.