2025

Performing Code: Rhythm Generation and Structure in Live Coding

Live Coding, Rhythm Generation, Sieve Theory, SuperCollider, Sound Synthesis


In this series of live coded performances, Luis Sanz explores rhythm and musical form through algorithmic systems built on controlled randomness and integer-based sieve techniques. Developed in SuperCollider, the setup merges evolving rule sets with real-time performer interaction, shaping musical parameters, structure, and rhythmic patterns.

The series embodies a dynamic and performative approach to composition, where live coding becomes both a method of creation and a form of improvisation. Here, code functions simultaneously as instrument, score, and interface for spontaneous musical expression.




*recommended: use headphones for optimal listening



Rhythm Generator #1

 t.stop; Tempo.bpm = 99;
(
Pdefn(\degree, [36, \r, 46, 39, \r, 49, 49, 40] - 1 + PSVop_oi([3, 5, 6, 7, 9, 11]).asStream); // note values
Pdefn(\legato, Pwhite(0.1, 0.5, inf) + Pseq([0.0, 0.2, 0.3, 0.5, 0.7], inf)); // note lengths
Pdefn(\amp, PSVsymdif_i([3, 5, 6, 7, 9, 10, 11, 12, 14, 15])/2.5); //  velocity values 
Pdefn(\dur, Pbjorklund2(Pwhite(2, 3), 8, inf) * 0.02 * PSVunion_i([4, 6, 7]).asStream); //duration 
)
Pdefn(\degree, [36, \r, 46, 39, \r, 49, 49, 40] - 1 * PSVop_oi([3, 5, 6, 7, 9, 11]).asStream)
Pdefn(\degree, [48, \r, \49, \r, \54] * 1 + PSVop_oi([3, 5, 6, 7, 9, 11]).asStream);
Pdefn(\degree, [48, \r, \49, \r, \54] - 1 + PSVop_oi([3, 5, 6, 7, 9, 11]).asStream);




Rhythm Generator #2

// rhythm generator #2 | 
(
Pdefn(\degree, [50, \r, \49, \r, \54, 36] * 1 + PSVop_i([3, 5, 6, 7, 9, 11]).asStream);
Pdefn(\legato, 1);
Pdefn(\dur, Pseq([1, 0.5, 1.5, 1], inf)/16 * PSVunion_oi([1, 5, 10, 7]).asStream);
Pdefn(\amp, Pseq([0.7, 0.3, 0.7, 0.3, 0.6, 0.2, 0.6, 0.2], inf));
)
Pdefn(\degree, [36, \r, 46, 39, \r, 49, 49, 50] - 1 + PSVop_i([3, 5, 6, 7, 9, 11]).asStream);
Pdefn(\degree, [48, \r, \r, 49, \r, \54] - 1 + PSVop_i([3, 5, 6, 7, 9, 11]).asStream);
Pdefn(\degree, [36, \r, 46, 39, \r, 49, 49, 36] - 1 + PSVop_i([3, 5, 6, 7, 9, 11]).asStream);




Rhythm Generator #3

// rhythm generator #3 | 
(
)




Rhythm Generator #4

// rhythm generator #4 | 
(
)




Rhythm Generator #5

// rhythm generator #5 | 
(
)




Rhythm Generator #6

// rhythm generator #6 | 
(
)




Rhythm Generator #7

// rhythm generator #7 | 
(
)