diff --git a/ASD_ICLC.sc b/ASD_ICLC.sc new file mode 100644 index 0000000..c8fe724 --- /dev/null +++ b/ASD_ICLC.sc @@ -0,0 +1,95 @@ +/* +Create an algodynamic score for ICLC performance. + +Run the following line one-by-one to play the algodyn score: + +~iclc = Proxy_Pattern_Score.new; +~iclc.dests = [Dests.addr1, Dests.addr2]; +~iclc.title = '/track_1'; +~iclc.tags = (1..5); +~iclc.step = [1, 1, 1, 1, 1]/1; +Dests.addr1.sendMsg('Load_track_1_actions'); +~iclc.loop; +~iclc.stop; + +Aris Bezas 22:17 AM Feb 22, 2015 +*/ + +Score_Definition { + *initClass { + StartUp add: { + ~meter=0; + ~activateChange = false; + this.define_Track_1_Resps; + this.track_1; + "\n* Algorithmic Dynamic Score Definition is ready to start".postln; + } + } + *removeAllResps { + ~track_1_Resp_1 = RespTags.do('/track_1', 1, nil);~track_1_Resp_2 = RespTags.do('/track_1', 2, nil); + ~track_1_Resp_3 = RespTags.do('/track_1', 3, nil);~track_1_Resp_4 = RespTags.do('/track_1', 4, nil); + ~track_1_Resp_5 = RespTags.do('/track_1', 5, nil); + } + *define_Track_1_Resps { + ~track_1_Resp_1 = RespTags.do('/track_1', 1, nil); + ~track_1_Resp_2 = RespTags.do('/track_1', 2, nil); + ~track_1_Resp_3 = RespTags.do('/track_1', 3, nil); + ~track_1_Resp_4 = RespTags.do('/track_1', 4, nil); + ~track_1_Resp_5 = RespTags.do('/track_1', 5, nil); + + } + *remove_Track_1_Resps { + ~track_1_Resp_1.removeResp; + ~track_1_Resp_2.removeResp; + ~track_1_Resp_3.removeResp; + ~track_1_Resp_4.removeResp; + ~track_1_Resp_5.removeResp; + } + *track_1{ + ~track_1_Resp = OSCresponderNode( + nil, + 'Load_track_1_actions', + { |t,r,msg| + "Load_track_1_actions...".postln; + ~track_1_Resp_1.action = { + "\ntrack_1:meter: ".post; ~meter.postln; + "beat: 1".postln; + Dests.addr2.sendMsg("/meter",~meter); + Dests.addr2.sendMsg("/beat",1); + case + { ~meter == 0 } { Dests.addr1.sendMsg("meter/0")} + { ~meter == 6 } { \true }; + ~meter = ~meter + 1; + }; + ~track_1_Resp_2.action = { + "beat: 2".postln; + NetAddr("127.0.0.1" ,12345).sendMsg("/beat",2); + case + { ~meter == 1 } { \no } + { ~meter == 6 } { \true }; + }; + ~track_1_Resp_3.action = { + "beat: 3".postln; + NetAddr("127.0.0.1" ,12345).sendMsg("/beat",3); + case + { ~meter == 1 } { \no } + { ~meter == 6 } { \true }; + }; + ~track_1_Resp_4.action = { + "beat: 4".postln; + NetAddr("127.0.0.1" ,12345).sendMsg("/beat",4); + case + { ~meter == 1 } { \no } + { ~meter == 6 } { \true }; + }; + ~track_1_Resp_5.action = { + "beat: 5".postln; + NetAddr("127.0.0.1" ,12345).sendMsg("/beat",5); + case + { ~meter == 1 } { \no } + { ~meter == 6 } { \true }; + }; + }).add; + } +} + diff --git a/Algodynamic_Score_Core.sc b/Algodynamic_Score_Core.sc new file mode 100644 index 0000000..fb40862 --- /dev/null +++ b/Algodynamic_Score_Core.sc @@ -0,0 +1,122 @@ +/* +This contains all the classes that Algodynamic Score Core is needed. +Those, are followings: + +- Score_Implementation - create the Responders +- Dests - Group the I.P. of the participants +- Proxy_Pattern_Score - Create an Proxy Pattern to fullfill (Algodynamic Score Core) +- RespTags - Class for automate the creation of the responders + +Aris Bezas 12:05 AM Feb 22, 2015 +*/ + +Score_Implementation{ + *load { + Dests.addr1.sendMsg('Load_track_1_actions'); + "Load_track_1_actions".postln; + } + *goToTrack { |track| + ~activateChange = true; + switch ( track, + 1, {~nextTrack = 1}, + 2, {~nextTrack = 2}, + 3, {~nextTrack = 3}, + ); + //this.activateChange; + } + *activateChange { + switch (~nextTrack, + 1, { + //Score_Definition.removeAllResps; + //Score_Definition.define_Track_1_Resps; + this.play_track_1; + ~playTrack_2.stop; + ~playTrack_1.loop; + }, + 2, { + //Score_Definition.removeAllResps; + //Score_Definition.define_Track_2_Resps; + ~playTrack_1.stop; + this.play_track_2; + ~playTrack_2.loop; + }, + ~activateChange = false; + ) + } + + *play_track_1 { + //Score_Definition.define_Track_1_Resps; + ~meter = 1; + ~playTrack_1 = Proxy_Pattern_Score.new; + ~playTrack_1.dests = [Dests.addr1]; + ~playTrack_1.title = '/track_1'; + ~playTrack_1.tags = (1..4); + ~playTrack_1.step = [1, 1, 1, 1]/1; + ~playTrack_1.stop; + } +} + +Dests { classvar <>addr1, <>addr2, <>addr3; + *initClass { + StartUp.add{ + // Error messages to Post window when I am sending to IP that doesn't exist. + addr1 = NetAddr("localhost", 57120); + addr2 = NetAddr("localhost", 12345); + //addr3 = NetAddr("192.127.0.4", 57140); + } + } +} + +Proxy_Pattern_Score { + var <>num=0, <>tags, <>step=0.25, <>title, <>stepPat, <>tagPat, task, verbose = true; + var <>dests, <>tag, <>tagStream, <>stepStream, <>stp2, <>x, <>times = inf; + loop { + tagPat = PatternProxy(Pseq([nil], inf)); + stepPat = PatternProxy(Pseq([nil], inf)); + tagStream = tagPat.asStream; + stepStream = stepPat.asStream; + task = Task({ + times.do{ + tagPat.source = Pseq(tags, inf); + stepPat.source = Pseq(step, inf); + num = tags.numChannels; // count the beats + num.do{ + x = tagStream.next; + dests do: _.sendMsg(title.asString, x); // send to all dests (\title, 1) + stepStream.next.wait; + } + } + }); + task.start; + } + pause { + task.pause; + } + resume { + task.resume; + } + reset { + task.reset; + } + stop { + task.stop; + } +} + + +RespTags { var <>title, <>tag, <>action, <>responder; + var addResp; + *do { |title, tag, action, responder| + ^super.newCopyArgs(title, tag, action, responder).addResp; + } + addResp { + responder = OSCresponderNode(nil, title.asString, {arg time, resp, msg; + msg[1].switch( tag, + action + ); + }).add; + } + removeResp { + responder.remove; + } +} \ No newline at end of file diff --git a/Algodynamic_Score_Definition_Template.scd b/Algodynamic_Score_Definition_Template.scd new file mode 100644 index 0000000..72fe508 --- /dev/null +++ b/Algodynamic_Score_Definition_Template.scd @@ -0,0 +1,112 @@ +/* +This contains all the classes that Algodynamic Score definition. + +---- Example ---- +~myScore = Score_Implementation.load +~playTrack_1 = Proxy_Pattern_Score.new; +~playTrack_1.dests = [Dests.addr1]; +~playTrack_1.title = '/track_1'; +~playTrack_1.tags = (1..4); +~playTrack_1.step = [1, 1, 1, 1]/1; +~playTrack_1.loop; +Score_Implementation.goToTrack(2) +Score_Implementation.goToTrack(1) + + +~myScoreDefinition = Score_Definition +~myScoreDefinition.removeAllResps +~myScoreDefinition.track_1 +~myScoreDefinition.define_Track_1_Resps + + +OSCFunc.trace(true) +OSCFunc.trace(false) +Aris Bezas 12:05 AM Feb 28, 2013 +*/ + +Score_Definition { + *initClass { + StartUp add: { + ~meter=0; + ~activateChange = false; + this.define_Track_1_Resps; + this.track_1; + "\n* Algorithmic Dynamic Score Definition is ready to start".postln; + } + } + *removeAllResps { + ~track_1_Resp_1 = RespTags.do('/track_1', 1, nil);~track_1_Resp_2 = RespTags.do('/track_1', 2, nil); + ~track_1_Resp_3 = RespTags.do('/track_1', 3, nil);~track_1_Resp_4 = RespTags.do('/track_1', 4, nil); + } + *define_Track_1_Resps { + ~track_1_Resp_1 = RespTags.do('/track_1', 1, nil); + ~track_1_Resp_2 = RespTags.do('/track_1', 2, nil); + ~track_1_Resp_3 = RespTags.do('/track_1', 3, nil); + ~track_1_Resp_4 = RespTags.do('/track_1', 4, nil); + + } + *remove_Track_1_Resps { + //~track_1_Resp.remove; + ~track_1_Resp_1.removeResp; + ~track_1_Resp_2.removeResp; + ~track_1_Resp_3.removeResp; + ~track_1_Resp_4.removeResp; + } + *track_1{ + ~track_1_Resp = OSCresponderNode( + nil, + 'Load_track_1_actions', + { |t,r,msg| + "Load_track_1_actions...".postln; + ~track_1_Resp_1.action = { + "\ntrack_1:meter: ".post; ~meter.postln; + "beat: 1".postln; + NetAddr("127.0.0.1" ,12345).sendMsg("/beat",1.0); + case + // { ~meter == 0 } { "pop".postln} + // { ~meter == 1 } { "pop".postln} + // { ~meter == 2 } { Dests.addr1.sendMsg("test")} + // { ~meter == 2 } { \wrong } + // { ~meter == 3 } { \wrong } + // { ~meter == 4 } { \wrong } + // { ~meter == 5 } { \wrong } + { ~meter == 6 } { \true }; + ~meter = ~meter + 1; + }; + ~track_1_Resp_2.action = { + "beat: 2".postln; + NetAddr("127.0.0.1" ,12345).sendMsg("/beat",2.0); + case + { ~meter == 1 } { \no } + { ~meter == 2 } { \wrong } + { ~meter == 3 } { \wrong } + { ~meter == 4 } { \wrong } + { ~meter == 5 } { \wrong } + { ~meter == 6 } { \true }; + }; + ~track_1_Resp_3.action = { + "beat: 3".postln; + NetAddr("127.0.0.1" ,12345).sendMsg("/beat",3.0); + case + { ~meter == 1 } { \no } + { ~meter == 2 } { \wrong } + { ~meter == 3 } { \wrong } + { ~meter == 4 } { \wrong } + { ~meter == 5 } { \wrong } + { ~meter == 6 } { \true }; + }; + ~track_1_Resp_4.action = { + "beat: 4".postln; + NetAddr("127.0.0.1" ,12345).sendMsg("/beat",4.0); + case + { ~meter == 1 } { \no } + { ~meter == 2 } { \wrong } + { ~meter == 3 } { \wrong } + { ~meter == 4 } { \wrong } + { ~meter == 5 } { \wrong } + { ~meter == 6 } { \true }; + }; + }).add; + } +} + diff --git a/README.org b/README.org index 73c3259..e69de29 100644 --- a/README.org +++ b/README.org @@ -1,16 +0,0 @@ -SC_Score -- SC_Score -- Dests -- RespTags - -Score_Class Implementation -- Score_Definition -- Score_Definition_Implementation - -*Special thanks earlab team* -- Iannis Zannos -- Dakis Trentos -- Omer Chatziserif -- Aris Bezas -- Vaggelis Tsatsis -- Alexandros Aggelakis diff --git a/Algorithmic_Dynamic_Score.sc b/archive/Algorithmic_Dynamic_Score.scd similarity index 100% rename from Algorithmic_Dynamic_Score.sc rename to archive/Algorithmic_Dynamic_Score.scd