Submit
Browse
Anonymous
Login
RSS
SuperCollider Code
Fork Code: sieves
name
code content
// https://research.gold.ac.uk/id/eprint/15753/1/11.2-Dimitris-Exarchos-&-Daniel-Jones.pdf (//function that creates a set from arguments defining a residual class ~mod = { arg modulus, residue, terms; var set, i=0, term = residue; set = Set[]; while( {i < terms}, { set.add(term); term = term + modulus; i = i+1; } ); set; }; ) //Symmetric sieves may be expressed merely as a union of two different modules (~mod.(3, 0, 4)|~mod.(4, 0, 4)).asArray.sort; //to get just the first period of the intervallic sucsession, the terms computed should be equal to the highest modulus. The period is equal to the LCM of the moduli, or 12. (~mod.(3, 0, 4).union(~mod.(4, 0, 4))).asArray.sort.differentiate.drop(1); //intervallic sucsession (~mod.(3, 0, 8).union(~mod.(4, 0, 7))).asArray.sort.differentiate.drop(1);//two periods of the intervallic sucsession, the terms computed for the module with the larger modulus should be twice the larger modulus minus one (~mod.(2, 0, 3)|~mod.(3, 0, 3)).asArray.sort; (~mod.(2, 0, 3)|~mod.(3, 0, 3)).asArray.sort.differentiate.drop(1); (~mod.(2, 0, 6)|~mod.(3, 0, 5)).asArray.sort.differentiate.drop(1);//two periods of the intervallic sucsession, the terms computed for the module with the larger modulus should be twice the larger modulus minus one //two different ways to write the major scale (~mod.(4,2,4)&~mod.(3,2,4)) == ~mod.(12,2,1) //you can write scale degrees either as an intersection of modules with modulus 3 and 4, or as a module with modulus of the period of the tuning (in this case 12 for 12tet) (~mod.(4,0,4)&~mod.(3,0,4)) == ~mod.(12,0,1) (~mod.(12,0, 3) | ~mod.(12,2,2) | ~mod.(12,4,2) | ~mod.(12,5,2) | ~mod.(12,7,2) | ~mod.(12,9,2) | ~mod.(12,11,2)).asArray.sort; //two octaves of major scale written using modules with modulus 12 (~mod.(12,0, 3) | ~mod.(12,2,2) | ~mod.(12,4,2) | ~mod.(12,5,2) | ~mod.(12,7,2) | ~mod.(12,9,2) | ~mod.(12,11,2)).asArray.sort.differentiate.drop(1);//familiar major pattern ((~mod.(4,0,4)&~mod.(3,0,4)) | (~mod.(4,2,4)&~mod.(3,2,4)) | (~mod.(4,4,4)&~mod.(3,4,4)) | (~mod.(4,5,4)&~mod.(3,5,4)) | (~mod.(4,7,4)&~mod.(3,7,4)) | (~mod.(4,9,4)&~mod.(3,9,4)) | (~mod.(4,11,4)&~mod.(3,11,4))).asArray.sort;//one octave of major scale written using intersections of modules with modulus 3 and 4 //regrouping by modules with modulus 4 via distributive property ( (( ~mod.(4, 0, 4) & (~mod.(3, 0, 4)|~mod.(3, 1, 4)) ) | ( ~mod.(4, 1, 4) & (~mod.(3, 0, 4)|~mod.(3, 2, 4)) ) | ( ~mod.(4, 3, 4) & (~mod.(3, 1, 4)|~mod.(3, 2, 4)) ) | ( ~mod.(4, 2, 4) & ~mod.(3, 2, 4) ) ).asArray.sort; ) //The theoretical expression of an asymmetric sieve is impossible without using intersection. Any sieve that can be expressed using only union is symmetric, although the symmetry can be large and "rotated" (not at the middle index of the ordered set). Decomposing the sieves such as the decomposition of the major scale in the previous sections is not possible for sieves with prime periods.
code description
function for working with xenakis' sieves made of residual classes/modules function takes a set of arguments for modulus, shifter and number of digits to compute, and returns a set, which can be used to construct sieves
use markdown for formating
category tags
comma separated, i.g. "wild, siren" (do not enter default SC class names, please)
ancestor(s)
comma separated identificators, i.g. "1-C,1-1,1-4M,1-x"
Private?
the code will be accessible by direct url and not visible in public activity
signup to submit public code without captcha
comment of change