; LoFi
; ----------------
; 'Low Fidelity' distorting effects of bit reduction and downsampling (foldover)
;
; aout  LoFi  ain,kbits,kfold
;
; Performance
; -----------
; ain    --  input audio to have low fidelity distortion effects applied
; kbits  --  bit depth reduction (suggested range 0 to 0.6)
; kfold  --  amount of foldover (range 0 to 1)


opcode	LoFi,a,akk
	ain,kbits,kfold	xin									;READ IN INPUT ARGUMENTS
	kfold		expcurve	kfold,500						;CREATE AN EXPONENTIAL REMAPPING OF kfold
	kfold		scale	kfold,1024,1							;RESCALE 0 - 1 VALUE TO 1 - 1024	
	kvalues		pow	2, ((1-(kbits^0.25))*15)+1					;RAISES 2 TO THE POWER OF kbitdepth. THE OUTPUT VALUE REPRESENTS THE NUMBER OF POSSIBLE VALUES AT THAT PARTICULAR BIT DEPTH
	k16bit		pow	2, 16								;RAISES 2 TO THE POWER OF 16
	aout		=	(int((ain*32768*kvalues)/k16bit)/32768)*(k16bit/kvalues)	;BIT DEPTH REDUCE AUDIO SIGNAL
	aout		fold 	aout, kfold							;APPLY SAMPLING RATE FOLDOVER
		xout	aout									;SEND AUDIO BACK TO CALLER INSTRUMENT
endop
