Hi AliceIf I get a chance to go through this in more detail I will, but for the moment here's a few hints.First the usual disclaimer: I go through a lot of effort to pack these things into 140 characters, and often this means doing things in a very strange way just because it's a couple of characters shorter to write. (This one is very much one of those cases.) They're really not written to be understood. You're welcome to try and deconstruct them, and you might learn something useful from doing it - but that's not likely to include any kind of sensible coding style.With that said, I can explain some useful points about these examples. In the first one I'm setting up 99 feedback loops using InFeedback, using bus numbers. In SuperCollider 3.4 and earlier, channels 0 to 15 are special (0 to 7 are outputs to the sound card and 8 to 15 are inputs), so the feedback busses are from 20 to 119, read by "Feeback.ar(20,99)". I don't want to use an Out UGen to write to these (it would cost around 8 or 9 characters) so instead I'm using the one added automatically by play{}, which starts writing from 0. So I let the function output an array which consists of the following:* a stereo signal from Splay.ar, which occupies channels 0 and 1* an array of 18 zeros, which occupies channels 2 to 19. This is to provide "padding" so that the next set of outputs will be in the correct channels.* The signals for the feedback loop, given by (x-x.rotate/2), which occupies channels 20 to 119.This (x-x.rotate/2) is what passes the feedback signal to the next one in the loop. The 'rotate' makes a version of the array where each element is shifted one index to the right (I think? Or maybe the left) and the final one is shifted back to the beginning. This is added to the original with a 180 degree phase shift (i.e. subtracted), so that each feedback channel gets a mixture between its own output and the output from one channel to the left.In the second example it's not the single ++a that's copying the signal to the two nearest neighbours, but rather the "InFeedback.ar(i+[-1,1]%6+2).sum" part, which reads from channels ((i-1)%6)+2 and ((i+1)%6)+2 and adds them together.I hope these hints are useful. Let me know if any of it is unclear and I'll expand on it.Kind regards and happy new year,NathanielOn 30 December 2013 17:53, ecila <<a href="" target="_top" rel="nofollow" link="external">[hidden email]> wrote:
Dear list,
I recently stumbled across Nathan Virgo's sctweets and am a bit blown away
by their conceptual and technical elegance, but am struggling to unpack some
of the language.
I'm a long-time cybernetics fan and keen to try and integrate some of these
ideas in a live improv system. If anyone had time to clear up the following,
I would be hugely grateful.
The main bit of syntax I am having trouble finding reference to is the use
of ++ to pass the signal around the feedback chain (my C head reads it as
bit shift). From Nathan's notes, in the first example below, output of each
feedback node is passed to the next in the ring; in the second outputs are
passed to two nearest neighbours ... I can't get my head around how this
works in the first example (and what the role of array of 18 zeros and
rotated version of x is in achieving this), or indeed how a single ++a
copies to 2 nearest neighbours...
More verbose example, or pointer to documentation gratefully received.
Cheers,
Happy New Year.
Alice
(
play{Splay.ar(x=sin(CombL.ar(LPF.ar(InFeedback.ar(20,99),2e3),1,LFNoise1.kr(1e-3!99)+1/99,0.05)+Dust2.ar(0.01!99)))++(0!18)++(x-x.rotate/2)}
)
play{Splay.ar(a={|i|RLPF.ar(Trig.ar(InFeedback.ar(i+[-1,1]%6+2).sum.abs.lag(1e-3)<1e-4,8e-3),{2**10.rand*20}!4,1e-3,0s).mean.sin}!6,0.5)++a}
--
View this message in context: http://new-supercollider-mailing-lists-forums-use-these.2681727.n2.nabble.com/Plea-for-help-in-unpacking-Nathan-s-genius-feedback-sctweets-tp7606429.html
Sent from the SuperCollider Users New (Use this!!!!) mailing list archive at Nabble.com.
_______________________________________________
sc-users mailing list
info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: https://listarc.bham.ac.uk/marchives/sc-users/
search: https://listarc.bham.ac.uk/lists/sc-users/search/
--
Nathaniel Virgo
http://nathanielvirgo.com
If you reply to this email, your message will be added to the discussion below:http://new-supercollider-mailing-lists-forums-use-these.2681727.n2.nabble.com/Plea-for-help-in-unpacking-Nathan-s-genius-feedback-sctweets-tp7606429p7606452.html