With BASS_FX you can change Tempo/Pitch/Speed in Real time and in decoding/encoding as well. Please check the Tempo example in BASS_FX package to see the demonstration and the code behind the Real time change.
All SoundTouch features are implemented in BASS_FX.
You have 3 streams, but you have only 1 handle for all of them, i.e: int stream Make an array of stream handles (int stream;) and then set volume for each one with the function that Chris wrote above.
One more thing... why are you calling BASS->BASS_Init every time? You have to call it only once when you're loading your application.
* DSP: * Fixed bug in BASS_FX_BFX_VOLUME_ENV, being applied slightly early when "bFollow" is enabled. * BASS_FX_BFX_DAMP made effect parameter setting a bit more convenient. If fGain < 0 then leave the current value.
* iOS: * Added armv7 architecture support. * Combined the Device armv6/7 architectures and Simulator libraries into a single file.
Is there an option in SoundTouch to reset phase at specific points in the timestretching process? I think one of the key differences between this time stretching algorithm and others out there is that others reset phase on percussive transients. This serves to reduce the amount of echo/flamming you hear when slowing down songs. Is there any way to combine beat detection and the phase vocoder to do this? Have you ever experimented with this? If it was possible and had any sort of effect, it would be great to get this option included in BASS_FX.
Here's an answer from Olli:
Phase reset is relevant and necessary in pitch/time shift algorithms that use frequency domain processing, but SoundTouch does processing in time domain which does not cause drifting of phase response.