// Robots can crochet 2! // a sound logo for the art of crochet // globally shared ugens NRev reverb => dac; .1 => reverb.mix; // parameters float pace; float pitch; float pitch2; .7 => pace; // single crochet stitch for( int i; i < 3; i++ ) { // Through next stitch, yarn over, pull through! spork ~ makeSawSound( 587, .3, 500, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*700::ms ); spork ~ makeSawSound( 370, .3, 900, pace*50::ms, pace*400::ms, .01, pace*1::second, pace*600::ms ); spork ~ makeSawSound( 440, .2, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); spork ~ makeTriSound( 494, .5, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); spork ~ makeTriSound( 587, .5, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); // fast heartbeat because crochet is so exciting :D for ( int i; i < 5; i++ ) { spork ~ makeTriSound( 99, .3, 500, pace*350::ms, pace*100::ms, .01, pace*1::second, pace*500::ms); spork ~ makeSawSound( 147, .3, 500, pace*50::ms, pace*400::ms, .01, pace*.1::second, pace*60::ms ); pace*85::ms => now; spork ~ makeSawSound( 73, .3, 500, pace*50::ms, pace*300::ms, .01, pace*.1::second, pace*60::ms ); pace*165::ms => now; spork ~ makeSqrSound( 50, .3, 800, pace*50::ms, pace*50::ms, .01, pace*1::second, pace*200::ms ); pace*100::ms => now; } } 2 => pace; 1.2 => pitch; .8 => pitch2; // double crochet stitch for( int i; i < 2; i++ ) { // Yarn over spork ~ makeSawSound( pitch*587, .3, 500, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*700::ms ); spork ~ makeSawSound( pitch*370, .3, 900, pace*50::ms, pace*400::ms, .01, pace*1::second, pace*600::ms ); spork ~ makeSawSound( pitch*440, .2, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); spork ~ makeTriSound( pitch*494, .5, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); spork ~ makeTriSound( pitch*587, .5, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); // (only 4 steps because you only really hear 4 of the 5 smaller for loops) // 1. through the next stitch // 2. yarn over & pull through (should now have 3 loops on hook) // 3. yarn over & pull through first 2 loops // 4. yarn over & pull through remaining 2 loops for ( int i; i < 5; i++ ) { spork ~ makeTriSound( pitch2*99, .3, 500, pace*350::ms, pace*100::ms, .01, pace*1::second, pace*500::ms); spork ~ makeSawSound( pitch2*147, .3, 500, pace*50::ms, pace*400::ms, .01, pace*.1::second, pace*60::ms ); pace*85::ms => now; spork ~ makeSawSound( pitch2*73, .3, 500, pace*50::ms, pace*300::ms, .01, pace*.1::second, pace*60::ms ); pace*165::ms => now; spork ~ makeSqrSound( pitch2*50, .3, 800, pace*50::ms, pace*50::ms, .01, pace*1::second, pace*200::ms ); pace*100::ms => now; } } 1.5 => pace; 1.1 => pitch; .9 => pitch2; // half double crochet stitch for( int i; i < 3; i++ ) { // Yarn over spork ~ makeSawSound( pitch*587, .3, 500, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*700::ms ); spork ~ makeSawSound( pitch*370, .3, 900, pace*50::ms, pace*400::ms, .01, pace*1::second, pace*600::ms ); spork ~ makeSawSound( pitch*440, .2, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); spork ~ makeTriSound( pitch*494, .5, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); spork ~ makeTriSound( pitch*587, .5, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); // 1. through the next stitch // 2. yarn over & pull through (should now have 3 loops on hook) // 3. yarn over & pull through all 3 loops! for ( int i; i < 3; i++ ) { spork ~ makeTriSound( pitch2*99, .3, 500, pace*350::ms, pace*100::ms, .01, pace*1::second, pace*500::ms); spork ~ makeSawSound( pitch2*147, .3, 500, pace*50::ms, pace*400::ms, .01, pace*.1::second, pace*60::ms ); pace*85::ms => now; spork ~ makeSawSound( pitch2*73, .3, 500, pace*50::ms, pace*300::ms, .01, pace*.1::second, pace*60::ms ); pace*165::ms => now; spork ~ makeSqrSound( pitch2*50, .3, 800, pace*50::ms, pace*50::ms, .01, pace*1::second, pace*200::ms ); pace*100::ms => now; } } 1.6 => pace; 1.3 => pitch; 1.1 => pitch2; // linen stitch for( int i; i < 2; i++ ) { // single crochet spork ~ makeSawSound( pitch*587, .3, 500, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*700::ms ); spork ~ makeSawSound( pitch*370, .3, 900, pace*50::ms, pace*400::ms, .01, pace*1::second, pace*600::ms ); spork ~ makeSawSound( pitch*440, .2, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); // chain 1 spork ~ makeTriSound( pitch*494, .6, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); spork ~ makeTriSound( pitch*587, .6, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); for ( int i; i < 4; i++ ) { spork ~ makeTriSound( pitch2*99, .3, 500, pace*350::ms, pace*100::ms, .01, pace*1::second, pace*500::ms); spork ~ makeSawSound( pitch2*147, .3, 500, pace*50::ms, pace*400::ms, .01, pace*.1::second, pace*60::ms ); pace*85::ms => now; spork ~ makeSawSound( pitch2*73, .3, 500, pace*50::ms, pace*300::ms, .01, pace*.1::second, pace*60::ms ); pace*165::ms => now; spork ~ makeSqrSound( pitch2*50, .3, 800, pace*50::ms, pace*50::ms, .01, pace*1::second, pace*200::ms ); pace*100::ms => now; } } 3 => pace; 1 => pitch; 1.5 => pitch2; // slow single crochet - last row, you're almost there! for( int i; i < 2; i++ ) { spork ~ makeSawSound( pitch*587, .3, 500, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*700::ms ); spork ~ makeSawSound( pitch*370, .3, 900, pace*50::ms, pace*400::ms, .01, pace*1::second, pace*600::ms ); spork ~ makeSawSound( pitch*440, .2, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); spork ~ makeTriSound( pitch*494, .5, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); spork ~ makeTriSound( pitch*587, .5, 900, pace*500::ms, pace*50::ms, .01, pace*1::second, pace*600::ms ); for ( int i; i < 4; i++ ) { spork ~ makeTriSound( pitch2*99, .3, 500, pace*350::ms, pace*100::ms, .01, pace*1::second, pace*500::ms); spork ~ makeSawSound( pitch2*147, .3, 500, pace*50::ms, pace*400::ms, .01, pace*.1::second, pace*60::ms ); pace*85::ms => now; spork ~ makeSawSound( pitch2*73, .3, 500, pace*50::ms, pace*300::ms, .01, pace*.1::second, pace*60::ms ); pace*165::ms => now; spork ~ makeSqrSound( pitch2*50, .3, 800, pace*50::ms, pace*50::ms, .01, pace*1::second, pace*200::ms ); } pace*50::ms => now; } // final few single crochets for ( int i; i < 3; i++ ) { pace + 1 => pace; <<< pace >>>; spork ~ makeTriSound( pitch2*99, .3, 500, pace*350::ms, pace*100::ms, .01, pace*1::second, pace*500::ms); spork ~ makeSawSound( pitch2*147, .3, 500, pace*50::ms, pace*400::ms, .01, pace*.1::second, pace*60::ms ); pace*85::ms => now; spork ~ makeSawSound( pitch2*73, .3, 500, pace*50::ms, pace*300::ms, .01, pace*.1::second, pace*60::ms ); pace*165::ms => now; spork ~ makeSqrSound( pitch2*50, .3, 800, pace*50::ms, pace*50::ms, .01, pace*1::second, pace*200::ms ); pace*100::ms => now; } pace + 1 => pace; <<< pace >>>; // pull through the tail, finish the piece spork ~ makeSawSound( pitch2*250, .3, 500, pace*350::ms, pace*100::ms, .01, 2::second, 2000::ms); spork ~ makeSqrSound( pitch2*50, .3, 800, pace*450::ms, pace*50::ms, .01, 2::second, 3500::ms ); 10::second => now; //////////////////////////////// //////////////////////////////// /////////// functions ////////// fun void makeTriSound( float pitch, float vel, float cutoff, dur attack, dur decay, float susGain, dur sustain, dur release ) { TriOsc triGuy => LPF lePoof => ADSR envy => reverb; vel => triGuy.gain; pitch => triGuy.freq; cutoff => lePoof.freq; envy.set(attack, decay, susGain, release); envy.keyOn(); sustain => now; envy.keyOff(); envy.releaseTime() => now; 200::ms => now; } fun void makeSqrSound( float pitch, float vel, float cutoff, dur attack, dur decay, float susGain, dur sustain, dur release ) { SqrOsc triGuy => LPF lePoof => ADSR envy => reverb; vel => triGuy.gain; pitch => triGuy.freq; cutoff => lePoof.freq; envy.set(attack, decay, susGain, release); envy.keyOn(); sustain => now; envy.keyOff(); envy.releaseTime() => now; 200::ms => now; } fun void makeSawSound( float pitch, float vel, float cutoff, dur attack, dur decay, float susGain, dur sustain, dur release ) { SawOsc triGuy => LPF lePoof => ADSR envy => reverb; vel => triGuy.gain; pitch => triGuy.freq; cutoff => lePoof.freq; envy.set(attack, decay, susGain, release); envy.keyOn(); sustain => now; envy.keyOff(); envy.releaseTime() => now; 200::ms => now; }