//---------------------------------------------------------------- // name: ZeroX (Zero Crossing Detector) // desc: Detect the number of zero crosses in a Flip of samples // 1. Flip will convert N samples to a UAna Frame // 2. ZeroX will then count the number of zero crossings in // the UAna Frame // // Note the ZeroX output in this example is equal to // zeroX = 2*freq / (sample_rate / N) //---------------------------------------------------------------- // analysis patch SinOsc foo => Flip flip =^ ZeroX zerox => blackhole; // set flip size (N) 4096 => flip.size; // change the frequency of foo randomly every 1-2 seconds fun void ctrl() { while( true ) { // new random freq Math.random2f( 100, 2000 ) => foo.freq; <<< "setting new freq:", foo.freq() >>>; // wait 1-2 seconds Math.random2f( 1, 2 )::second => now; } } // spork frequency changer shred spork ~ ctrl(); // main while( true ) { // compute ZeroX in the last UAna Frame // store the result in a UAnaBlob zerox.upchuck() @=> UAnaBlob blob; // print number of zero crossings <<< blob.fvals()[0], "" >>>; // advance time flip.size()::samp => now; }