Rielaborazioni varie

I Pirati delle Navi Rosse attaccarono nella notte, uccidendo o prendendo in ostaggio la maggior parte della popolazione. Una nota di riscatto giunta alla Rocca di Castelcervo chiedeva oro, sotto la minaccia di rilasciare gli ostaggi. Re Sagace trovò che non avesse senso, e rifiutò di pagare. I pirati misero in pratica la minaccia, rilasciando gli ostaggi all'apparenza incolumi e facendo vela nella notte. Ma fu subito chiaro che, per una magia arcana, gli abitanti del villaggio erano fuori di senno.

(
{
Klank.ar(
`[[100, 200, 300, 400, 500, 600, 700, 800, 900, 1000], //freq array
[0.05, 0.2, 0.04, 0.06, 0.11, 0.01, 0.15, 0.03, 0.15, 0.2]],
PinkNoise.ar(LFTri.kr(0.07, 0.07, 0.07))).dup
}.play
)

Klank.ar(specificationsArrayRef, input, freqscale, freqoffset, decayscale)
Klank is a bank of fixed frequency resonators which can be used to simulate the resonant modes of an object. Each mode is given a ring time, which is the time for the mode to decay by 60 dB.



{ Klank.ar(`[[800, 1071, 1353, 1723], nil, [1, 1, 1, 1]], PinkNoise.ar(0.007)).dup }.play;

(
play({
        Klank.ar(`[
                Array.rand(12, 800.0, 4000.0), // frequencies
                nil,  // amplitudes (default to 1.0)
                Array.rand(12, 0.1, 2)  // ring times
                ], Decay.ar(Impulse.ar(4), 0.03, 0.01)).dup
})
)



(
{
var harmonics = 16;
Mix.fill(harmonics,
{ arg count;
Pan2.ar(
FSinOsc.ar(
exprand(100, 2000),
mul: max(0, FSinOsc.kr(rrand(1/3, 1/6))*rrand(0.1, 0.9))),
1.0.rand2)
}
) / (2*harmonics)
}.play;
)

(
{
var dur = 6, base, aenv, fenv, out, trig;
base = Rand(40, 100);
trig = SinOsc.ar(1/10);
out = Mix.fill(15,{
var thisDur;
thisDur = dur * rrand(0.5, 1.0);
aenv = EnvGen.kr(Env.perc(0, thisDur), trig);
fenv = EnvGen.kr(Env.new([0, 0, 1, 0], [0.25*thisDur, 0.75*thisDur, 0]), trig);
Pan2.ar(SinOsc.ar( Rand(base, base * 12) * LFNoise1.kr(10, mul: 0.02 * fenv, add: 1), // freq
mul: aenv // amp
), ([1, -1].choose) * fenv)
}) * 0.05;
}.play(s);
{
var dur = 6, base, aenv, fenv, out, trig, detune;
base = Rand(40, 60);
detune = 0.1; // increase this number to detune the second bell
trig = SinOsc.ar(1/10, pi);
out = Mix.fill(15,
{ arg count;
var thisDur;
thisDur = dur * rrand(0.5, 1.0);
aenv = EnvGen.kr(Env.perc(0, thisDur), trig);
fenv = EnvGen.kr(Env.new([1, 1, 0, 1], [0.05*thisDur, 0.95*thisDur, 0]), trig);
Pan2.ar(SinOsc.ar( base*(count+1+ detune.rand) *
LFNoise1.kr(10, mul: 0.02 * fenv, add: 1), // freq
mul: aenv // amp
), ([1, -1].choose) * fenv)
}) * 0.05;
}.play(s);
)




"Qui svolazzava ritmicamente un'orda addomesticata di ibridi esseri alati [...] non si trattava esattamente di corvi, né di talpe, né di poiane, né di formiche, e nemmeno di esseri umani decomposti, ma erano un qualcosa che non posso e non devo ricordare." H. P. Lovecraft, Il Festival

[esempio trovato su SuperCollider Code e rielaborato]

(
SynthDef("pulse",{ arg freq,delayTime,amp = 1.0,attack = 0.01;
        var out,out2,env;
        env = EnvGen.kr(Env.perc(attack, 1, 5, 10),doneAction: 2);
        z = SinOsc.ar(freq,0,0.7);
        a = Pan2.ar(ToggleFF.ar(TDelay.ar(z,delayTime)) * SinOsc.ar(freq),
                 SinOsc.kr(3,0), 0.6);
        out = Pan2.ar(z, SinOsc.kr(5,1.0pi),0.7 ) + a;
        out = out * env;
        out = out.clip2(1);

        Out.ar(0,FreeVerb.ar(out,0.7,1.0,0.4, amp));
}).send(s);
)
(


SynthDef("droneee", { arg freq = 440, amp = 1.0, outbus = 0, phase = 0;
        var out, env;
        env = EnvGen.kr(Env.sine(10),doneAction: 2);
        out = LFPulse.ar(freq , 0.15);
        out = RLPF.ar(out,SinOsc.kr(0.3, 0, 200, 1500), 0.1);
        out = FreeVerb.ar(out, 0.5, 0.5, 0.5) * env;
        out = Pan2.ar(out, SinOsc.kr(1/10, phase),amp);

    Out.ar(outbus, out);
}).send(s);)

(
SynthDef("bass",{
        arg freq,amp,outbus=0;
        var env,out;
        out = SinOsc.ar(freq,0,amp);
        env = EnvGen.kr(Env.perc(0.5,1,1,0),doneAction: 2);
        out = out*env;
        out = Pan2.ar(out,0);
        Out.ar(outbus,out);


}).send(s);

)
 (

p = Prand( [61,77, 37,63,67,71], inf).asStream;
q = Prand( [3,0.7,1.3,0.7], inf ).asStream;
e = Prand([37,73,71,77,81,88,90],inf).asStream;

t = Task({
                inf.do({

                if( 0.1.coin, {
                        Synth("pulse",
                             [\freq,e.value.midicps,
                              \amp,0.07.rand +0.2,
                              \attack,7.0.rand,
                                    \delayTime, 0.02;
                                    ]);
                   });


                Synth("droneee",
                       [\outBus,0,
                        \freq, p.value.midicps,
                        \amp, (0.02.rand2 + 0.05) * 0.7,
                        \phase,[0,1.5pi].wchoose([0.5,0.5]);
                        ]);
                q.value.wait;

                Synth("bass",[\freq,p.value.midicps,\amp,0.3]);

                    });
});

t.start;


)





Nel libro SnowCrash, Neal Stephenson definisce il Nam Shub of Enki come un Linguaggio di Programmazione per il subconscio umano.

(
SynthDef(\snowcrash, {|out, gate=1, freq=440|
    // doneAction: 2 rilascia la synth quando EvnGen ha finito
Out.ar(out, (PinkNoise.ar(freq/2)*0.02*Saw.ar(freq) * EnvGen.kr(Env.asr(0.1, 0.3, 7.3), gate, doneAction:2)));
}).add;
)


(
Pbind(
    \instrument, \snowcrash,
    \freq, Pseq([137, 373, Prand([237, 473, 713],1)], inf),
    \legato, Pseq([1.7, 0.3], inf),
    \dur, 0.3,
    \out, Pseq([1, 0], inf)
).play;
)






"buio, pareti fredde, metallo, passi confusi in un labirinto di paura; precipitare in un abisso oscuro? Oppure continuare a camminare incerto sulla lama del rasoio? Vivo come un acrobata e danzo lentamente sul filo; mi trovo sulla lama del rasoio e inizio a avvertire brividi di piacere."

Non ritrovo come lho fatto;







Captate misteriose onde radio provenienti dalle profondità dell'Universo. Da dove provengono? Chi o cosa le ha prodotte? Sette anni fa, una singola raffica di onde radio di origine sconosciuta fu riconosciuta come proveniente dal di fuori della nostra galassia, un segnale dallo spazio esterno generato a miliardi di anni luce di distanza che ha viaggiato attraverso le profondità del cosmo ed è arrivato qui, sulla Terra.

(
{var frequency;
Mix.ar({
frequency = rrand(100, 300);
Pan2.ar(SinOsc.ar(frequency,
mul: EnvGen.kr(Env.perc(0.001, frequency/100),
Dust.kr(0.05), 0.2)), rrand(-1.0, 1.0)) }.dup(100))}.play
)

un Mix di 100 oscillatori sinusoidali, modulati in ampiezza da Envelope percussivi innescati da impulsi (Dust) random e pannati randomicamente;

rrand(24, 48)   // distribuzione lineare nel range indicato

audacity effect

reverse
vocoder
equalization high+ , bass-




(
var songLength = 60;
{
        //Sines
        var sineLine1 = Line.kr(600, 210, songLength);
        var sineLine2 = Line.kr(100, 210, songLength);
        var sines = SinOsc.ar(sineLine1) * SinOsc.ar(sineLine2); (questo è un Ring Mode?)
        //Filter
        var filterLineLFO = SinOsc.ar(0.2); (questo è un LFO, frequenza 0.2)
        var filterLine = Line.kr(200, 6000, songLength, doneAction: 2) * filterLineLFO; (qui sto moltiplicando l'LFO per un crescendo lineare, quindi una sinusoide che cresce in ampiezza)
        var filtLFO = SinOsc.kr(0.4).range(60, filterLine); (un altro LFO 0.4hz, range scala l'output nel range definito da lo e hi)
        var filter = BMoog.ar(sines, filtLFO, 0.9, 1).tanh * 0.5; (che va a modulare la freq di cutoff del filtro)
        //Comb
        var comb = CombL.ar(filter, 1, 0.3, 1); (effetto tipo il delay)
        var mix1 = (comb + GVerb.ar(filter)) * 0.1; (+ reverbero)
        mix1 = (CombL.ar(mix1, 1, 1, 6) * 0.3) + mix1; (altro delay?)
        HPF.ar(mix1, 100) * 0.5; (filtro passa alto a freq 100hz, toglie le basse frequenze)
}.play
)

tanh = tangente iperbolica

(
z = {
    var sig, freq;
    freq = MouseX.kr(20,12000,\exponential);
    sig = BMoog.ar(
        LFSaw.ar([freq * 0.99, freq * 1.01], 0, 0.1) ! 2,
        SinOsc.kr(SinOsc.kr(0.1),1.5pi,1550,1800),
        MouseY.kr(1,0,\linear),
        0);    // filter mode - lowpass
     (CombN.ar(sig, 0.4, [0.4,0.35],2) * 0.4) + (sig * 0.5);
}.play)
z.release

ar

SinOsc.ar
BMoog.ar
CombL.ar
HPF.ar

kr

Line.kr
SinOsc.kr

Bmoog

ar (in, freq: 440, q: 0.2, mode: 0, saturation: 0.95, mul: 1, add: 0)
Arguments:
in
input signal to be processed
freq
cutoff frequency
q
bandwidth / cutoffFreq. 0 < q > 1
mode
filter mode:
< 1 low pass filter
< 2 high pass filter
< 3 bandpass filter
defaults to lowpass.




Joshua: Volgiamo fare una partita?.
Jennifer: [Ridacchiando] Sentiva la mancanza di Falken.
David: Già.[Digitando sulla tastiera] Si, volentieri. Ti andrebbe Guerra Termonucleare Globale?
Joshua: Non preferirebbe una bella partita a scacchi?
David: Dopo, Giochiamo alla Guerra Termonucleare Globale.

(
{
var triggerSpeed, trigger;
triggerSpeed = 0.1;
trigger = Impulse.kr(triggerSpeed);
Pan2.ar(LFNoise0.ar(
TRand.kr(100, 1000, trigger),
mul: EnvGen.kr(
Env.perc(0.001, 3/triggerSpeed),
trigger
)
),0)
}.play
)


(
{
Pan2.ar(SinOsc.ar(SinOsc.ar(4/10, mul: 100, add: 1000), mul: 0.1) +
SinOsc.ar(SinOsc.ar(2/10, mul: 100, add: 1000), mul: 0.1) +
SinOsc.ar(SinOsc.ar(5/10, mul: 100, add: 1000), mul: 0.1),0)
}.play
)

2 suoni;

1) il trigger che è un Impulse.kr(0.1Hz, 1 volta ogni 10 sec) innesca il TRand.kr che produce una frequenza da 100 a 1000Hz randomicamente per il LFNoise0.ar, rumore la cui ampiezza ha un Envelopment percussivo con attacco istantaneo e un release di 3/0.1 secondi;

2) il secondo suono è creato dalla somma di 3 Sinusoidi modulate in frequenza da altre Sinusoidi a diverse frequenze, che da vita a interferenze costruttive e distruttive;

TRand           generatore di numeri casuali a innesco

TRand.kr(lo, hi, trig)
TRand.ar(lo, hi, trig)

Genera un valore float casuale nella distribuzione uniforme da lo a hi
ogni volta che il trigger passa da valori non positivi a valori positivi


Impulse     oscillatore a impulsi

Impulse.ar(freq, phase, mul, add)

genera un singolo campio di impulsi a banda non limitata.
freq - frequenza in Hertz
phase - offset di fase in cicli ( 0..1 )





"Erano creature di un colore tendente al rosa, lunghe circa un metro e mezzo; il loro corpo, avvolto in un involucro da crostaceo, era dotato di un paio di grandi pinne o ali membranose dorsali, e di diversi gruppi di membra articolate; una specie di ellissoide ricoperto da una moltitudine di brevi antenne teneva il posto della testa." H. P. Lovecraft, Colui che sussurrava nel buio

play({RLPF.ar(Dust.ar([12, 15]), LFNoise1.ar(1/[3, 4], 1500, 1600), 0.02)})

Un filtro risonante passa basso attraverso il quale vengono fatti passare due treni di impulsi random (Dust, il parametro density è il valor medio di impulsi al secondo); la frequenza del filtro è modulata tramite 2 UGen di tipo LFNoise, mentre il parametro della risonanza è impostato a 0.02;

(
{
GVerb.ar((
{
var burstEnv, att = 0, dec = 0.001;
var burst, delayTime, delayDecay = 0.5;
var midiPitch = 69; // A 440
delayTime = midiPitch.midicps.reciprocal;

burstEnv = EnvGen.kr(Env.perc(att, dec), gate: Impulse.kr(1/delayDecay));
burst = PinkNoise.ar(burstEnv);
CombL.ar(burst, delayTime, delayTime,delayDecay, add: burst);
}
),270,30,0.7,drylevel:0.5)
}.play
)

Viene costruito un Envelope di tipo percussivo, attack a 0 e decay a 0.001 con un gate di impulsi (2 al secondo); questo Envelope va a sagomare l'ampiezza di un segnale PinkNoise; il tutto viene dato in pasto a questa UGen CombL, una echo chamber :

viene inviato l'impulso rumoroso attraverso una camera di eco; CombL, che ha questi argomenti : in, maxdelaytime, delayTime, decayTime, mul, add. L'input sarà l'impulso rumoroso che abbiamo appena creato. Il delaytime e il maxdelaytime rappresentano quantità di tempo, in secondi, e indicano quanto il segnale viene ritardato (l'eco). Il tempo di decadimento è il tempo necessario per la scomparsa dell'eco. La frequenza del gate è impostata sul reciproco del  delayDecay in modo che un nuovo impulso inneschi un altro burst di rumore quando il precedente si è spento.



un mix di 5 SinOsc pannati random e modulati da LFO sinusoidali

(
{
Mix.ar(
Array.fill(5, // not too many values, could crash
{Pan2.ar(
SinOsc.ar(SinOsc.ar(1/10, rrand(0, 6.0), 200, 500)),
1.0.rand)}
)
)*0.02
}.play
)


(
{
var trig, out, delay;
trig = Impulse.kr(6); // trigger rate
out = Blip.ar(
TRand.kr(48, 72, trig).midicps, // range, in midi, of pitches
TRand.kr(1, 12, trig), // range of timbre
max(0, TRand.kr(-0.5, 0.4, trig)) // amplitudes
);
out = Pan2.ar(out, TRand.kr(-1.0, 1.0, trig));
out = out*EnvGen.kr(Env.perc(0, 1), trig);
out = Mix.ar({out}.dup(6))*0.2;
delay = CombL.ar(out, 2.0, 4/6, 6);
out + delay
}.play
)


Blip         generatore di impulsi a banda limitata

Blip.ar(freq, numharm, mul, add)

TRand        generatore di numeri random a innesco

TRand.kr(lo, hi, trig)
TRand.ar(lo, hi, trig)

Genera un valore float casuale nella distribuzione uniforme da lo a hi
ogni volta che il trigger passa da valori non positivi a valori positivi

EnvGen              generatore di evelope

Inherits from: Object : AbstractFunction : UGen

Gli envelope sono istanze della classe Env. Vedi la classe Env per maggiori informazioni. Gli argomenti levelScale, levelBias e timeScale vengono sottoposti a polling quando EnvGen viene attivato e rimangono costanti per tutta la durata dell'envelope.
   
*ar(envelope, gate, levelScale, levelBias, timeScale, doneAction)
*kr(envelope, gate, levelScale, levelBias, timeScale, doneAction)

*perc(attackTime, releaseTime, peakLevel, curve)

Crea un nuovo envelope che generalmente ha una forma percussiva;

attackTime - la durata dell'attack.
releaseTime - la durata del release.
peakLevel - il peak level dell'envelope.
curve - la curvatura dell'envelope.
 
Env.perc(0.05, 1, 1, -4).test.plot;
Env.perc(0.001, 1, 1, -4).test.plot;    // sharper attack
Env.perc(0.001, 1, 1, -8).test.plot;    // change curvature
Env.perc(1, 0.01, 1, 4).test.plot;  // reverse envelope


(
// a SynthDef
SynthDef(\bz, { | out, freq = 440, amp = 0.1, nharms = 3, pan = 0, gate = 1 |
    var audio = Blip.ar(XLine.kr(freq, 200,6), Line.kr(1,nharms,0.5), amp);
    var env = Linen.kr(gate, doneAction: 2);
    OffsetOut.ar(out, Pan2.ar(audio, pan, env) );
}).add;
)

Pbind(\instrument, \bz, \freq, Prand([1, 1.2, 2, 2.5, 3, 4], inf) * 200, \dur, 0.1, \nharms, Prand([1, 3, 10], inf, \pan, Prand([-1,0,1], inf)) ).play;

Blip

è un generatore di impulsi a banda limitata dove tutte le armoniche hanno stessa ampiezza; i parametri sono la frequenza, il numero di armoniche e poi mul e add;

Linen

è un generatore semplice di envelope

kr(gate: 1, attackTime: 0.01, susLevel: 1, releaseTime: 1, doneAction: 0)

Pbind

Un pattern di eventi, Pbind, mette in relazione eventi con pattern di dati, e può essere eseguito. Ne consegue una notazione estremamente compatta ed elegante per la specifica di flussi di eventi sonori


Update cookies preferences