Tuesday, June 8, 2010

Final Post #1: pre-rendered non-voice sounds

low underlying sound - 
http://soundcloud.com/credit/woosh
  • The sound of spray paint (2 seconds) was sampled at 1/10 playback rate, passed through reverb, and passed through a resonator filter at frequency 100 and bandwidth of 100.
(
var score=CtkScore.new, syn, buf, useBuf;

buf = CtkBuffer("/Users/bion/Desktop/spray.wav").addTo(score);

syn = CtkSynthDef(\weee, {
    var play, outS, filt, env;
    env = EnvGen.kr(Env([0,1,1,0],[0.04,1,0.04].normalizeSum, \sin), timeScale: buf.duration*10+4);
    play = PlayBuf.ar(1, buf, BufRateScale.kr(buf)*0.1);
    filt = FreeVerb.ar(play, 0.9, 1, 0.5);
    filt = Resonz.ar(filt, 100, 1);
    outS = filt*env;
    Out.ar(0, outS);
});

score.add(syn.new(0.5, buf.duration*10+4)).play;

score.write("~/Desktop/woosh.wav".standardizePath);
)

headspace ambient sound -  
http://soundcloud.com/credit/headspace_1-1
  • Uses a technique I developed Winter quarter. A buffer containing a series of clicks is played by a GrainBuf UGen being (for the most part) stochastically controlled by Tendency masks.  The result is passed through a reverb which is in tern passed through a series of resonator filters (which are also stochastically controlled) before being sent out.  The resonator filters together form the third inversion of a half diminished Bb7 chord.
(
var score=CtkScore.new, globeamp=1;
var start, loop, g1e1, g1e11, g1e2, g1e3, g1e4, g1e5;

var filtgroup, hpfBus, lpfBus, bpfBus, apdBus, brfBus, brf2Bus, revBus, rev2Bus, resBus, res, brf, apd, hpf, lpf, bpf, rev, player, warpPlayer, grainPlayer;
var playFunc, warpPlayFunc, grainPlayFunc, resFunc, hpfFunc, brfFunc, lpfFunc, bpfFunc, apdFunc, revFunc;
var envArray, panArray, grainSizeArray, grainSizeEnvArray, trigArray, winBufArray;
var convsrcBus, convkrnBus, convo;

var grit3, overallEnv;

grit3 = CtkBuffer("/Users/bion/Desktop/Transitions_In-Humanity/AmDev/grit3.wav").addTo(score);

filtgroup = CtkGroup.new;
score.add(filtgroup);

convsrcBus = CtkAudio.new(1);
convkrnBus = CtkAudio.new(1);

brfBus = CtkAudio.new(1);
brf2Bus = CtkAudio.new(1);
hpfBus = CtkAudio.new(1);
lpfBus = CtkAudio.new(1);
bpfBus = CtkAudio.new(1);
apdBus = CtkAudio.new(1);
revBus = CtkAudio.new(1);
rev2Bus = CtkAudio.new(1);
resBus = CtkAudio.new(1);

/* __________________ source synths __________________ */

player = CtkSynthDef(\player2, {
    arg buffer, outbus, pan, env, dur, amp, rate, startPos, loop;
    var out, playbuf;
    playbuf = PlayBuf.ar(1, buffer, rate, startPos: startPos*BufSampleRate.kr(buffer), loop: loop);
    out = Pan2.ar(playbuf, pan);
    OffsetOut.ar(outbus, out*amp*env);
});

warpPlayer = CtkSynthDef(\warp, {
    arg buffer, outbus, env, pan, dur, amp, start, end, freqScale, winBuf, overlaps, winSize;
    var out, pointer, panning;
    pointer = EnvGen.kr(Env([start, end], [dur], \lin));
    out = Warp1.ar(1, buffer, pointer, freqScale, winSize, -1, overlaps, 0.5);
    panning = Pan2.ar(out, pan);
    OffsetOut.ar(outbus, panning*env*amp);
});

grainPlayer = CtkSynthDef(\grainPlay, {
    arg buffer, outbus, amp, pan, env, trig, grainSize, rate, pos, envBufNum, dur, trigRand, rateEnv, amp2;
    var out, grainBuf, iterator, outTrig;
    outTrig = trig*grainSize.reciprocal+(LFNoise0.kr(trig)*trigRand);
    iterator = EnvGen.kr(Env([0, dur], [dur], \lin));
    grainBuf = GrainBuf.ar(1, Impulse.ar(outTrig), grainSize, buffer, rate*rateEnv, pos, 4, iterator, envBufNum);
    out = Pan2.ar(grainBuf, pan);
    OffsetOut.ar(outbus, out*env*amp*amp2.dbamp);
});

/* __________________ filter synths __________________ */

bpf = CtkSynthDef(\bpf, {
    arg inbus, outbus, freq, rq, env, amp;
    var in, out;
    in = In.ar(inbus, 1);
    out = BPF.ar(in, freq, rq);
    OffsetOut.ar(outbus, out*env*amp);
});

brf = CtkSynthDef(\brf, {
    arg inbus, outbus, freq, rq=1, env, amp;
    var in, out;
    in = In.ar(inbus, 1);
    out = BRF.ar(in, freq, rq);
    OffsetOut.ar(outbus, out*env*amp);
});

hpf = CtkSynthDef(\hpf, {
    arg inbus, outbus, freq, env;
    var in, out;
    in = In.ar(inbus, 1);
    out = HPF.ar(in, freq);
    OffsetOut.ar(outbus, out*env);
});

lpf = CtkSynthDef(\lpf, {
    arg inbus, outbus, freq, env;
    var in, out;
    in = In.ar(inbus, 1);
    out = LPF.ar(in, freq);
    OffsetOut.ar(outbus, out*env);
});

apd = CtkSynthDef(\apd, {
    arg inbus, outbus, delay, decay, env;
    var in, filt;
    in = In.ar(inbus, 1);
    filt = AllpassC.ar(in, 1, delay, decay);
    OffsetOut.ar(outbus, filt*env);
});

res = CtkSynthDef(\res, {
    arg inbus, outbus, freq, env, rq, amp, amp2;
    var in, filt;
    in = In.ar(inbus, 1);
    filt = Resonz.ar(in, freq, rq);
    OffsetOut.ar(outbus, filt*env*amp.dbamp*amp2.dbamp);
});

rev = CtkSynthDef(\rev, {
    arg inbus, outbus, revTime, outDamp, inDamp, dryLvl, earlyRef, roomSize, amp, env;
    var in, tmp, out1, out2;
    in = In.ar(inbus, 1).dup;
    #tmp, out2 = GVerb.ar(in, roomSize, revTime, outDamp, inDamp, earlyreflevel: earlyRef);
    out1 = tmp[0]+(out2[1]);
    out2 = out2[0]+(tmp[1]);
    OffsetOut.ar(outbus, out1*env);
});

convo = CtkSynthDef(\convo, {
    arg srcBus, krnBus, outbus, freq, env, rq;
    var src, krn, out;
    src = In.ar(srcBus, 1);
    krn = In.ar(krnBus, 1);
    out = Convolution.ar(src, krn, 2**14);
    OffsetOut.ar(outbus, out*env);
});

/* __________________ source functions __________________ */

playFunc = {
    arg time, buffer, outbus, tScale=nil, amp=0, env=0, rate=1, pan=0, startPos=0, loop=0;
    var duration, outPan;

    outPan = panArray[pan];

    if(tScale == nil, {tScale = buffer.duration*rate});
    duration = tScale;
    if(outPan.isNumber, {}, {outPan = CtkControl.env(outPan, timeScale: tScale)});

    score.add(player.new(time, duration)
        .buffer_(buffer).outbus_(outbus).pan_(pan).loop_(loop)
        .env_(CtkControl.env(envArray[env], timeScale: tScale))
        .dur_(duration).amp_(amp.dbamp).rate_(rate).startPos_(startPos)
    );
};

warpPlayFunc = {
    arg time, buffer, outbus, amp=0, env=0, duration, pan=0, freqScale=1, start=0, end=1, overlap=2.5, winSize=0.12;
    var bufDur, winBuf, outPan;
   
    bufDur = buffer.duration;

    outPan = panArray[pan];

    if(outPan.isNumber, {}, {outPan = CtkControl.env(outPan, timeScale: duration)});

    score.add(warpPlayer.new(time, duration)
        .buffer_(buffer).outbus_(outbus).pan_(outPan)
        .env_(CtkControl.env(envArray[env], timeScale: duration))
        .dur_(duration).amp_(amp.dbamp).start_(start).end_(bufDur*end)
        .freqScale_(freqScale).overlaps_(overlap).winSize_(winSize)
    );
};

grainPlayFunc = {
    arg time, buffer, outbus, grainSize=0.12, grainSizeEnv=0, amp=0, env=0, pan=0, rate=1, pos=0, trig=0, winBuf=0, trigRand=0.5;
    var dur, windowBuf, outTrig, outPan, outGrainSizeEnv;
   
    dur = buffer.duration*(rate.reciprocal);
       
    windowBuf = CtkBuffer.env(size: 512, env: winBufArray[winBuf]);
    score.add(windowBuf);
       
    outTrig = trigArray[trig];
    outPan = panArray[pan];
    outGrainSizeEnv = grainSizeEnvArray[grainSizeEnv];
   
    if(outTrig.isNumber, {}, {outTrig = CtkControl.env(outTrig, timeScale: dur)});
    if(outPan.isNumber, {}, {outPan = CtkControl.env(outPan, timeScale: dur)});
    if(outGrainSizeEnv.isNumber, {}, {outGrainSizeEnv = CtkControl.env(grainSizeEnvArray[grainSizeEnv], timeScale: dur)});
   
    score.add(grainPlayer.new(time, dur)
        .buffer_(buffer).outbus_(outbus).pan_(outPan).amp_(amp.dbamp).dur_(dur)
        .env_(CtkControl.env(envArray[env], timeScale: dur)).trig_(outTrig).trigRand_(trigRand)
        .grainSize_(grainSize*outGrainSizeEnv).envBufNum_(windowBuf).rate_(rate)
    );
};

/* __________________ filter functions __________________ */

bpfFunc = {
    arg time, dur, inbus, outbus, freq, bw=1, envNum=0, amp=0;
    score.add(bpf.new(time, dur, addAction: \tail, target: filtgroup)
        .inbus_(inbus).outbus_(outbus).freq_(freq).rq_(bw/freq)
        .env_(CtkControl.env(envArray[envNum], timeScale: dur)).amp_(amp.dbamp)
    );
};

brfFunc = {
    arg time, dur, inbus, outbus, freq, bw, envNum=0, amp=0;
    score.add(brf.new(time, dur, addAction: \tail, target: filtgroup)
        .inbus_(inbus).outbus_(outbus).freq_(freq).rq_(bw/freq)
        .env_(CtkControl.env(envArray[envNum], timeScale: dur)).amp_(amp.dbamp)
    );
};

hpfFunc = {
    arg time, dur, inbus, outbus, freq, envNum=0;
    score.add(hpf.new(time, dur, addAction:\tail, target: filtgroup)
        .inbus_(inbus).outbus_(outbus).freq_(freq)
        .env_(CtkControl.env(envArray[envNum], timeScale: dur))
    );
};


lpfFunc = {
    arg time, dur, inbus, outbus, freq, envNum=0;
    score.add(lpf.new(time, dur, addAction:\tail, target: filtgroup)
        .inbus_(inbus).outbus_(outbus).freq_(freq)
        .env_(CtkControl.env(envArray[envNum], timeScale: dur))
    );
};

apdFunc = {
    arg time, dur, inbus, outbus, delay=0.2, decay=1, envNum=0;
    score.add(apd.new(time, dur, addAction:\tail, target: filtgroup)
        .inbus_(inbus).outbus_(outbus).delay_(delay).decay_(decay)
        .env_(CtkControl.env(envArray[envNum], timeScale: dur))
    );
};

resFunc = {
    arg time, dur, inbus, outbus, freq, bw;
    score.add(res.new(time, dur, addAction: \tail, target: filtgroup)
        .inbus_(inbus).outbus_(outbus).freq_(freq).rq_(bw/freq)
    );
};   

revFunc = {
    arg time, inbus, outbus, endTime=score.endtime, revTime=1, outDamp=0, inDamp=0.5,
        dryLvl=0, earlyRef=0, roomSize=100, amp=0, envNum=0;
    score.add(rev.new(time, endTime, addAction: \tail, target: filtgroup)
        .inbus_(inbus).outbus_(outbus).revTime_(revTime)
        .outDamp_(outDamp).inDamp_(inDamp).dryLvl_(dryLvl.dbamp)
        .earlyRef_(earlyRef.dbamp).roomSize_(roomSize).amp_(amp.dbamp)
        .env_(CtkControl.env(envArray[envNum], timeScale: endTime-time))
     );
};

/* ____________________________________ control/calls ____________________________________ */

envArray = [
    Env([0, 1, 0], [0.5,0.5], [-100,100]),
    Env([0, 1, 0], [0.5,0.5], [-10, 10]),
    Env([0, 1, 0], [0.01, 0.8].normalizeSum, [-6, \lin, \welch]),
    Env([0, 0, 1, 1, 0], [0.2, 0.001, 5, 10], [10, \lin, -2]),
    Env([1, 2, 0.5], [3, 2], \welch),
    Env([3, 0.5], [4], \exp),
    Env([1, 4], [4], \exp),
    Env([1, 1], [4]),
    Env(10.collect({arg i; Tendency(Env([0,0.8], [10]), Env([0.22, 1], [11])).at(i)}),
        9.collect({rrand(0.0, 1)}).normalizeSum),
    Env(10.collect({arg i; Tendency(Env([0.8,0], [10]), Env([1, 0.22], [11])).at(i)}),
        9.collect({rrand(0.0, 1)}).normalizeSum)
];
panArray = [
    0, 1, -1,
    Env(Array.rand(5, -1.0, 1.0), Array.rand(4, 0.0, 1.0).normalizeSum),
    Env(20.collect({arg i; Tendency(1.0, -1.0, 0.7, 0.7).at(i, \betaRand)}), 19.collect({arg i; i*0.88}), \welch),
    Env([-1, 1], [1], \welch)
];
grainSizeArray = [
    1, 2, 5, 0.5, 0.25
];
winBufArray = [
    Env([0.001, 1, 1, 0.001], [0.01, 1, 0.01].normalizeSum, \sin),
    Env([0.001, 1, 0.001], [0.01, 1-0.01], \exponential),
    Env([0.0001, 0.75, 0.25, 1, 0.25, 0.75, 0.0001], [0.2, 0.2, 0.2, 0.2, 0.2, 0.2].normalizeSum, \welch),    Env([0,1,0], [0.25,0.75], \sin),
    Env([0.001, 1, 0.001], [1, 1].normalizeSum, \sin),
    Env([0,1,0], [0.5,0.5], [-10,10]),
    Env([0,1,0], [0.5,0.5], [10,-10]),
];

grainSizeEnvArray = [1];
trigArray = [10, Env([2, 2], [1], \lin)];

start = 1;
loop = 100;
overallEnv = Env([0,1,1,0],[0.1,40,0.1], \sin);

g1e11 = CtkEvent(start, overallEnv, 1)
    .function_({
        arg event, group, envbus, inc, server;
        var dur, pan, outTrig, trigRand, grainSize, rate, rateEnv, buffer;

        buffer = grit3;
        pan = panArray[[0, 1, 2, 3].wchoose([0.3, 0.2, 0.2, 0.3])];
        outTrig = 0.5.rrand(1.5);
        grainSize = 0.03.rrand(0.07);
        rate = 202.collect(2.rrand(7)).at(inc);
        rateEnv = envArray[[4, 5, 6, 7, 8].wchoose([0.1, 0.1, 0.1, 0.35, 0.35])];
        dur = buffer.duration*(0.1.rrand(0.6))*rate;
       
        if(pan.isNumber, {}, {pan = CtkControl.env(pan, timeScale: dur)});
       
        event.collect(
            grainPlayer.new(0, dur)
                .buffer_(buffer).outbus_(revBus).pan_(pan).amp_(-3.dbamp).dur_(dur)
                .env_(CtkControl.env(envArray[0], timeScale: dur)).trig_(outTrig).trigRand_(0).amp2_(18)
                .grainSize_(grainSize).envBufNum_(-1).rate_(rate).rateEnv_(CtkControl.env(rateEnv));
        );
        event.next_(dur-(dur*0.6));
});
score.add(g1e11.score);

revFunc.value(start, revBus, outbus: resBus, endTime: start+42, revTime: 1, outDamp: 1,
    inDamp: 1, roomSize: 250, amp: 2, envNum: 0, dryLvl: 0, earlyRef: 0.8);

g1e2 = CtkEvent(start, overallEnv, 1)
    .function_({
        arg event, group, envbus, inc, server;
        var dur, freq, rq;
       
        freq = [PC(\bf, 3).freq, PC(\bf, 4).freq].choose;
        dur = 1.0.rrand(2.0);
        rq = 3/freq;
       
        event.collect(
            res.new(0, dur, addAction: \tail, target: filtgroup)
                .inbus_(resBus).outbus_(0).freq_(freq).amp_(1).rq_(rq)
                .env_(CtkControl.env(envArray[0], timeScale: dur)).amp2_(30)
        );
        event.next_(dur-(dur*0.8));
});
score.add(g1e2.score);

g1e3 = CtkEvent(start, loop, 1)
    .function_({
        arg event, group, envbus, inc, server;
        var dur, freq, rq;
       
        freq = [PC(\e, 3).freq, PC(\e, 4).freq].choose;
        dur = 1.0.rrand(2.0);
        rq = 3/freq;
       
        event.collect(
            res.new(0, dur, addAction: \tail, target: filtgroup)
                .inbus_(resBus).outbus_(0).freq_(freq).amp_(1).rq_(rq)
                .env_(CtkControl.env(envArray[0], timeScale: dur)).amp2_(30)
        );
        event.next_(dur-(dur*0.8));
});
score.add(g1e3.score);

g1e4 = CtkEvent(start, overallEnv, 1)
    .function_({
        arg event, group, envbus, inc, server;
        var dur, freq, rq;
       
        freq = [PC(\gs, 3).freq, PC(\gs, 4).freq].choose;
        dur = 1.0.rrand(2.0);
        rq = 3/freq;
       
        event.collect(
            res.new(0, dur, addAction: \tail, target: filtgroup)
                .inbus_(resBus).outbus_(0).freq_(freq).amp_(1).rq_(rq)
                .env_(CtkControl.env(envArray[0], timeScale: dur)).amp2_(30)
        );
        event.next_(dur-(dur*0.8));
});
score.add(g1e4.score);

g1e5 = CtkEvent(start, overallEnv, 1)
    .function_({
        arg event, group, envbus, inc, server;
        var dur, freq, rq;
       
        freq = [PC(\cs, 3).freq, PC(\cs, 4).freq].choose;
        dur = 1.0.rrand(2.0);
        rq = 3/freq;
       
        event.collect(
            res.new(0, dur, addAction: \tail, target: filtgroup)
                .inbus_(resBus).outbus_(0).freq_(freq).amp_(1).rq_(rq)
                .env_(CtkControl.env(envArray[0], timeScale: dur)).amp2_(30)
        );
        event.next_(dur-(dur*0.8));
});
score.add(g1e5.score);

score.write("~/Desktop/amDevIIII.wav".standardizePath, options: ServerOptions.new.numOutputBusChannels_(1).maxNodes_(1024*4));
)

surgery underlying sound - 
http://soundcloud.com/credit/surgery-underlying
  • There are two sources for this sound.  The method to generate the first is described in the "Doctor Scene Soundscape" post below.  Two cycles from the very end of that sound were looped to create a low, repetitive thumping.  The second was made by taking a recording of a busy bar (the college inn) performing an FFT on it, an IFFT, and then yet another IFFT - this sound was pitch shifted very far down and then low pass filtered to create a low, grainy, almost LFNoise sound.  The two signals were then mixed using a compander to compress the later noise using the thumping/ringing sound as a control signal.

(var score=CtkScore.new, note;
var thump, low, ray;

thump = CtkBuffer("/Users/bion/Desktop/Surgeries/thumpathump.wav").addTo(score);
low = CtkBuffer("/Users/bion/Desktop/Surgeries/LowLast.wav").addTo(score);

note = CtkSynthDef(\stepp, {
    var in1, in2, comp, outS, env;
    env = EnvGen.kr(Env([0,1,1,0],[0.01,1,0.01].normalizeSum, [-10,10]), timeScale: 140);
   
    in1 = PlayBuf.ar(1, thump, BufRateScale.kr(thump), loop: 1);
    in2 = PlayBuf.ar(1, low, BufRateScale.kr(low), loop: 1);
    comp = Compander.ar(in2, in1, -60.dbamp, 1, 0.01, 0.001, 0.01);
    outS = (in1*2+comp)*env;
    outS = Limiter.ar(outS, -1.dbamp);
    Out.ar([0,1], outS);
});

score.add(note.new(0.5, 140));

score.write("/Users/bion/Desktop/DocBack.wav", headerFormat: "WAV", options: ServerOptions.new.numOutputBusChannels_(1));
)

No comments:

Post a Comment