On the face of it the only major difference is the amount of interpolation positions available (interpolation resolution). If attempting to create a vibrato effect through the ADDR_PTR/RMPA approach this would obviously become a problem as the low interpolation resolution distorts the modulation waveform. However for pitch shifting effects where the incrementation is constant I can't see how a lower interpolation resolution would have any other effects than to limit the amount of pitch shift settings available. (E.g. a linear counter increment of -256 creates an octave up pitch shift while an increment of 0 creates no pitch shift. Between the two settings there is a resolution of 255 other pitch shifts available.).
Some questions:
1. Is there a difference in the output data's bit resolution when reading with the RMPA vs CHO RDA instructions?
2. Is the ramp interpolation (fractional address data) linear or does it follow some other curve that decreases artifacts?
3. Is there some kind of reconstruction filtering happening behind the scenes with the CHO RDA instruction?
For anyone unclear on how non-ramp based pitch shifting is performed here is a quick sketch:
Code: Select all
equ scaler reg0 ; increment scaler POT
equ counter reg1 ; pitch shift counter
; increment scaler #################
or $7fffff ; 1
rdax POT0, -2 ; range [1 to -1]
skp NEG, 1 ; if GEZ :
sof 0.5, 0. ; x 0.5
wrax scaler, 0 ; range [0.5 to 0 to -1]
; positive counter with bipolar incrementation ##########
or 256 ; base increment
mulx scaler ; x [0.5 to 0 to -1]
or $800000 ; shift increment to negative range
rdax counter, 1 ; add counter
and $7fffff ; shift sum to positive range
wrax counter, 0 ; store counter, clr
; Addressing to fetch output data ##########
ldax counter ; fetch address data
wrax ADDR_PTR, 0 ;
rmpa 1 ;
wrax DACL, 0 ;
; buffer looping ######################
rda 32767, 1 ; buffer looping
mulx POT1 ;
rdax ADCL, 1 ;
wra 0, 0 ;
; end