Reading from and Writing to Effect Busses

I am playing around with writing and reading busses. In the following example, I write the LFNoise to the bus 55, read from that bus to feed my SinOsc and write the output to bus 25, and read from it sending it out to bus 0.

a = {Out.ar(0, In.ar(25))}.play
b = {Out.ar(25, SinOsc.ar(freq: In.ar(55), mul: 0.1))}.play;
c = {Out.ar(55, LFNoise0.ar(10).range(440, 1000))}.play

This works, but if I swap the order of synths b and c, only 0s go into the freq of the SinOsc. Why is this?
The following doesn’t make any sound:

(
a = {Out.ar(0, In.ar(25))}.play;
c = {Out.ar(55, LFNoise0.ar(10).range(440, 1000).poll)}.play;
b = {Out.ar(25, SinOsc.ar(freq: In.ar(55).poll, mul: 0.1))}.play;
)

There are two concept here: first is called order of execution, there is a help file that will specifically explain what is up here; second is that audio buses get reset to zero between evaluation blocks - control buses do not.

Basically, whilst the code is written in the order you want it to execute, it actually reads from bottom to top (this is a little confusing, but there are instances where it is help).

A simple fix is to explicitly state the order.

(
c = {Out.ar(55, LFNoise0.ar(10).range(440, 1000).poll)}.play(addAction: \addToTail);
b = {Out.ar(25, SinOsc.ar(freq: In.ar(55).poll, mul: 0.1))}.play(addAction: \addToTail);
a = {Out.ar(0, In.ar(25))}.play(addAction: \addToTail);
)

Now the code reads from top to bottom.

Now why is there no sound, because SinOsc.ar has zero for its frequency as the bus is zeroed out when a new block is evaluated.

It also isn’t common to use bus number explicitly, instead try this:

~freq_bus = Bus.audio(s);
~sin_bus = Bus.audio(s);

... In.ar(~sin_bus)  ....
... In.ar(~freq_bus) ....