Here is the basic way to do polyphonic pitch transpose, whether up or down, as described on the Spin Semi website:
“To perform pitch transposition, we will need to use variable delays, but as we already know, we cannot change a delay, increasing or decreasing its length for very long, or we will eventually run out of memory. To retain the basic character of the music while changing its pitch through a variable delay technique, we will need to occasionally change our moving delay read pointer as it approaches one end of the delay to the opposite end of the delay, and continue on. This abrupt jump in the read pointer’s position will be to a very different part of the music program, and will certainly cause an abrupt sound. The problem can be largely overcome by establishing two delays, let’s name them A and B, both with moving read pointers, but with their pointers positioned such that when the read pointer of delay A is just about to run out of ‘room’, delay B’s pointer is comfortably in the middle of it’s delay’s range. We then cause a crossfade, from obtaining our transposer output from delay A to the signal coming from delay B. When the delay B pointer begins to run out of space, (just prior to pointer repositioning), we crossfade back to delay A. The delays can in fact be a single delay, with two read pointers properly positioned.”
This solves the discontinuity problem. There will still be a variable delay of the transposed signal. In addition, there can be phase cancellation during the crossover, which will be pitch dependent. With longer buffer lengths, this sounds like tremolo. Shorter buffer lengths reduces the delay, but the warble becomes unpleasant.
I tried to come up with more sophisticated algorithms on the FV-1 years ago, but that processor was too limited to do much more. I am sure one could do much better on the Daisy platform.