gizmo~ will do it, try different fft sizes like 256, 1024, 4096, 16384 to determine the best tradeoff between frequency and time accuracy. will depend on the kind of audio you’re working with and how precise you want to be. I don’t know the general take on how well gizmo~ compares with other pitch-shifting objects (since you have to shift the pitch when you change speed to maintain the original pitch).
To be sure there’s no shifting when you speed up or slow down (the sig~ to your groove~), you need to shift the pitch to match. send the float value going to sig~ through [~/ 1.] (take the reciprocal). This value goes into gizmo~ for transposition. Works well for relatively small speed changes, but any large ones are going to sound weird with pretty much any object.