compact_sets/supercollider/compact_sets_play_siren.scd

111 lines
3.4 KiB
Plaintext
Raw Normal View History

(
var primes, hsArrayToFreq, hsArrayDimDiff, file, seq, phraseLengths, musicData, patterns, fund, seqIndex;
thisThread.randSeed = 1954111620240509; //everything in between
//thisThread.randSeed = 20240509; //rise yitgadal
fund = 100;
~m1 = NetAddr("192.168.4.200", 54001);
~m2 = NetAddr("192.168.4.202", 54000);
~m3 = NetAddr("192.168.4.203", 54000);
primes = [2, 3, 5, 7, 11, 13, 17];
hsArrayToFreq = {
arg array;
array.collect({arg dim, d; pow(primes[d], dim)}).product
};
hsArrayDimDiff = {
arg array1, array2;
var fArray;
fArray = array2.drop(1) - array1.drop(1);
if(fArray.sum == 0, {1}, {(primes[fArray.abs.indexOf(1) + 1] * fArray.sum)})
};
//file = File("/home/mwinter/Portfolio/compact_sets/sirens.txt".standardizePath,"r");
//file = File("/home/mwinter/Sketches/compact_sets/rise_yitgadal.txt".standardizePath,"r");
file = File("/home/mwinter/Portfolio/compact_sets/everything_in_between.txt".standardizePath,"r");
seq = file.readAllString.interpret;
//seq = seq.collect({arg item; item.sort});
seq = seq.collect({arg chord, index;
var ref_ins;
ref_ins = if(index == 0, {
[0] // this should actually check which is the 'centered' pitch
}, {
[seq[index - 1], chord].postln.flop.collect({arg pair, p; if(pair[0] == pair[1], {p}, {-1})}).postln.removeEvery([-1])
});
chord.collect({arg pitch;
var dimDiff;
ref_ins.postln;
if(ref_ins.size == 1, {
[pitch, [ref_ins[0], hsArrayDimDiff.value(chord[ref_ins[0]], pitch)]]
}, {
var min_ref_ins;
min_ref_ins = ref_ins.minItem({arg ins; (chord[ins].drop(1) - pitch.drop(1)).abs.sum});
[pitch.postln, [min_ref_ins.postln, hsArrayDimDiff.value(chord[min_ref_ins], pitch)]]
});
})
});
seq = seq.collect({arg chord; chord; chord.collect({arg pitch; fund * hsArrayToFreq.value(pitch[0])}).postln});
seq.postln;
seqIndex = -1;
w = Window.new("compact sets siren player");
w.view.keyDownAction = { arg view, char, modifiers, unicode, keycode;
[char, keycode].postln;
if((keycode == 44) && ((seqIndex - 1) >= 0), {
seqIndex = seqIndex - 1;
~m1.sendMsg("/freq", 1, seq[seqIndex][0].postln);
~m1.sendMsg("/freq", 2, seq[seqIndex][1].postln);
~m1.sendMsg("/freq", 3, seq[seqIndex][2].postln);
});
if((keycode == 46) && ((seqIndex + 1) < seq.size), {
seqIndex = seqIndex + 1;
~m1.sendMsg("/freq", 1, seq[seqIndex][0].postln);
~m1.sendMsg("/freq", 2, seq[seqIndex][1].postln);
~m1.sendMsg("/freq", 3, seq[seqIndex][2].postln);
});
if((keycode == 47) && ((seqIndex - 1) >= 0) && ((seqIndex + 1) < seq.size), {
~m1.sendMsg("/freq", 1, seq[seqIndex][0].postln);
~m1.sendMsg("/freq", 2, seq[seqIndex][1].postln);
~m1.sendMsg("/freq", 3, seq[seqIndex][2].postln);
});
};
w.front;
/*
~musicData = musicData;
~patterns = Ppar(
musicData.collect({arg voice, v;
var freqs, durs, attacks, delays, sustains, rels, amps;
# freqs, durs, attacks, delays, sustains, rels, amps = voice.flop;
//# durs, attacks, delays, sustains, rels = [durs, attacks, delays, sustains, rels].collect({arg data; data / 16});
Pbind(
\instrument, \string_model,
\freq, Pseq(freqs, 1),
\dur, Pseq(durs, 1),
\attack, Pseq(attacks, 1),
\sustain, Pseq(sustains, 1),
\release, Pseq(rels, 1),
\amp, Pseq(amps, 1),
\del, Pseq(delays, 1),
\busIndex, v
)
});
);
~patterns.play
*/
)
(
w = Window.new("I catch keystrokes");
w.view.keyDownAction = { arg view, char, modifiers, unicode, keycode; [char, keycode].postln; };
w.front;
)