Hello,
I was wondering how come that average.poll returns slightly different values than the SendTrig in the SendFreqAverage def . And how can I possibly retrieve the last value that comes out of the average, if that is not the one that I am currently getting?
Here is the def in question:
(
SynthDef(\SendFreqAverage,{
arg buffer;
var amp, trig, freq, hasFreq, average, player, pass;
player = PlayBuf.ar(2,buffer,1,1,5,0,2);
# freq, hasFreq = Pitch.kr(player, initFreq: 0, minFreq: 20.0, maxFreq: 20000.0, execFreq: 100.0, maxBinsPerOctave: 16, median: 1, ampThreshold: 0.01, peakThreshold: 0.5, downSample: 1, clar: 0);
pass = freq[0] * freq[1];
Out.ar(0,player);
average = AverageOutput.kr(pass , trig: 0.0, mul: 1.0, add: 0.0);
average.poll;
DetectSilence.ar(player,0.1, 1,2);
SendTrig.kr(Changed.kr(average),1, average);
}).add)
Here is the rest, if perhaps relevant:
//defs
(
(
SynthDef(\RecordBuf, { arg out = 0, bufnum = 0;
var signal;
signal = SoundIn.ar()!2;
RecordBuf.ar(signal, bufnum,recLevel: 1,preLevel: 0, run: DetectSilence.ar(signal,0.1, 0.5,doneAction: 2).range(1,0),loop: 0);
}).add;
);
(
SynthDef(\SendFreqAverage,{
arg buffer;
var amp, trig, freq, hasFreq, average, player, pass;
player = PlayBuf.ar(2,buffer,1,1,5,0,2);
# freq, hasFreq = Pitch.kr(player, initFreq: 0, minFreq: 20.0, maxFreq: 20000.0, execFreq: 100.0, maxBinsPerOctave: 16, median: 1, ampThreshold: 0.01, peakThreshold: 0.5, downSample: 1, clar: 0);
pass = freq[0] * freq[1];
Out.ar(0,player);
average = AverageOutput.kr(pass , trig: 0.0, mul: 1.0, add: 0.0);
average.poll;
DetectSilence.ar(player,0.1, 1,2);
SendTrig.kr(Changed.kr(average),1, average);
}).add);
OSCdef(\test,{ arg msg;
var trig;
msg.postln;
//trig = if(msg.at(3) > 0, {trig = 1},{trig = 0});
//~average = trig;
//~trigr1.postln;
},'/tr', s.addr);
)
OSCdef(\test).enable;
OSCdef(\test).clear;
//allocate
~b1 = Buffer.alloc(s, s.sampleRate * 10, 2);
//record
Synth(\RecordBuf, [\bufnum, ~b1])
//play & get average
Synth(\SendFreqAverage, [\buffer, ~b1])
Thank you for any thoughts on this !