Wednesday, May 19, 2010

Voice Processing I - The Doctor's Voice #3

http://soundcloud.com/credit/docvoice_attempt3

(   
var score=CtkScore.new, note, gamp, fftbuf, centbuf;
var doc, crossbuf, warpbuf;

doc = CtkBuffer("/Users/bion/Desktop/Transitions_In-Humanity/Doc1.wav").addTo(score);
fftbuf = CtkBuffer.buffer(2**12).addTo(score);
centbuf = CtkBuffer.buffer(2**12).addTo(score);
crossbuf = CtkBuffer.buffer(2**12).addTo(score);
warpbuf = CtkBuffer.buffer(2**12).addTo(score);

gamp = 6.dbamp;
note = CtkSynthDef(\docvoicing, {
    var chain, env, outS, pdoc, pray, cent, width, yi, er, san, avg, adj, centchain;
    var cross, crosschain, waste;
    env = EnvGen.kr(Env([0,1,1,0], [0.01, 1, 0.01].normalizeSum, [-10, 10]), timeScale: doc.duration);
   
    pdoc = PlayBuf.ar(1, doc, BufRateScale.kr(doc));
   
    chain = FFT(fftbuf, pdoc);

    centchain = PV_Copy(chain, centbuf);
    centchain = PV_MagAbove(centchain, 50);
    cent = SpecCentroid.kr(centchain);
    er = DelayC.kr(cent, 0.10, 0.10);
    san = DelayC.kr(cent, 0.06, 0.06);
    avg = (cent+er+san)/3;
    avg = avg.min(1000);
    avg = avg.max(100);
    adj = LinLin.kr(avg, 100, 1000, 2, 13);

    chain = PV_MagSmear(chain, adj);

    chain = IFFT(chain);
   
    outS = chain;
    outS = outS*gamp*env;
    outS = Limiter.ar(outS, 0.dbamp);
    Out.ar(0, outS);
});

score.add(note.new(0.5, doc.duration/3));
//score.play;
score.write("~/Desktop/docvoice.wav".standardizePath,
    options: ServerOptions.new.numOutputBusChannels_(1))
)

No comments:

Post a Comment