/usr/share/SuperCollider/HelpSource/Classes/LocalOut.schelp is in supercollider-common 1:3.8.0~repack-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | class:: LocalOut
summary:: Write to buses local to a synth.
related:: Classes/LocalIn
categories:: UGens>InOut
Description::
LocalOut writes to buses that are local to the enclosing synth. The buses
should have been defined by a link::Classes/LocalIn:: ugen. The
code::channelsArray:: must be the same number of channels
as were declared in the link::Classes/LocalIn:: . These are like the
global buses, but are more convenient if you want to implement a self
contained effect that uses a feedback processing loop.
warning::
Audio written to a LocalOut will not be read by a corresponding
link::Classes/LocalIn:: until the next cycle, i.e. one block size of
samples later. Because of this it is important to take this additional
delay into account when using link::Classes/LocalIn:: to create
feedback delays with delay times shorter than the threshold of pitch
(i. e. < 0.05 seconds or > 20Hz), or where sample accurate
alignment is required. See the resonator example below.
::
classmethods::
method::ar, kr
argument::channelsArray
An Array of channels or single output to write out. You cannot
change the size of this once a SynthDef has been built.
Examples::
code::
(
{
var source, local;
source = Decay.ar(Impulse.ar(0.3), 0.1) * WhiteNoise.ar(0.2);
local = LocalIn.ar(2) + [source, 0]; // read feedback, add to source
local = DelayN.ar(local, 0.2, 0.2); // delay sound
// reverse channels to give ping pong effect, apply decay factor
LocalOut.ar(local.reverse * 0.8);
Out.ar(0, local);
}.play;
)
(
z = SynthDef("tank", {
var local, in;
in = Mix.fill(12, {
Pan2.ar(
Decay2.ar(Dust.ar(0.05), 0.1, 0.5, 0.1)
* FSinOsc.ar(IRand(36,84).midicps).cubed.max(0),
Rand(-1,1))
});
in = in + Pan2.ar(Decay2.ar(Dust.ar(0.03), 0.04, 0.3) * BrownNoise.ar, 0);
4.do { in = AllpassN.ar(in, 0.03, {Rand(0.005,0.02)}.dup, 1); };
local = LocalIn.ar(2) * 0.98;
local = OnePole.ar(local, 0.5);
local = Rotate2.ar(local[0], local[1], 0.23);
local = AllpassN.ar(local, 0.05, {Rand(0.01,0.05)}.dup, 2);
local = DelayN.ar(local, 0.3, [0.19,0.26]);
local = AllpassN.ar(local, 0.05, {Rand(0.03,0.15)}.dup, 2);
local = LeakDC.ar(local);
local = local + in;
LocalOut.ar(local);
Out.ar(0, local);
}).play;
)
(
z = SynthDef("tape", {
var local, in, amp;
in = AudioIn.ar([1,2]);
amp = Amplitude.kr(Mix.ar(in));
in = in * (amp > 0.02); // noise gate
local = LocalIn.ar(2);
local = OnePole.ar(local, 0.4);
local = OnePole.ar(local, -0.08);
local = Rotate2.ar(local[0], local[1], 0.2);
local = DelayN.ar(local, 0.25, 0.25);
local = LeakDC.ar(local);
local = ((local + in) * 1.25).softclip;
LocalOut.ar(local);
Out.ar(0, local * 0.1);
}).play;
)
// Resonator, must subtract blockSize for correct tuning
(
var play, imp, initial;
SynthDef("testRes", {
play = LocalIn.ar(1);
imp = Impulse.ar(1);
LocalOut.ar(DelayC.ar(imp + (play * 0.995), 1, 440.reciprocal - ControlRate.ir.reciprocal)); // for feedback
OffsetOut.ar(0, play);
}).play(s);
{SinOsc.ar(440, 0, 0.2) }.play(s, 1); // compare pitch
)
::
|