Okay, so I made a little patch comparing the table approach and delay approach, and they both have their ups and downs. For one, the table method will only allow you to speed/pitch down for the most recent audio. Faster playback will result in the virtual playback head to pass in front of the record head, causing it to playback previously recorded material, which I get the feeling isn't what you're after.
The downside to the delay method has more to do with the fact that I just can't remember how to go about determining the exact transposition you're looking for. But it does allow for longer playback than the table method using the same size buffer. This is because the playback head is always following the record head and can thus wrap around the buffer before reaching the max buffer length or catching up with the record head.
I used the [cos~] object to generate an envelope. This is what is used in G09.pitchshift.pd. The difference is that there are two of them, offset by 180 degrees. These envelope to delays playing back at different speeds, and as one delay is silent the other is at max peak. They are essentially crossfading in and out with each other. The silent one is switching from the beginning of the delay line to the end (or vise versa, depending on the pitchshift) while we can't hear it. So basically it plays short snippets (or grains) at different speeds to change pitch, but the start times of each grain are relative to the input signal so there's no sense of timestretching.
Something like that.
I don't know what's going on with the math in the transpose section, I just know it works!
http://www.pdpatchrepo.info/hurleur/helpforpatches.pd