// Read in and modify a taps template TapsTemp t; t.readFromFile( "lutinebell" ); 1.5 => t.timeStretch; // Create a slider TapsUISlider ranger; ranger.init( 0, 1, 0, 1, 0, 5 ); ranger.position( 0.5, -0.5, 0 ); ranger.label( "range" ); ranger.value( 0.0 ); // Create another slider that needs global access TapsUISlider rever; rever.init( 1, 0, 0, 1, 0, 0.2 ); rever.position( -0.8, -0.7, 0 ); rever.label( "reverb" ); rever.value( 0 ); // Create flippers TapsUIFlipper flippers[8]; // Program variables t.freqWarp() => float defaultFW; 0 => float range; 500::ms => dur interval; 5 => float speed; // Spork shreds spork ~ rangeSlider(); spork ~ speedSlider(); spork ~ playButton(); spork ~ busFlippers(); spork ~ revSlider(); // Main loop while( true ) { if( t.playing() ) { 2 * range + 1 => float r; Std.rand2f( defaultFW / r, defaultFW * r ) => t.freqWarp; } interval / speed => now; } // Listen to the ranger fun void rangeSlider() { while( true ) { ranger => now; ranger.value() => range; } } // Create a speed slider and listen to that too fun void speedSlider() { // Create a slider TapsUISlider speeder; speeder.init( 0, 0, 1, 1, 1, 10 ); speeder.position( 0.25, -0.5, 0 ); speeder.label( "speed" ); speeder.value( 5 ); while( true ) { speeder => now; speeder.value() => speed; } } // Listen to the slider that controls reverb fun void revSlider() { // Listen while( true ) { rever => now; // Set reverb of t's current bus and reset others to 0 for( int i; i < 8; i++ ) { if( t.bus() == i ) TapsBus.reverb( i, rever.value() ); else TapsBus.reverb( i, 0 ); } } } // Create a button and listen to it fun void playButton() { TapsUIButton b; b.position( 0.75, 0, 0 ); b.label( "play" ); while( true ) { b => now; defaultFW => t.freqWarp; t.play(); } } // Create flippers to control bus fun void busFlippers() { // Initialize flippers[0].label( "bus0" ); flippers[1].label( "bus1" ); flippers[2].label( "bus2" ); flippers[3].label( "bus3" ); flippers[4].label( "bus4" ); flippers[5].label( "bus5" ); flippers[6].label( "bus6" ); flippers[7].label( "bus7" ); for( int i; i < 4; i++ ) { flippers[i].position( -0.8 + i * 0.2, 0.2, 0 ); flippers[i+4].position( -0.8 + i * 0.2, -0.3, 0 ); } // Turn one of them on if( t.bus() > 0 ) flippers[t.bus()].value( 1 ); else flippers[7].value( 1 ); // Listen for( int j; j < 8; j++ ) spork ~ flipper( j ); // Don't quit while( true ) 10::second => now; } // Listen to single flipper fun void flipper( int i ) { while( true ) { flippers[i] => now; // if it's off, make it on if( flippers[i].value() < 0.5 ) 1 => flippers[i].value; // if it's on if( flippers[i].value() > 0.5 ) { // turn all other flippers off for( 0 => int j; j < 8; j++ ) if( j != i ) 0 => flippers[j].value; // set the bus to this number t.bus( i ); // signal the reverb slider so // the reverb gets updated on buses rever.broadcast(); } } }