Showing the changes to examples/basic (48 of 486 files). Show all
Unified · Split
| @@ -0,0 +1,11 @@ | ||
| 1 | +// mic-in to audio out | |
| 2 | + | |
| 3 | +// the patch | |
| 4 | +adc => dac; | |
| 5 | + | |
| 6 | +// infinite time-loop | |
| 7 | +while( true ) | |
| 8 | +{ | |
| 9 | + // advance time | |
| 10 | + 100::ms => now; | |
| 11 | +} | |
| @@ -0,0 +1,24 @@ | ||
| 1 | +// an ADSR envelope | |
| 2 | +// (also see envelope.ck) | |
| 3 | +SinOsc s => ADSR e => dac; | |
| 4 | + | |
| 5 | +// set a, d, s, and r | |
| 6 | +e.set( 10::ms, 8::ms, .5, 500::ms ); | |
| 7 | +// set gain | |
| 8 | +.5 => s.gain; | |
| 9 | + | |
| 10 | +// infinite time-loop | |
| 11 | +while( true ) | |
| 12 | +{ | |
| 13 | + // choose freq | |
| 14 | + Math.random2( 20, 120 ) => Std.mtof => s.freq; | |
| 15 | + | |
| 16 | + // key on - start attack | |
| 17 | + e.keyOn(); | |
| 18 | + // advance time by 800 ms | |
| 19 | + 500::ms => now; | |
| 20 | + // key off - start release | |
| 21 | + e.keyOff(); | |
| 22 | + // advance time by 800 ms | |
| 23 | + 800::ms => now; | |
| 24 | +} | |
| @@ -0,0 +1,31 @@ | ||
| 1 | +// how long | |
| 2 | +2::hour => dur T; | |
| 3 | +// frequency | |
| 4 | +880 => float f; | |
| 5 | + | |
| 6 | +// remember | |
| 7 | +now => time start; | |
| 8 | +now + T => time later; | |
| 9 | + | |
| 10 | +// wait | |
| 11 | +while( now < later ) | |
| 12 | +{ | |
| 13 | + <<< (T - (now - start)) / second, "left..." >>>; | |
| 14 | + 1::second => now; | |
| 15 | +} | |
| 16 | + | |
| 17 | +// patch | |
| 18 | +SinOsc s => JCRev r => dac; | |
| 19 | +.025 => r.mix; | |
| 20 | +f => s.freq; | |
| 21 | + | |
| 22 | +// infinite while loop | |
| 23 | +while( true ) | |
| 24 | +{ | |
| 25 | + // go | |
| 26 | + 1.0 => s.gain; | |
| 27 | + 300::ms => now; | |
| 28 | + // stop | |
| 29 | + 0.0 => s.gain; | |
| 30 | + 300::ms => now; | |
| 31 | +} | |
| @@ -0,0 +1,11 @@ | ||
| 1 | +// shows getting command line arguments | |
| 2 | +// (example run: chuck args:1:2:foo) | |
| 3 | + | |
| 4 | +// print number of args | |
| 5 | +<<< "number of arguments:", me.args() >>>; | |
| 6 | + | |
| 7 | +// print each | |
| 8 | +for( int i; i < me.args(); i++ ) | |
| 9 | +{ | |
| 10 | + <<< " ", me.arg(i) >>>; | |
| 11 | +} | |
| @@ -0,0 +1,17 @@ | ||
| 1 | +// point of attack for random otf demo | |
| 2 | + | |
| 3 | +SinOsc s => dac; | |
| 4 | +.2 => s.gain; | |
| 5 | + | |
| 6 | +// an array: add stuff | |
| 7 | +[ 0 ] @=> int hi[]; | |
| 8 | + | |
| 9 | +while( true ) | |
| 10 | +{ | |
| 11 | + // change parameters here | |
| 12 | + Std.mtof( 45 + Math.random2(0,0) * 12 + | |
| 13 | + hi[Math.random2(0,hi.size()-1)] ) => s.freq; | |
| 14 | + | |
| 15 | + // different rate | |
| 16 | + 200::ms => now; | |
| 17 | +} | |
| @@ -0,0 +1,23 @@ | ||
| 1 | +// patch | |
| 2 | +Blit s => JCRev r => dac; | |
| 3 | +.5 => s.gain; | |
| 4 | +.05 => r.mix; | |
| 5 | + | |
| 6 | +// an array | |
| 7 | +[ 0, 2, 4, 7, 9, 11 ] @=> int hi[]; | |
| 8 | +// <<< hi.size() >>>; | |
| 9 | +// <<< hi[0], hi[1], hi[2], hi[3], hi[4], hi[5] >>>; | |
| 10 | + | |
| 11 | +// infinite time loop | |
| 12 | +while( true ) | |
| 13 | +{ | |
| 14 | + // frequency | |
| 15 | + Std.mtof( 33 + Math.random2(0,3) * 12 + | |
| 16 | + hi[Math.random2(0,hi.size()-1)] ) => s.freq; | |
| 17 | + | |
| 18 | + // harmonics | |
| 19 | + Math.random2( 1, 5 ) => s.harmonics; | |
| 20 | + | |
| 21 | + // advance time | |
| 22 | + 120::ms => now; | |
| 23 | +} | |
| @@ -0,0 +1,30 @@ | ||
| 1 | +// patch | |
| 2 | +Blit s => ADSR e => JCRev r => dac; | |
| 3 | +.5 => s.gain; | |
| 4 | +.05 => r.mix; | |
| 5 | + | |
| 6 | +// set adsr | |
| 7 | +e.set( 5::ms, 3::ms, .5, 5::ms ); | |
| 8 | + | |
| 9 | +// an array | |
| 10 | +[ 0, 2, 4, 7, 9, 11 ] @=> int hi[]; | |
| 11 | + | |
| 12 | +// infinite time loop | |
| 13 | +while( true ) | |
| 14 | +{ | |
| 15 | + // frequency | |
| 16 | + Std.mtof( 33 + Math.random2(0,3) * 12 + | |
| 17 | + hi[Math.random2(0,hi.size()-1)] ) => s.freq; | |
| 18 | + | |
| 19 | + // harmonics | |
| 20 | + Math.random2( 1, 5 ) => s.harmonics; | |
| 21 | + | |
| 22 | + // key on | |
| 23 | + e.keyOn(); | |
| 24 | + // advance time | |
| 25 | + 120::ms => now; | |
| 26 | + // key off | |
| 27 | + e.keyOff(); | |
| 28 | + // advance time | |
| 29 | + 5::ms => now; | |
| 30 | +} | |
| @@ -0,0 +1,47 @@ | ||
| 1 | +// po-tweet! | |
| 2 | + | |
| 3 | +// patch | |
| 4 | +SinOsc s => dac; | |
| 5 | +// gain | |
| 6 | +.4 => s.gain; | |
| 7 | + | |
| 8 | +// call chirp | |
| 9 | +chirp( 127, 20, 1::second ); | |
| 10 | + | |
| 11 | +// call chirp (with tinc) | |
| 12 | +chirp( 20, 120, 1.5::second, 100::ms ); | |
| 13 | + | |
| 14 | +// chirp function | |
| 15 | +fun void chirp( float src, float target, dur duration ) | |
| 16 | +{ | |
| 17 | + chirp( src, target, duration, 1::ms ); | |
| 18 | +} | |
| 19 | + | |
| 20 | +// chirp function (with tinc) | |
| 21 | +fun void chirp( float src, float target, dur duration, dur tinc ) | |
| 22 | +{ | |
| 23 | + // initialize freq | |
| 24 | + src => float freq; | |
| 25 | + // find the number of steps | |
| 26 | + duration / tinc => float steps; | |
| 27 | + // find the inc | |
| 28 | + ( target - src ) / steps => float inc; | |
| 29 | + // counter | |
| 30 | + float count; | |
| 31 | + | |
| 32 | + // do the actual work over time | |
| 33 | + while( count < steps ) | |
| 34 | + { | |
| 35 | + // increment the freq | |
| 36 | + freq + inc => freq; | |
| 37 | + // count | |
| 38 | + 1 +=> count; | |
| 39 | + | |
| 40 | + // set the freq | |
| 41 | + Std.mtof( freq ) => s.freq; | |
| 42 | + | |
| 43 | + // advance time | |
| 44 | + tinc => now; | |
| 45 | + } | |
| 46 | +} | |
| 47 | + | |
| @@ -0,0 +1,81 @@ | ||
| 1 | +// more chirping... | |
| 2 | + | |
| 3 | +// patch with envelope and pan | |
| 4 | +SinOsc s => Envelope e => Pan2 p => dac; | |
| 5 | +// gain | |
| 6 | +.5 => s.gain; | |
| 7 | + | |
| 8 | +// pan hard left | |
| 9 | +-1 => p.pan; | |
| 10 | +// call chirp | |
| 11 | +chirp( 127, 20, 1::second ); | |
| 12 | + | |
| 13 | +// wait for envelope to go down | |
| 14 | +10::ms => now; | |
| 15 | +// pan hard right | |
| 16 | +1 => p.pan; | |
| 17 | +// call chirp | |
| 18 | +chirp( 20, 120, 1::second, 100::ms ); | |
| 19 | + | |
| 20 | +// wait a second | |
| 21 | +1::second => now; | |
| 22 | + | |
| 23 | +// randomize pan | |
| 24 | +Math.random2f( -1, 1 ) => p.pan; | |
| 25 | +// call chirp | |
| 26 | +chirp( 30, 110, .5::second ); | |
| 27 | + | |
| 28 | +// wait for envelope to go down | |
| 29 | +10::ms => now; | |
| 30 | +// pan | |
| 31 | +Math.random2f( -1, 1 ) => p.pan; | |
| 32 | +// call chirp | |
| 33 | +chirp( 110, 30, 1::second, 100::ms ); | |
| 34 | + | |
| 35 | +// wait a second | |
| 36 | +1::second => now; | |
| 37 | + | |
| 38 | + | |
| 39 | +// chirp function | |
| 40 | +fun void chirp( float src, float target, dur duration ) | |
| 41 | +{ | |
| 42 | + // just call the other one with default tinc | |
| 43 | + chirp( src, target, duration, 1::ms ); | |
| 44 | +} | |
| 45 | + | |
| 46 | + | |
| 47 | +// chirp function (with tinc) | |
| 48 | +fun void chirp( float src, float target, dur duration, dur tinc ) | |
| 49 | +{ | |
| 50 | + // initialize freq | |
| 51 | + src => float freq; | |
| 52 | + // find the number of steps | |
| 53 | + duration / tinc => float steps; | |
| 54 | + // find the inc | |
| 55 | + ( target - src ) / steps => float inc; | |
| 56 | + // counter | |
| 57 | + float count; | |
| 58 | + // set env | |
| 59 | + .01 * duration / second => e.time; | |
| 60 | + // open env | |
| 61 | + 1 => e.keyOn; | |
| 62 | + | |
| 63 | + // do the actual work over time | |
| 64 | + while( count < steps ) | |
| 65 | + { | |
| 66 | + // increment the freq | |
| 67 | + freq + inc => freq; | |
| 68 | + // count | |
| 69 | + 1 +=> count; | |
| 70 | + | |
| 71 | + // set the freq | |
| 72 | + Std.mtof( freq ) => s.freq; | |
| 73 | + | |
| 74 | + // advance time | |
| 75 | + tinc => now; | |
| 76 | + } | |
| 77 | + | |
| 78 | + // close env | |
| 79 | + 1 => e.keyOff; | |
| 80 | +} | |
| 81 | + | |
| @@ -0,0 +1,22 @@ | ||
| 1 | +// a simple comb filter | |
| 2 | +// Ge Wang (gewang@cs.princeton.edu) | |
| 3 | + | |
| 4 | +// feedforward | |
| 5 | +Impulse imp => Gain out => dac; | |
| 6 | +// feedback | |
| 7 | +out => Delay delay => out; | |
| 8 | + | |
| 9 | +// our radius | |
| 10 | +.99999 => float R; | |
| 11 | +// our delay order | |
| 12 | +500 => float L; | |
| 13 | +// set delay | |
| 14 | +L::samp => delay.delay; | |
| 15 | +// set dissipation factor | |
| 16 | +Math.pow( R, L ) => delay.gain; | |
| 17 | + | |
| 18 | +// fire impulse | |
| 19 | +1 => imp.next; | |
| 20 | + | |
| 21 | +// advance time | |
| 22 | +(Math.log(.0001) / Math.log(R))::samp => now; | |
| @@ -0,0 +1,30 @@ | ||
| 1 | +// run each stooge, or run three stooges concurrently | |
| 2 | +// %> chuck moe++ larry++ curly++ | |
| 3 | + | |
| 4 | +// impulse to filter to dac | |
| 5 | +SndBuf i => NRev r => dac; | |
| 6 | + | |
| 7 | +// load glottal ooo | |
| 8 | +"special:glot_ooo" => i.read; | |
| 9 | +// play | |
| 10 | +//5.0 => i.rate; | |
| 11 | +.1 => r.mix; | |
| 12 | + | |
| 13 | +0.0 => float v; | |
| 14 | + | |
| 15 | +// infinite time-loop | |
| 16 | +while( true ) | |
| 17 | +{ | |
| 18 | + // set the current sample/impulse | |
| 19 | + 0 => i.pos; | |
| 20 | + // control gain | |
| 21 | + Math.cos(v) => i.gain; | |
| 22 | + // increment v | |
| 23 | + .05 +=> v; | |
| 24 | + // advance time | |
| 25 | + 81.0::ms => now; | |
| 26 | +} | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| @@ -0,0 +1,27 @@ | ||
| 1 | +// run each stooge, or run three stooges concurrently | |
| 2 | +// %> chuck moe larry curly | |
| 3 | + | |
| 4 | +// impulse to filter to dac | |
| 5 | +Impulse i => BiQuad f => dac; | |
| 6 | +// set the filter's pole radius | |
| 7 | +.99 => f.prad; | |
| 8 | +// set equal gain zeros | |
| 9 | +1 => f.eqzs; | |
| 10 | +// initialize float variable | |
| 11 | +0.0 => float v; | |
| 12 | +// set filter gain | |
| 13 | +.5 => f.gain; | |
| 14 | + | |
| 15 | +// infinite time-loop | |
| 16 | +while( true ) | |
| 17 | +{ | |
| 18 | + // set the current sample/impulse | |
| 19 | + 1.0 => i.next; | |
| 20 | + // sweep the filter resonant frequency | |
| 21 | + Std.fabs(Math.sin(v)) * 800.0 => f.pfreq; | |
| 22 | + // increment v | |
| 23 | + v + .1 => v; | |
| 24 | + // advance time | |
| 25 | + 101::ms => now; | |
| 26 | +} | |
| 27 | + | |
| @@ -0,0 +1,9 @@ | ||
| 1 | +// patch | |
| 2 | +adc => DelayL delay => dac; | |
| 3 | + | |
| 4 | +// set delay parameters | |
| 5 | +.75::second => delay.max => delay.delay; | |
| 6 | + | |
| 7 | +// infinite time loop | |
| 8 | +while( true ) 1::second => now; | |
| 9 | + | |
| @@ -0,0 +1,12 @@ | ||
| 1 | +// demo0.ck | |
| 2 | +// basic demo showing time and duration | |
| 3 | + | |
| 4 | +5::second + now => time later; | |
| 5 | + | |
| 6 | +while( now < later ) | |
| 7 | +{ | |
| 8 | + <<<now>>>; | |
| 9 | + 1::second => now; | |
| 10 | +} | |
| 11 | + | |
| 12 | +<<<now>>>; | |
| @@ -0,0 +1,14 @@ | ||
| 1 | +// demo1.ck | |
| 2 | +// candidate for most trivial demo | |
| 3 | + | |
| 4 | +0 => int a => int t; | |
| 5 | +1 => int b; | |
| 6 | +15 => int c; | |
| 7 | + | |
| 8 | +while( c > 0 ) | |
| 9 | +{ | |
| 10 | + a + b => t; | |
| 11 | + b => a; | |
| 12 | + <<<t => b>>>; | |
| 13 | + c - 1 => c; | |
| 14 | +} | |
| @@ -0,0 +1,65 @@ | ||
| 1 | +// demo2.ck | |
| 2 | +// really lame! | |
| 3 | + | |
| 4 | +// set the global gain | |
| 5 | +.1 => dac.gain; | |
| 6 | + | |
| 7 | +/* | |
| 8 | +// connect | |
| 9 | +SinOsc a => dac; | |
| 10 | +110.0 => a.freq; | |
| 11 | +1::second => now; | |
| 12 | +SinOsc b => dac; | |
| 13 | +220.0 => b.freq; | |
| 14 | +1::second => now; | |
| 15 | +SinOsc c => dac; | |
| 16 | +440.0 => c.freq; | |
| 17 | +1::second => now; | |
| 18 | +SinOsc d => dac; | |
| 19 | +880.0 => d.freq; | |
| 20 | +1::second => now; | |
| 21 | +SinOsc e => dac; | |
| 22 | +1760.0 => e.freq; | |
| 23 | +1::second => now; | |
| 24 | +*/ | |
| 25 | + | |
| 26 | +SinOsc oscarray[5]; | |
| 27 | +for(0 => int i; i<5; i++) { | |
| 28 | + | |
| 29 | + oscarray[i] => dac; | |
| 30 | + Math.pow(2, i) * 110.0 => oscarray[i].freq; | |
| 31 | + | |
| 32 | +} | |
| 33 | + | |
| 34 | +/* | |
| 35 | +// disconnect | |
| 36 | +a =< dac; | |
| 37 | +1::second => now; | |
| 38 | +b =< dac; | |
| 39 | +1::second => now; | |
| 40 | +c =< dac; | |
| 41 | +1::second => now; | |
| 42 | +d =< dac; | |
| 43 | +1::second => now; | |
| 44 | +e =< dac; | |
| 45 | +1::second => now; | |
| 46 | +*/ | |
| 47 | + | |
| 48 | +for(0 => int i; i<5; i++) { | |
| 49 | + | |
| 50 | + oscarray[i] =< dac; | |
| 51 | + 1::second => now; | |
| 52 | + | |
| 53 | +} | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| @@ -0,0 +1,27 @@ | ||
| 1 | +// demo3.ck | |
| 2 | +// super lame | |
| 3 | + | |
| 4 | +// global gain | |
| 5 | +Gain g => dac; | |
| 6 | +// set gain | |
| 7 | +.5 => g.gain; | |
| 8 | + | |
| 9 | +110.0 => float freq; | |
| 10 | +6 => int x; | |
| 11 | + | |
| 12 | +// loop | |
| 13 | +while( x > 0 ) | |
| 14 | +{ | |
| 15 | + // connect to gain | |
| 16 | + SinOsc s => g; | |
| 17 | + // change frequency | |
| 18 | + freq => s.freq; | |
| 19 | + freq * 2.0 => freq; | |
| 20 | + // decrement x | |
| 21 | + 1 -=> x; | |
| 22 | + | |
| 23 | + // advance time by 1 second | |
| 24 | + 1::second => now; | |
| 25 | + // disconnect the sinosc | |
| 26 | + s =< g; | |
| 27 | +} | |
| @@ -0,0 +1,15 @@ | ||
| 1 | +// feedforward | |
| 2 | +adc => Gain g => dac; | |
| 3 | +// feedback | |
| 4 | +g => Gain feedback => DelayL delay => g; | |
| 5 | + | |
| 6 | +// set delay parameters | |
| 7 | +.75::second => delay.max => delay.delay; | |
| 8 | +// set feedback | |
| 9 | +.5 => feedback.gain; | |
| 10 | +// set effects mix | |
| 11 | +.75 => delay.gain; | |
| 12 | + | |
| 13 | +// infinite time loop | |
| 14 | +while( true ) 1::second => now; | |
| 15 | + | |
| @@ -0,0 +1,20 @@ | ||
| 1 | +// run white noise through envelope | |
| 2 | +Noise n => Envelope e => dac; | |
| 3 | + | |
| 4 | +// infinite time-loop | |
| 5 | +while( true ) | |
| 6 | +{ | |
| 7 | + // random choose rise/fall time | |
| 8 | + Math.random2f(10,500)::ms => dur t => e.duration; | |
| 9 | ||
| 10 | + <<< "rise/fall:", t/ms, "ms" >>>; | |
| 11 | + | |
| 12 | + // key on - start attack | |
| 13 | + e.keyOn(); | |
| 14 | + // advance time by 800 ms | |
| 15 | + 800::ms => now; | |
| 16 | + // key off - start release | |
| 17 | + e.keyOff(); | |
| 18 | + // advance time by 800 ms | |
| 19 | + 800::ms => now; | |
| 20 | +} | |
| @@ -0,0 +1,22 @@ | ||
| 1 | +// FM synthesis by hand | |
| 2 | + | |
| 3 | +// carrier | |
| 4 | +SinOsc c => dac; | |
| 5 | +// modulator | |
| 6 | +SinOsc m => blackhole; | |
| 7 | + | |
| 8 | +// carrier frequency | |
| 9 | +220 => float cf; | |
| 10 | +// modulator frequency | |
| 11 | +550 => float mf => m.freq; | |
| 12 | +// index of modulation | |
| 13 | +200 => float index; | |
| 14 | + | |
| 15 | +// time-loop | |
| 16 | +while( true ) | |
| 17 | +{ | |
| 18 | + // modulate | |
| 19 | + cf + (index * m.last()) => c.freq; | |
| 20 | + // advance time by 1 samp | |
| 21 | + 1::samp => now; | |
| 22 | +} | |
| @@ -0,0 +1,17 @@ | ||
| 1 | +// basic FM synthesis using SinOsc (2 => .sync; also see fm3.ck) | |
| 2 | + | |
| 3 | +// modulator to carrier | |
| 4 | +SinOsc m => SinOsc c => dac; | |
| 5 | + | |
| 6 | +// carrier frequency | |
| 7 | +440 => c.freq; | |
| 8 | +// modulator frequency | |
| 9 | +110 => m.freq; | |
| 10 | +// index of modulation | |
| 11 | +300 => m.gain; | |
| 12 | + | |
| 13 | +// phase modulation is FM synthesis (sync is 2) | |
| 14 | +2 => c.sync; | |
| 15 | + | |
| 16 | +// time-loop | |
| 17 | +while( true ) 1::second => now; | |
| @@ -0,0 +1,16 @@ | ||
| 1 | +// FM synthesis (using Step instead of .sync == 2; see fm2.ck) | |
| 2 | + | |
| 3 | +// modulator to carrier | |
| 4 | +SinOsc m => SinOsc c => dac; | |
| 5 | +// step function, add to modulator output | |
| 6 | +Step step => c; | |
| 7 | + | |
| 8 | +// carrier frequency | |
| 9 | +440 => step.next; | |
| 10 | +// modulator frequency | |
| 11 | +110 => m.freq; | |
| 12 | +// index of modulation | |
| 13 | +300 => m.gain; | |
| 14 | + | |
| 15 | +// time-loop | |
| 16 | +while( true ) 1::second => now; | |
| @@ -0,0 +1,17 @@ | ||
| 1 | +// hello everyone. | |
| 2 | +// a chuck is born... | |
| 3 | +// its first words: | |
| 4 | + | |
| 5 | +SinOsc s => JCRev r => dac; | |
| 6 | +.2 => s.gain; | |
| 7 | +.1 => r.mix; | |
| 8 | + | |
| 9 | +// an array | |
| 10 | +[ 0, 2, 4, 7, 9, 11 ] @=> int hi[]; | |
| 11 | + | |
| 12 | +while( true ) | |
| 13 | +{ | |
| 14 | + Std.mtof( 45 + Math.random2(0,3) * 12 + | |
| 15 | + hi[Math.random2(0,hi.size()-1)] ) => s.freq; | |
| 16 | + 100::ms => now; | |
| 17 | +} | |
| @@ -0,0 +1,38 @@ | ||
| 1 | +// bandlimited ugens (Blit, BlitSaw, BlitSquare) | |
| 2 | +Blit s => Pan2 p; | |
| 3 | +p.left => JCRev r1 => dac.left; | |
| 4 | +p.right => JCRev r2 => dac.right; | |
| 5 | + | |
| 6 | +// initial settings | |
| 7 | +.5 => s.gain; | |
| 8 | +.1 => r1.mix; | |
| 9 | +.1 => r2.mix; | |
| 10 | + | |
| 11 | +// an array | |
| 12 | +[ 0, 2, 4, 7, 9, 11 ] @=> int hi[]; | |
| 13 | + | |
| 14 | +// set the harmonic | |
| 15 | +4 => s.harmonics; | |
| 16 | + | |
| 17 | +// spork the pan control | |
| 18 | +spork ~ dopan(); | |
| 19 | + | |
| 20 | +// infinite time loop | |
| 21 | +while( true ) | |
| 22 | +{ | |
| 23 | + Std.mtof( 33 + Math.random2(0,3) * 12 + | |
| 24 | + hi[Math.random2(0,hi.size()-1)] ) => s.freq; | |
| 25 | + 120::ms => now; | |
| 26 | +} | |
| 27 | + | |
| 28 | +// pan control | |
| 29 | +fun void dopan() | |
| 30 | +{ | |
| 31 | + float t; | |
| 32 | + while( true ) | |
| 33 | + { | |
| 34 | + .7 * Math.sin(t) => p.pan; | |
| 35 | + .005 +=> t; | |
| 36 | + 10::ms => now; | |
| 37 | + } | |
| 38 | +} | |
| @@ -0,0 +1,36 @@ | ||
| 1 | +8 => int a; | |
| 2 | + | |
| 3 | +fun int abs( int v ) | |
| 4 | +{ | |
| 5 | + if( v < 0 ) return -v; | |
| 6 | + return v; | |
| 7 | +} | |
| 8 | + | |
| 9 | +fun void args( int y, int b ) | |
| 10 | +{ | |
| 11 | + 4 => a; | |
| 12 | + <<<b>>>; | |
| 13 | +} | |
| 14 | + | |
| 15 | +fun float sum( float a, float b ) | |
| 16 | +{ | |
| 17 | + return a + b; | |
| 18 | +} | |
| 19 | + | |
| 20 | +fun void go( int a ) | |
| 21 | +{ | |
| 22 | + <<<abs(a)>>>; | |
| 23 | + if( a == 0 ) | |
| 24 | + return; | |
| 25 | + | |
| 26 | + go( abs(a)-1 ); | |
| 27 | +} | |
| 28 | + | |
| 29 | +int i; | |
| 30 | +for( 0 => i; i < 10; i + 1 => i ) | |
| 31 | + go( 1000 ); | |
| 32 | +<<<abs(-1)>>>; | |
| 33 | +args( 1, 2 ); | |
| 34 | +<<<sum( 1.0, 2.0 )>>>; | |
| 35 | +<<<a>>>; | |
| 36 | + | |
| @@ -0,0 +1,17 @@ | ||
| 1 | +// take me to your leader (talk into the mic) | |
| 2 | +// gewang, prc | |
| 3 | + | |
| 4 | +// our patch - feedforward part | |
| 5 | +adc => Gain g => DelayL d => dac; | |
| 6 | +adc => Gain g2 => dac; | |
| 7 | +// feedback | |
| 8 | +d => Gain g3 => d; | |
| 9 | + | |
| 10 | +// set parameters | |
| 11 | +15::ms => d.delay; | |
| 12 | +0.05 => g.gain; | |
| 13 | +0.05 => g2.gain; | |
| 14 | +0.95 => g3.gain; | |
| 15 | + | |
| 16 | +// time loop | |
| 17 | +while( true ) 100::ms => now; | |
| @@ -0,0 +1,18 @@ | ||
| 1 | +// impulse generator is cool... | |
| 2 | +// this demo is not | |
| 3 | + | |
| 4 | +// connect impulse generator | |
| 5 | +Impulse i => dac; | |
| 6 | +.5 => i.gain; | |
| 7 | + | |
| 8 | +// emit impulse every so often | |
| 9 | +2000 => int a; | |
| 10 | +while( 1 ) | |
| 11 | +{ | |
| 12 | + // set the next sample | |
| 13 | + 1.0 => i.next; | |
| 14 | + | |
| 15 | + // advance time | |
| 16 | + a::samp => now; | |
| 17 | + a - 8 => a; if( a <= 0 ) 2000 => a; | |
| 18 | +} | |
| @@ -0,0 +1,16 @@ | ||
| 1 | +// big number | |
| 2 | +1000000000000000000000000000.0 => float n; | |
| 3 | +// overflow it | |
| 4 | +repeat( 20 ) n *=> n; | |
| 5 | +// test it | |
| 6 | +<<< Math.isinf( n ) >>>; | |
| 7 | +// bye sanity | |
| 8 | +0 *=> n; | |
| 9 | +// test it | |
| 10 | +<<< Math.isnan( n ) >>>; | |
| 11 | + | |
| 12 | +// more | |
| 13 | +<<< 1.0 / 0.0 => Math.isinf >>>; | |
| 14 | +<<< 0.0 / 0.0 => Math.isnan >>>; | |
| 15 | +<<< Math.INFINITY, -Math.INFINITY >>>; | |
| 16 | +<<< Math.INFINITY => Math.isinf >>>; | |
| @@ -0,0 +1,40 @@ | ||
| 1 | +// run each stooge, or run three stooges concurrently | |
| 2 | +// %> chuck moe++ larry++ curly++ | |
| 3 | + | |
| 4 | +// impulse to filter to dac | |
| 5 | +SndBuf i => BiQuad f => Gain g => JCRev r => dac; | |
| 6 | +// second formant | |
| 7 | +i => BiQuad f2 => g; | |
| 8 | +// third formant | |
| 9 | +i => BiQuad f3 => g; | |
| 10 | + | |
| 11 | +// set the filter's pole radius | |
| 12 | +0.800 => f.prad; .995 => f2.prad; .995 => f3.prad; | |
| 13 | +// set equal gain zeroes | |
| 14 | +1 => f.eqzs; 1 => f2.eqzs; 1 => f3.eqzs; | |
| 15 | +// initialize float variable | |
| 16 | +0.0 => float v => float v2; | |
| 17 | +// set filter gain | |
| 18 | +.1 => f.gain; .1 => f2.gain; .01 => f3.gain; | |
| 19 | +0.05 => r.mix; | |
| 20 | +// load glottal pop | |
| 21 | +"special:glot_pop" => i.read; | |
| 22 | +// play | |
| 23 | +1.0 => i.rate; | |
| 24 | + | |
| 25 | +// infinite time-loop | |
| 26 | +while( true ) | |
| 27 | +{ | |
| 28 | + // set the current sample/impulse | |
| 29 | + 0 => i.pos; | |
| 30 | + // sweep the filter resonant frequency | |
| 31 | + 250.0 + Math.sin(v*100.0)*20.0 => v2 => f.pfreq; | |
| 32 | + 2290.0 + Math.sin(v*200.0)*50.0 => f2.pfreq; | |
| 33 | + 3010.0 + Math.sin(v*300.0)*80.0 => f3.pfreq; | |
| 34 | + // increment v | |
| 35 | + v + .05 => v; | |
| 36 | + // gain | |
| 37 | + 0.2 + Math.sin(v)*.1 => g.gain; | |
| 38 | + // advance time | |
| 39 | + (1000.0 + Math.random2f(-100.0, 100.0))::ms => now; | |
| 40 | +} | |
| @@ -0,0 +1,27 @@ | ||
| 1 | +// run each stooge, or run three stooges concurrently | |
| 2 | +// %> chuck moe larry curly | |
| 3 | + | |
| 4 | +// impulse to filter to dac | |
| 5 | +Impulse i => BiQuad f => dac; | |
| 6 | +// set the filter's pole radius | |
| 7 | +.99 => f.prad; | |
| 8 | +// set equal gain zeros | |
| 9 | +1 => f.eqzs; | |
| 10 | +// initialize float variable | |
| 11 | +0.0 => float v; | |
| 12 | +// set filter gain | |
| 13 | +.5 => f.gain; | |
| 14 | + | |
| 15 | +// infinite time-loop | |
| 16 | +while( true ) | |
| 17 | +{ | |
| 18 | + // set the current sample/impulse | |
| 19 | + 1.0 => i.next; | |
| 20 | + // sweep the filter resonant frequency | |
| 21 | + Std.fabs(Math.sin(v)) * 4000.0 => f.pfreq; | |
| 22 | + // increment v | |
| 23 | + v + .1 => v; | |
| 24 | + // advance time | |
| 25 | + 99::ms => now; | |
| 26 | +} | |
| 27 | + | |
| @@ -0,0 +1,13 @@ | ||
| 1 | +// using SinOsc.period (alternative to .freq) | |
| 2 | + | |
| 3 | +// sinosc | |
| 4 | +SinOsc lfo => dac; | |
| 5 | +// set period | |
| 6 | +1::second => lfo.period; | |
| 7 | + | |
| 8 | +// infinite time loop | |
| 9 | +while( true ) | |
| 10 | +{ | |
| 11 | + <<< lfo.last(), "" >>>; | |
| 12 | + 50::ms => now; | |
| 13 | +} | |
| @@ -0,0 +1,42 @@ | ||
| 1 | +// run each stooge, or run three stooges concurrently | |
| 2 | +// %> chuck moe++ larry++ curly++ | |
| 3 | + | |
| 4 | +// source to filter to dac | |
| 5 | +SndBuf i => BiQuad f => Gain g => dac; | |
| 6 | +// second formant | |
| 7 | +i => BiQuad f2 => g; | |
| 8 | +// third formant | |
| 9 | +i => BiQuad f3 => g; | |
| 10 | + | |
| 11 | +// set the filter's pole radius | |
| 12 | +.995 => f.prad; .995 => f2.prad; .995 => f3.prad; | |
| 13 | +// set equal gain zeros | |
| 14 | +1 => f.eqzs; 1 => f2.eqzs; 1 => f3.eqzs; | |
| 15 | +// initialize float variable | |
| 16 | +1.5 * 3.14 => float v; | |
| 17 | +// set filter gain | |
| 18 | +.2 => f.gain; .04 => f2.gain; .01 => f3.gain; | |
| 19 | +// load glottal pop | |
| 20 | +"special:glot_pop" => i.read; | |
| 21 | +// play | |
| 22 | +1.0 => i.rate; | |
| 23 | + | |
| 24 | + | |
| 25 | +// infinite time-loop | |
| 26 | +while( true ) | |
| 27 | +{ | |
| 28 | + // set the current pos | |
| 29 | + 0 => i.pos; | |
| 30 | + | |
| 31 | + // sweep the filter resonant frequency | |
| 32 | + 660.0 + Math.sin(v)*80.0 => f.pfreq; | |
| 33 | + 1780.0 + Math.sin(v*.5)*50.0 => f2.pfreq; | |
| 34 | + 2410.0 + Math.sin(v*.25)*150.0 => f3.pfreq; | |
| 35 | + | |
| 36 | + // increment v | |
| 37 | + v + .05 => v; | |
| 38 | + // gain | |
| 39 | + 0.2 + Math.sin(v)*.2 => g.gain; | |
| 40 | + // advance time | |
| 41 | + (80.0 + Math.sin(v*2.0)*10.0)::ms => now; | |
| 42 | +} | |
| @@ -0,0 +1,27 @@ | ||
| 1 | +// run each stooge, or run three stooges concurrently | |
| 2 | +// %> chuck moe larry curly | |
| 3 | + | |
| 4 | +// impulse to filter to dac | |
| 5 | +Impulse i => BiQuad f => dac; | |
| 6 | +// set the filter's pole radius | |
| 7 | +.99 => f.prad; | |
| 8 | +// set equal gain zeros | |
| 9 | +1 => f.eqzs; | |
| 10 | +// initialize float variable | |
| 11 | +0.0 => float v; | |
| 12 | +// set filter gain | |
| 13 | +.5 => f.gain; | |
| 14 | + | |
| 15 | +// infinite time-loop | |
| 16 | +while( true ) | |
| 17 | +{ | |
| 18 | + // set the current sample/impulse | |
| 19 | + 1.0 => i.next; | |
| 20 | + // sweep the filter resonant frequency | |
| 21 | + Std.fabs(Math.sin(v)) * 4000.0 => f.pfreq; | |
| 22 | + // increment v | |
| 23 | + v + .1 => v; | |
| 24 | + // advance time | |
| 25 | + 100::ms => now; | |
| 26 | +} | |
| 27 | + | |
| @@ -0,0 +1,29 @@ | ||
| 1 | +// chuck this with other shreds to record to file | |
| 2 | +// example> chuck foo.ck bar.ck rec (see also rec2.ck) | |
| 3 | + | |
| 4 | +// pull samples from the dac | |
| 5 | +// WvOut2 -> stereo operation | |
| 6 | +dac => WvOut2 w => blackhole; | |
| 7 | + | |
| 8 | +// set the prefix, which will prepended to the filename | |
| 9 | +// do this if you want the file to appear automatically | |
| 10 | +// in another directory. if this isn't set, the file | |
| 11 | +// should appear in the directory you run chuck from | |
| 12 | +// with only the date and time. | |
| 13 | +"chuck-session" => w.autoPrefix; | |
| 14 | + | |
| 15 | +// this is the output file name | |
| 16 | +"special:auto" => w.wavFilename; | |
| 17 | + | |
| 18 | +// print it out | |
| 19 | +<<<"writing to file: ", w.filename()>>>; | |
| 20 | + | |
| 21 | +// any gain you want for the output | |
| 22 | +.5 => w.fileGain; | |
| 23 | + | |
| 24 | +// temporary workaround to automatically close file on remove-shred | |
| 25 | +null @=> w; | |
| 26 | + | |
| 27 | +// infinite time loop... | |
| 28 | +// ctrl-c will stop it, or modify to desired duration | |
| 29 | +while( true ) 1::second => now; | |
| @@ -0,0 +1,28 @@ | ||
| 1 | +// chuck this with other shreds to record to file | |
| 2 | +// example> chuck foo.ck bar.ck rec (see also rec2.ck) | |
| 3 | + | |
| 4 | +// pull samples from the dac | |
| 5 | +dac => Gain g => WvOut w => blackhole; | |
| 6 | + | |
| 7 | +// set the prefix, which will prepended to the filename | |
| 8 | +// do this if you want the file to appear automatically | |
| 9 | +// in another directory. if this isn't set, the file | |
| 10 | +// should appear in the directory you run chuck from | |
| 11 | +// with only the date and time. | |
| 12 | +"chuck-session" => w.autoPrefix; | |
| 13 | + | |
| 14 | +// this is the output file name | |
| 15 | +"special:auto" => w.wavFilename; | |
| 16 | + | |
| 17 | +// print it out | |
| 18 | +<<<"writing to file: ", w.filename()>>>; | |
| 19 | + | |
| 20 | +// any gain you want for the output | |
| 21 | +.5 => g.gain; | |
| 22 | + | |
| 23 | +// temporary workaround to automatically close file on remove-shred | |
| 24 | +null @=> w; | |
| 25 | + | |
| 26 | +// infinite time loop... | |
| 27 | +// ctrl-c will stop it, or modify to desired duration | |
| 28 | +while( true ) 1::second => now; | |
| @@ -0,0 +1,23 @@ | ||
| 1 | +// chuck this with other shreds to record to file | |
| 2 | +// example> chuck foo.ck bar.ck rec (see also rec2.ck) | |
| 3 | + | |
| 4 | +// arguments: rec:<filename> | |
| 5 | + | |
| 6 | +// get name | |
| 7 | +me.arg(0) => string filename; | |
| 8 | +if( filename.length() == 0 ) "foo.wav" => filename; | |
| 9 | + | |
| 10 | +// pull samples from the dac | |
| 11 | +dac => Gain g => WvOut w => blackhole; | |
| 12 | +// this is the output file name | |
| 13 | +filename => w.wavFilename; | |
| 14 | +<<<"writing to file:", "'" + w.filename() + "'">>>; | |
| 15 | +// any gain you want for the output | |
| 16 | +.5 => g.gain; | |
| 17 | + | |
| 18 | +// temporary workaround to automatically close file on remove-shred | |
| 19 | +null @=> w; | |
| 20 | + | |
| 21 | +// infinite time loop... | |
| 22 | +// ctrl-c will stop it, or modify to desired duration | |
| 23 | +while( true ) 1::second => now; | |
| @@ -0,0 +1,26 @@ | ||
| 1 | +//-------------------------------------------- | |
| 2 | +// simple ring modulation | |
| 3 | +// | |
| 4 | +// any ugen has .op: | |
| 5 | +// --- | |
| 6 | +// -1 pass through the input | |
| 7 | +// 0 stop input | |
| 8 | +// 1 add inputs (default) | |
| 9 | +// 2 subtract from first input | |
| 10 | +// 3 multiply inputs | |
| 11 | +// 4 divide from first input | |
| 12 | +//-------------------------------------------- | |
| 13 | + | |
| 14 | +// the patch | |
| 15 | +adc => Gain g => dac; | |
| 16 | +SinOsc s => g; | |
| 17 | + | |
| 18 | +// multiply inputs at g | |
| 19 | +3 => g.op; | |
| 20 | + | |
| 21 | +// presets | |
| 22 | +400.0 => s.freq; | |
| 23 | + | |
| 24 | +// time loop | |
| 25 | +while( true ) | |
| 26 | + 1::second => now; | |
| @@ -0,0 +1,17 @@ | ||
| 1 | +// sound file | |
| 2 | +me.dir() + "/../data/snare.wav" => string filename; | |
| 3 | +if( me.args() ) me.arg(0) => filename; | |
| 4 | + | |
| 5 | +// the patch | |
| 6 | +SndBuf buf => dac; | |
| 7 | +// load the file | |
| 8 | +filename => buf.read; | |
| 9 | + | |
| 10 | +// time loop | |
| 11 | +while( true ) | |
| 12 | +{ | |
| 13 | + 0 => buf.pos; | |
| 14 | + Math.random2f(.2,.5) => buf.gain; | |
| 15 | + Math.random2f(.5,1.5) => buf.rate; | |
| 16 | + 100::ms => now; | |
| 17 | +} | |
| @@ -0,0 +1,13 @@ | ||
| 1 | +// step gen to dac | |
| 2 | +Step s => dac; | |
| 3 | +.5 => float v; | |
| 4 | + | |
| 5 | +// infinite time-loop | |
| 6 | +while( 1 ) | |
| 7 | +{ | |
| 8 | + // advance time | |
| 9 | + 1::ms => now; | |
| 10 | + // set value | |
| 11 | + v => s.next; | |
| 12 | + -v => v; | |
| 13 | +} | |
| @@ -0,0 +1,9 @@ | ||
| 1 | +// tick tock | |
| 2 | + | |
| 3 | +// infinite time loop | |
| 4 | +while( true ) | |
| 5 | +{ | |
| 6 | + // print now in seconds | |
| 7 | + <<< "tick:", (now / second), "seconds" >>>; | |
| 8 | + 1::second => now; | |
| 9 | +} | |
| @@ -0,0 +1,12 @@ | ||
| 1 | +// tick tock | |
| 2 | + | |
| 3 | +// wait until the start of the next second | |
| 4 | +second - (now % second) => now; | |
| 5 | + | |
| 6 | +// infinite time loop | |
| 7 | +while( true ) | |
| 8 | +{ | |
| 9 | + // print now in seconds | |
| 10 | + <<< "tick:", (now / second) $ int, "seconds" >>>; | |
| 11 | + 1::second => now; | |
| 12 | +} | |
| @@ -0,0 +1,41 @@ | ||
| 1 | +// noise generator, biquad filter, dac (audio output) | |
| 2 | +Noise n => BiQuad f => dac; | |
| 3 | +// set biquad pole radius | |
| 4 | +.99 => f.prad; | |
| 5 | +// set biquad gain | |
| 6 | +.025 => f.gain; | |
| 7 | +// set equal zeros | |
| 8 | +1 => f.eqzs; | |
| 9 | +// our float | |
| 10 | +0.0 => float t; | |
| 11 | + | |
| 12 | +3::second + now => time later; | |
| 13 | +// time-loop | |
| 14 | +while( now < later ) | |
| 15 | +{ | |
| 16 | + // sweep the filter resonant frequency | |
| 17 | + 100.0 + Std.fabs(Math.sin(t)) * 1000.0 => f.pfreq; | |
| 18 | + t + .05 => t; | |
| 19 | + // advance time | |
| 20 | + 100::ms => now; | |
| 21 | +} | |
| 22 | + | |
| 23 | +// unlink the ugen f from dac | |
| 24 | +f =< dac; | |
| 25 | + | |
| 26 | +// let more time pass | |
| 27 | +3::second => now; | |
| 28 | + | |
| 29 | +// relink | |
| 30 | +f => dac; | |
| 31 | + | |
| 32 | +// time-loop | |
| 33 | +3::second + now => later; | |
| 34 | +while( now < later ) | |
| 35 | +{ | |
| 36 | + // resume sweep | |
| 37 | + 100.0 + Std.fabs(Math.sin(t)) * 1000.0 => f.pfreq; | |
| 38 | + t + .05 => t; | |
| 39 | + // advance time | |
| 40 | + 100::ms => now; | |
| 41 | +} | |
| @@ -0,0 +1,24 @@ | ||
| 1 | +// (see sndbuf.ck or otf_01.ck for non-insane usage of sndbuf) | |
| 2 | +SndBuf buf; | |
| 3 | +me.dir() + "/../data/kick.wav" => buf.read; | |
| 4 | + | |
| 5 | +// the patch (no sndbuf involved) | |
| 6 | +Impulse i => dac; | |
| 7 | + | |
| 8 | +// infinite time-loop | |
| 9 | +while( true ) | |
| 10 | +{ | |
| 11 | + // index | |
| 12 | + int pos; | |
| 13 | + | |
| 14 | + // repeat this many times | |
| 15 | + repeat( buf.samples() ) | |
| 16 | + { | |
| 17 | + // set next sample | |
| 18 | + buf.valueAt( pos ) => i.next; | |
| 19 | + // increment index | |
| 20 | + pos++; | |
| 21 | + // advance time by one samp | |
| 22 | + 1::samp => now; | |
| 23 | + } | |
| 24 | +} | |
| @@ -0,0 +1,16 @@ | ||
| 1 | +// sine to dac | |
| 2 | +SinOsc s => dac; | |
| 3 | +// let's turn down gain, for this can be loud and annoying | |
| 4 | +.15 => s.gain; | |
| 5 | + | |
| 6 | +// infinite time loop | |
| 7 | +0.0 => float t; | |
| 8 | +while( true ) | |
| 9 | +{ | |
| 10 | + // modulate | |
| 11 | + 30 + ( Math.sin(t) + 1.0 ) * 10000.0 => s.sfreq; | |
| 12 | + t + .004 => t; | |
| 13 | + | |
| 14 | + // advance time | |
| 15 | + 1::ms => now; | |
| 16 | +} | |
| @@ -0,0 +1,30 @@ | ||
| 1 | +// another candidate for lamest demo | |
| 2 | + | |
| 3 | +// patch | |
| 4 | +SinOsc s => JCRev r => dac; | |
| 5 | +.5 => r.gain; | |
| 6 | +.075 => r.mix; | |
| 7 | + | |
| 8 | +// note number | |
| 9 | +20 => float note; | |
| 10 | + | |
| 11 | +// go up to 127 | |
| 12 | +while( note < 128 ) | |
| 13 | +{ | |
| 14 | + // convert MIDI note to hz | |
| 15 | + Std.mtof( note ) => s.freq; | |
| 16 | + // turn down the volume gradually | |
| 17 | + .5 - (note/256.0) => s.gain; | |
| 18 | + | |
| 19 | + // move up by whole step | |
| 20 | + note + 2 => note; | |
| 21 | + | |
| 22 | + // advance time | |
| 23 | + .125::second => now; | |
| 24 | +} | |
| 25 | + | |
| 26 | +// turn off s | |
| 27 | +0 => s.gain; | |
| 28 | +// wait a bit | |
| 29 | +2::second => now; | |
| 30 | + | |
| @@ -0,0 +1,20 @@ | ||
| 1 | +// noise generator, biquad filter, dac (audio output) | |
| 2 | +Noise n => BiQuad f => dac; | |
| 3 | +// set biquad pole radius | |
| 4 | +.99 => f.prad; | |
| 5 | +// set biquad gain | |
| 6 | +.05 => f.gain; | |
| 7 | +// set equal zeros | |
| 8 | +1 => f.eqzs; | |
| 9 | +// our float | |
| 10 | +0.0 => float t; | |
| 11 | + | |
| 12 | +// infinite time-loop | |
| 13 | +while( true ) | |
| 14 | +{ | |
| 15 | + // sweep the filter resonant frequency | |
| 16 | + 100.0 + Std.fabs(Math.sin(t)) * 15000.0 => f.pfreq; | |
| 17 | + t + .01 => t; | |
| 18 | + // advance time | |
| 19 | + 5::ms => now; | |
| 20 | +} | |
| @@ -0,0 +1,37 @@ | ||
| 1 | +// noise generator, biquad filter, dac (audio output) | |
| 2 | +Noise n => BiQuad f => dac; | |
| 3 | +// set biquad pole radius | |
| 4 | +.99 => f.prad; | |
| 5 | +// set biquad gain | |
| 6 | +.05 => f.gain; | |
| 7 | +// set equal zeros | |
| 8 | +1 => f.eqzs; | |
| 9 | +// our float | |
| 10 | +0.0 => float t; | |
| 11 | + | |
| 12 | +// concurrent control | |
| 13 | +fun void wind_gain( ) | |
| 14 | +{ | |
| 15 | + 0.0 => float g; | |
| 16 | + | |
| 17 | + // time loop to ramp up the gain / oscillate | |
| 18 | + while( true ) | |
| 19 | + { | |
| 20 | + Std.fabs( Math.sin( g ) ) => n.gain; | |
| 21 | + g + .001 => g; | |
| 22 | + 10::ms => now; | |
| 23 | + } | |
| 24 | +} | |
| 25 | + | |
| 26 | +// run wind_gain on anothre shred | |
| 27 | +spork ~ wind_gain(); | |
| 28 | + | |
| 29 | +// infinite time-loop | |
| 30 | +while( true ) | |
| 31 | +{ | |
| 32 | + // sweep the filter resonant frequency | |
| 33 | + 100.0 + Std.fabs(Math.sin(t)) * 15000.0 => f.pfreq; | |
| 34 | + t + .01 => t; | |
| 35 | + // advance time | |
| 36 | + 100::ms => now; | |
| 37 | +} | |
| @@ -0,0 +1,14 @@ | ||
| 1 | +// step generator, zero crossing detector, dac | |
| 2 | +Step s => ZeroX z => dac; | |
| 3 | +1.0 => float v; | |
| 4 | + | |
| 5 | +// infnite time-loop | |
| 6 | +while( true ) | |
| 7 | +{ | |
| 8 | + // set the step value | |
| 9 | + v => s.next; | |
| 10 | + // change step value | |
| 11 | + -v => v; | |
| 12 | + // advance time | |
| 13 | + 100::ms => now; | |
| 14 | +} | |