OscRecv recv; 8889 => recv.port; recv.listen(); recv.event( "/idle" ) @=> OscEvent oe_event1; recv.event( "/identifying" ) @=> OscEvent oe_event2; recv.event( "/identified, i" ) @=> OscEvent oe_event3; recv.event( "/photodesk" ) @=> OscEvent oe_event4; recv.event( "/photodesk/scrollleft" ) @=> OscEvent oe_event5; recv.event( "/photodesk/scrollright" ) @=> OscEvent oe_event6; recv.event( "/photodesk/hover, i" ) @=> OscEvent oe_event7; recv.event( "/browsing, i" ) @=> OscEvent oe_event8; recv.event( "/browsing/scrollright, i" ) @=> OscEvent oe_event9; recv.event( "/browsing/scrollleft, i" ) @=> OscEvent oe_event10; recv.event( "/rating" ) @=> OscEvent oe_event11; // recv.event( "/rating, f" ) @=> OscEvent oe_event12; recv.event( "/rating, i" ) @=> OscEvent oe_event12; recv.event( "/rating/finish" ) @=> OscEvent oe_event13; recv.event( "/rating/cancel" ) @=> OscEvent oe_event18; // added recv.event( "/yield" ) @=> OscEvent oe_event14; // added recv.event( "/updated" ) @=> OscEvent oe_event15; // added recv.event( "/zoomin" ) @=> OscEvent oe_event16; recv.event( "/zoomout" ) @=> OscEvent oe_event17; // default SinOsc s1 => Envelope e => JCRev r => dac; SinOsc s2 => e; SinOsc s3 => e; 0.5 => s1.gain => s2.gain => s3.gain; 0.0 => r.mix; 50::ms => e.duration; // for scroll SinOsc sL => Envelope eL => dac; SinOsc sR => Envelope eR => dac; 0.0 => eL.value => eR.value; // for rating 0 => int isRating; // false if not rating, true while rating // 0.0 => float numStars; 0 => int numStars; 79 => int space; // spork ~ processStreamOSC(); spork ~ processEventOSC1(); spork ~ processEventOSC2(); spork ~ processEventOSC3(); spork ~ processEventOSC4(); spork ~ processEventOSC5(); spork ~ processEventOSC6(); spork ~ processEventOSC7(); spork ~ processEventOSC8(); spork ~ processEventOSC9(); spork ~ processEventOSC10(); spork ~ processEventOSC11(); spork ~ processEventOSC12(); spork ~ processEventOSC13(); spork ~ processEventOSC14(); // added spork ~ processEventOSC15(); // added spork ~ processEventOSC16(); // added spork ~ processEventOSC17(); // added spork ~ processEventOSC18(); // added while( true ) 1::second => now; // idle fun void processEventOSC1() { while ( true ) { oe_event1 => now; <<< "hi" >>>; while ( oe_event1.nextMsg() != 0 ) { 0.01 => r.mix; Std.mtof(74) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; 50::ms => now; Std.mtof(71) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; 50::ms => now; Std.mtof(67) => s1.freq => s2.freq => s3.freq; 0.9 => e.target; 150::ms => now; 0.0 => e.target; 100::ms => now; } } } // identifying (G-B-D) fun void processEventOSC2() { while ( true ) { oe_event2 => now; while ( oe_event2.nextMsg() != 0 ) { 0.01 => r.mix; Std.mtof(67) => s1.freq => s2.freq => s3.freq; 0.4 => e.target; 200::ms => now; 0.0 => e.target; 50::ms => now; Std.mtof(71) => s1.freq => s2.freq => s3.freq; 0.4 => e.target; 200::ms => now; 0.0 => e.target; 50::ms => now; Std.mtof(74) => s1.freq => s2.freq => s3.freq; 0.8 => e.target; 300::ms => now; 0.0 => e.target; 50::ms => now; } } } // "/identified/1" (Matt) and "/identified/2" (Tyler): G! fun void processEventOSC3() { while ( true ) { oe_event3 => now; while ( oe_event3.nextMsg() != 0 ) { oe_event3.getInt() => int userID; // to do: user-specific feedback? 0.05 => r.mix; Std.mtof(79) => s1.freq; Std.mtof(74) => s2.freq; Std.mtof(91) => s3.freq; 0.6 => e.target; 100::ms => now; 0.0 => e.target; 500::ms => now; 0.0 => r.mix; } } } // "/photodesk" fun void processEventOSC4() { while ( true ) { oe_event4 => now; while ( oe_event4.nextMsg() != 0 ) { 0 => isRating; 0.01 => r.mix; Std.mtof(67) => s1.freq => s2.freq => s3.freq; 0.7 => e.target; 100::ms => now; 0.0 => e.target; Std.mtof(79) => s1.freq => s2.freq => s3.freq; 0.9 => e.target; 150::ms => now; 0.0 => e.target; 200::ms => now; } } } // "/photodesk/swipeleft" fun void processEventOSC5() { while ( true ) { oe_event5 => now; while ( oe_event5.nextMsg() != 0 ) { 0 => isRating; 0.01 => r.mix; 10::ms => e.duration; Std.mtof(space) => s1.freq => s2.freq => s3.freq; 0.6 => e.target; 100::ms => now; 0.0 => e.target; space - 1 => space; Std.mtof(space) => s1.freq => s2.freq => s3.freq; 0.8 => e.target; 150::ms => now; 0.0 => e.target; 200::ms => now; } } } // "/photodesk/swiperight" fun void processEventOSC6() { while ( true ) { oe_event6 => now; while ( oe_event6.nextMsg() != 0 ) { 0 => isRating; 0.01 => r.mix; 10::ms => e.duration; Std.mtof(space) => s1.freq => s2.freq => s3.freq; 0.6 => e.target; 100::ms => now; 0.0 => e.target; space + 1 => space; Std.mtof(space) => s1.freq => s2.freq => s3.freq; 0.8 => e.target; 150::ms => now; 0.0 => e.target; 200::ms => now; } } } // "/photodesk/hover/0-3" fun void processEventOSC7() { while ( true ) { oe_event7 => now; while ( oe_event7.nextMsg() != 0 ) { 0 => isRating; oe_event7.getInt() => int quadrant; /* 0.01 => r.mix; 5::ms => e.duration; Std.mtof(space-12) => s1.freq => s2.freq => s3.freq; for( 0 => int i; i < quadrant; i++ ) { 0.6 => e.target; 50::ms => now; 0.0 => e.target; 50::ms => now; } */ } } } // "/browsing/0-3", fun void processEventOSC8() { while ( true ) { oe_event8 => now; while ( oe_event8.nextMsg() != 0 ) { 0 => isRating; oe_event8.getInt() => int quadrant; 0.01 => r.mix; 5::ms => e.duration; Std.mtof(space) => s1.freq => s2.freq => s3.freq; for( 0 => int i; i < quadrant; i++ ) { 0.6 => e.target; 50::ms => now; 0.0 => e.target; 50::ms => now; } } } } // "/browsing/scrollright/1,3,7" (1,2,3) fun void processEventOSC9() { while ( true ) { oe_event9 => now; while ( oe_event9.nextMsg() != 0 ) { 0 => isRating; oe_event9.getInt() => int numItems; 0.0 => eL.value => eR.value; int velocity; if( numItems == 1 ) 1 => velocity; else if( numItems > 1 && numItems <= 4 ) 2 => velocity; else if( numItems > 4 ) 3 => velocity; else return; playWhistle( 200 + (Math.fabs(velocity)-1) * 800, Math.fabs(velocity) * 120, 1 ); 0.0 => eR.target; } } } // "/browsing/scrollleft/1,3,7" (-1,-2,-3) fun void processEventOSC10() { while ( true ) { oe_event10 => now; while ( oe_event10.nextMsg() != 0 ) { 0 => isRating; oe_event10.getInt() => int numItems; 0.0 => eL.value => eR.value; int velocity; if( numItems == 1 ) -1 => velocity; else if( numItems > 1 && numItems <= 4 ) -2 => velocity; else if( numItems > 4 ) -3 => velocity; else return; playWhistle( 200 + (Math.fabs(velocity)-1) * 800, Math.fabs(velocity) * 120, 0 ); 0.0 => eL.target; } } } // swellDuration: longer duration results in a longer sonification (~ gesture duration) // fDisplacement: larger displacement has a greater swell in the frequency (~ gesture velocity) fun void playWhistle( float swellDuration, float fDisplacement, int rightHand ) { 0 => float x => float y; 500 => float fCenter; 10::ms => e.duration; // left-hand: down then up if( rightHand == 0 ) { // offsetL.next() => float fCenter; // save starting carrier frequency 0.25 => float x; 0.9 => eL.target; while( true ) { if ( x > 0.75 ) return; Math.cos( 2 * pi * x ) => y; // -1 to 1 y * fDisplacement + fCenter => sL.freq; x + 0.05 => x; swellDuration::samp => now; } } // right-hand: up then down else { // offsetR.next() => float fCenter; // save starting carrier frequency -0.25 => float x; 0.9 => eR.target; while( true ) { if ( x > 0.25 ) return; Math.cos( 2 * pi * x ) => y; // -1 to 1 y * fDisplacement + fCenter => sR.freq; x + 0.05 => x; swellDuration::samp => now; } } } // "/rating" fun void processEventOSC11() { while ( true ) { oe_event11 => now; while ( oe_event11.nextMsg() != 0 ) { if( isRating == 0 ) spork ~ sonifyRating(); } } } // "/rating 1-5" fun void processEventOSC12() { while ( true ) { oe_event12 => now; while ( oe_event12.nextMsg() != 0 ) { oe_event12.getInt() => numStars; // oe_event12.getInt() => numStars; <<< "numStars: ", numStars >>>; 1 => isRating; // shouldn't need this..? } } } fun void sonifyRating() { 1 => isRating; 0.01 => r.mix; 80::ms => e.duration; Std.mtof(space-12) => s1.freq => s2.freq => s3.freq; 0.1 => e.target; while(true) { if( isRating == 0 ) break; Std.mtof(space - 12 + numStars) => s3.freq; /* if( numStars == 1 ) Std.mtof(space - 12 + 2) => s3.freq; if( numStars == 2 ) Std.mtof(space - 12 + 4) => s3.freq; if( numStars == 3 ) Std.mtof(space - 12 + 5) => s3.freq; if( numStars == 4 ) Std.mtof(space - 12 + 7) => s3.freq; if( numStars == 5 ) Std.mtof(space - 12 + 9) => s3.freq; */ 0.4 => e.target; 10::ms => now; } 0.0 => e.target; 50::ms => now; } // "/rating/finish", fun void processEventOSC13() { while ( true ) { oe_event13 => now; while ( oe_event13.nextMsg() != 0 ) { 0 => isRating; } } } // "/rating/cancel", fun void processEventOSC18() { while ( true ) { oe_event18 => now; while ( oe_event18.nextMsg() != 0 ) { 0 => isRating; } } } // yield fun void processEventOSC14() { while ( true ) { oe_event14 => now; while ( oe_event14.nextMsg() != 0 ) { 0 => isRating; 0.01 => r.mix; Std.mtof(67) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; Std.mtof(69) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; Std.mtof(71) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; Std.mtof(72) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; Std.mtof(74) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; Std.mtof(76) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; Std.mtof(78) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; Std.mtof(79) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; 100::ms => now; } } } // updated fun void processEventOSC15() { while ( true ) { oe_event15 => now; while ( oe_event15.nextMsg() != 0 ) { 0.01 => r.mix; Std.mtof(78) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; Std.mtof(74) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; Std.mtof(78) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; Std.mtof(74) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; Std.mtof(78) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; Std.mtof(74) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; 100::ms => now; 0.0 => e.target; 100::ms => now; } } } // zoomin fun void processEventOSC16() { while ( true ) { oe_event16 => now; while ( oe_event16.nextMsg() != 0 ) { 0.01 => r.mix; 43.0 => float notenum; Std.mtof(notenum) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; while( notenum <= 91 ) { notenum + 0.01 => notenum; Std.mtof(notenum) => s1.freq => s2.freq => s3.freq; 2::samp => now; } 0.0 => e.target; 10::ms => now; } } } // zoomout fun void processEventOSC17() { while ( true ) { oe_event17 => now; while ( oe_event17.nextMsg() != 0 ) { 0.01 => r.mix; 95.0 => float notenum; Std.mtof(notenum) => s1.freq => s2.freq => s3.freq; 0.5 => e.target; while( notenum > 43.0 ) { notenum - 0.01 => notenum; Std.mtof(notenum) => s1.freq => s2.freq => s3.freq; 2::samp => now; } 0.0 => e.target; 10::ms => now; } } }