A simple description of the algorithm for Achorripsis by Iannis Xenakis, as described by Orestis Plakias in class. Furthermore some incremental notes towards coding this in SuperCollider.
/*
420 seconds
divided in sections of 15 seconds
Each section contains one event.
There are 5 kinds of events:
- Silence
- Simple Event
- 2 events (compound event 2)
- 3 events (compound event 3)
- 4 events (compound event 4)
The compound events 2, 3, and 4 are composed of 2, 3, and 4 events respectively, where each one of the component events can start at any time independent of the other within the time span of the composed event
*/
-------------------------
~proto = Event.make({
~chrono = { "hello".postln; };
~dtime = 15;
});
~proto;
~proto.chrono;
~proto.dtime;
-------------------------
~proto = Event.make({
~num_repeats = 28;
~dtime = 15;
~chrono = Routine({
"starting".postln;
~num_repeats do: { | index |
index.postln;
(~dtime / 10).wait;
};
});
});
~proto
~proto.chrono.play;
-------------------------
-------------------------
~proto = Event.make({
~num_repeats = 28;
~dtime = 15;
~chrono = Routine({
"starting".postln;
~num_repeats do: { | index |
index.postln;
(~dtime / 10).wait;
};
});
~play = { ~chrono.play };
~stop = {
~chrono.stop;
"stopped".postln;
};
});
~proto
~proto.play;
-------------------------
(
~proto = Event.make({
~num_repeats = 28;
~dtime = 15;
~scale = 0.1;
~scaled_dtime = { ~dtime * ~scale };
~play_single_event = {
// compute start dtime
~start_time = 0 rrandom: (~scaled_dtime * 0.5);
// compute playback parameters
// select a buffer at random
// play that buffer
};
~play_event = { | num_component_events = 1 |
num_component_events do: {
~play_single_event.value;
}
}
~action = { ~play_event.value(5.random); };
~chrono = Routine({
"starting".postln;
~num_repeats do: { | index |
index.postln;
~scaled_dtime.value.wait;
};
});
~play = {
if ((~chrono.state == 0) or: (~chrono.state == 6)) {
~chrono.reset;
~chrono.play;
}{
"already running".postln;
}
};
~stop = {
~chrono.stop;
};
});
)
~proto.play;
~proto.stop;
~proto.chrono.state
-------------------------
/*
~chrono = Event.make({
chrono: Routine({
loop {
~
15.wait;
}
});
})
*/
Post a Comment