#lang scribble/manual
@(require (for-label racket))

@title{(pv-bin-shift buffer stretch shift)}


Shift and scale the positions of the bins.  Can be used as a very
crude frequency shifter/scaler.  Shifts the leftmost bin at
`buffer' by `shift' places, the distance between subsequent bins is
`stretch'.


@racketblock[
(with-sc3
 (lambda (fd)
   (async fd (b-alloc 10 2048 1))))
]


@racketblock[
(define snd
  (let* ((f1 (squared (mul-add (sin-osc kr 0.08 0) 6 6.2)))
	 (f2 (sin-osc kr f1 0)))
    (sin-osc ar (mul-add f2 100 800) 0)))
]


@racketblock[
(audition (out 0 snd))
]


@racketblock[
(audition
 (out 0 (mul
	 (ifft*
	  (pv-bin-shift
	   (fft* 10 snd)
	   (mouse-y kr 1 4 0 0.1)
	   (mouse-x kr -10 100 0 0.1)))
	 1/2)))
]


