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

@title{(pv-jensen-andersen buffer propsc prophfe prophfc propsf threshold waittime)}




fft feature detector for onset detection based on work described in
Jensen,K. & Andersen, T. H. (2003). Real-time Beat Estimation Using
Feature Extraction. in Proceedings of the Computer Music Modeling and
Retrieval Symposium, Lecture Notes in Computer Science. springer
Verlag.

First order derivatives of the features are taken. Threshold may
need to be set low to pick up on changes.

buffer    - fft buffer to read from.
propsc    - Proportion of spectral centroid feature.
prophfe   - Proportion of high frequency energy feature.
prophfc   - Proportion of high frequency content feature.
propsf    - Proportion of spectral flux feature.
threshold - Threshold level for allowing a detection
waittime  - If triggered, minimum wait until a further frame can
            cause another spot (useful to stop multiple detects on
            heavy signals)

Default values in sclang are: propsc=0.25, prophfe=0.25,
prophfc=0.25, propsf=0.25, threshold=1.0, waittime=0.04.





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


@racketblock[
(let* ((source (sound-in 0))
       (detect (pv-jensen-andersen (fft* 0 source)
				  0.25 0.25 0.25 0.25
				  (mouse-x kr 0.01 1.0 1 0.1)
				  0.04)))
  (audition
   (out 0 (mul (sin-osc ar (mce2 440 445) 0)
	       (decay (mul 0.1 detect) 0.1)))))
]


