[chuck-users] Audio Range and Zero-crossings
Veli-Pekka Tätilä
vtatila at mail.student.oulu.fi
Sun Mar 4 08:55:37 EST 2007
Hi,
And thanks for an extremely quick reply. I'll snip myself here.
joerg piringer wrote:
> Veli-Pekka Tätilä wrote:
>> chuck version: 1.2.0.7b (dracula)
>> exe target: microsoft win32
>> 1. What's the range of the audio float datatype and what would be
>> the best way to detect zero crossings? My aim is to write a simple
>> app that counts the samples in the low and high phases of a pulse
>> wave and prints out the pulse width whenever it changes. If I can
>> also get MIDi input into the app it would be quite easy to determine
>> how pulse width in percentages changes as the function of the pulse
>> width knob in my virtual and real analogs, whose exact values are
>> not documented.
>>
>> Here's some prototypical code (this is my first real chucK script):
>>
>> Code:
>> 100::ms => dur blockSize; // Processing resolution.
>> until(adc.last() < 0) // Measure low-phase first.
>> blockSize => now;
>> // SAmple counters:
>> 0 => int positive;
>> 0 => int negative;
>> while(true)
>> {
>> adc.last() => float sample;
>> if(sample > 0)
>> ++positive;
>> else if(sample < 0)
>> {
>> ++negative;
>> if(positive > 0) // Measured at least one cycle.
>> <<< "Width: ", 100 * negative / (negative + positive) >>>;
>> 0 => positive => negative; // Reset counters.
>> } // else if
>> // Ignore the pure 0 value.
>> blockSize => now;
>> } // while
>> End code.
>>
>> However, when I run this, the app doesn't ever seem to get past the
>> until loop. I'm assuming here that samples are floats or doubles
>> from -1 to 1 as in VST, as I didn't find the range in the manual. Is
>> this correct? IF not, it's no wonder the code won't work, <smile>.
>> Of course the rather grainy test processing rate, ten times a sec,
>> affects matters greatly but I don't ever seem to get negative sample
>> values even in arbitrary audio. The adc and dac modules do work. IF
>> I patch them together and record from the wave input I get a delayed
>> copy of the input in the output I guess this is the audio equivalent
>> of "cat".
> i didn't look too closely to your code but what you seem to have no
> statement like:
> adc a => blackhole;
> or
> adc a => dac d;
> at the beginning. so in fact adc isn't working at all because it's not
> in the ugen chain.
Ah I see, only chains leading to DAC are processed to save CPU cycles.
Somewhat counter-intuitive initially, in this case. I wish one could have
the ability to print out warnings about diagnostics related to disabledd
modules. Most GUi-enabled modular environments show it in some way.
Seems my query is still valid, though. I added:
adc => dac;
At the top of the script and now I get an echo effect because there's plenty
of latency between the input and output. It still doesn't get past the until
loop, probably some other common newbie goof.
--
With kind regards Veli-Pekka Tätilä (vtatila at mail.student.oulu.fi)
Accessibility, game music, synthesizers and programming:
http://www.student.oulu.fi/~vtatila/
More information about the chuck-users
mailing list