Could you please specify a bit more: how long are your samples and of what kind ? How much pitch shift do you want at max ?
E.g. if you have percussive sounds and you want to play them in parallel it might suffice to measure the (silent ?) time before attack and calculate the adapted start positions. Clearly the decay times will be different though …
Other than that, as mentioned, granular and fft pitch shift are the methods that can be used. The easiest way ist the built-in granular-based PitchShift ugen. IMO it is not as bad as widely regarded, you have to find reasonable params, which depend very much on the sound.
I’d recommend controlling timeDispersion and pitchDispersion params with mantissa and exponent, find an example here:
You’ll see that for playback of most recorded sounds it is easier to find good params than for Saw.