packages feed

csound-expression-typed-0.2.0.2: data/opcodes/MultiFX/PitchShifter.udo

; PitchShifter
; ------------
; A pitch shifter effect based on FFT technology
;
; aout  PitchShifter  ain,kmix,kpitch,kfine,kfback
;
; Performance
; -----------
; ain    --  input audio to be pitch shifted
; kmix   --  dry / wet mix of the output signal (range 0 to 1)
; kpitch --  pitch shifting interval in thousands of a semitone (suggested range -0.012 to 0.012)
; kfine  --  fine control of pitch shifting interval in octaves (range -1/12 to 1/12)
; kfback --  control of the amount of output signal fed back into the input of the effect (suggested range 0 to 1)

opcode	PitchShifter,a,aKKKi
	ain,kmix,kscal,kfback,ifftsize	xin			;READ IN INPUT ARGUMENTS
	iWet	ftgentmp	0,0,1024,-7,0,512,1,512,1	;RESCALING FUNCTION FOR WET LEVEL CONTROL
	iDry	ftgentmp	0,0,1024,-7,1,512,1,512,0	;RESCALING FUNCTION FOR DRY LEVEL CONTROL
	kWet	table	kmix, iWet, 1				;RESCALE WET LEVEL CONTROL ACCORDING TO FUNCTION TABLE iWet
	kDry	table	kmix, iDry, 1				;RESCALE DRY LEVEL CONTROL ACCORDING TO FUNCTION TABLE iWet
	aPS	init	0                                       ;INITIALIZE aOutL FOR FIRST PERFORMANCE TIME PASS
	; kscal	=	octave(((kpitch*1000)/12)+kfine)	;DERIVE PITCH SCALING RATIO. NOTE THAT THE 'COARSE' PITCH DIAL BECOMES STEPPED IN SEMITONE INTERVALS	
	ioverlap  = ifftsize / 4
	iwinsize  = ifftsize
	fsig1 	pvsanal	ain+(aPS*kfback), ifftsize,ioverlap,iwinsize,0	;PHASE VOCODE ANALYSE LEFT CHANNEL
	fsig2 	pvscale fsig1, kscal				;RESCALE PITCH
	aPS 	pvsynth fsig2					;RESYNTHESIZE FROM FSIG
	aout	sum 	ain*kDry, aPS*kWet			;REDEFINE GLOBAL AUDIO SIGNAL FROM MIX OF DRY AND WET SIGNALS
		xout	aout					;SEND AUDIO BACK TO CALLER INSTRUMENT
endop