#lang scribble/manual @(require (for-label racket)) @title{(in-feedback num-channels bus)} Read signal from a bus without erasing it, audio rate. The output (out) ugens overwrite data on the bus, giving this bus a new timestamp so that any input (in) ugen can check if the data was written within the current cycle. The next cycle this data is still there, but in case of audio one normally doesn't want an in ugen to read it again, as it might cause feedback. This is the reason why in ar checks the timestamp and ignores everything that was not written within this cycle. This means that nodes can only read data from a bus that was written by a preceeding node when using the in ar ugen which overwrites the old data. This is good for audio, but for control data it is more convenient to be able to read a bus from any place in the node order. This is why in kr behaves differently and reads also data with a timestamp that is one cycle old. Now in some cases we want to be able to read audio from a bus independant of the current node order, which is the use of inFeedback. The delay introduced by this is at a maximum one block size, which equals about 0.0014 sec at the default block size and sample rate. Audio feedback modulation. @racketblock[ (let ((f (mul-add (in-feedback 1 0) 1300 300))) (audition (out 0 (mul (sin-osc ar f 0) 0.4)))) ] Evaluate these in either order and hear both tones. @racketblock[ (let ((b (add num-input-buses num-output-buses))) (audition (out 0 (in-feedback 1 b)))) ] @racketblock[ (let ((b (add num-input-buses num-output-buses))) (audition (mrg2 (out b (mul (sin-osc ar 440 0) 0.1)) (out 0 (mul (sin-osc ar 660 0) 0.1))))) ] Doubters consult this. @racketblock[ (let ((b (add num-input-buses num-output-buses))) (audition (out 0 (in 1 ar b)))) ] Resonator, see localout for variant. @racketblock[ (let* ((b (add num-input-buses num-output-buses)) (p (in-feedback 1 b)) (i (impulse ar 1 0)) (d (delay-c (add i (mul p 0.995)) 1 (sub (recip 440) (recip control-rate))))) (audition (mrg2 (offset-out b d) (offset-out 0 p)))) ] Compare with oscillator. @racketblock[ (audition (out 1 (mul (sin-osc ar 440 0) 0.2))) ]