Skip to content

Instantly share code, notes, and snippets.

@edeleflie
Created October 5, 2011 00:04
Show Gist options
  • Save edeleflie/1263209 to your computer and use it in GitHub Desktop.
Save edeleflie/1263209 to your computer and use it in GitHub Desktop.
OSC controlled
~orchestra= Buffer.read(s, "/Users/etiennedeleflie/Documents/teaching/music_synthesis/08/classical_long.wav");
~orchestra= Buffer.read(s, "/Users/etiennedeleflie/imagesynth/audio/DoubleBass.wav");
(
~first_filter = Synth("auditory_s_s", [ \in, 100, \out, 0, \pan, 0, \source_vol, 0, \vol, 0 ]); // try a rate of 0.1
~xenakish_1 = Synth("Xenakish", [ \out, 100, \soundFile, ~orchestra, \speed, 1.0, \goTo, 0.5, \t_ramp, 1, \grainLength, 0.05, \triggerGrainEvery, 0.01, \randomPosSpread, 0.008 ]);
// create a Lindenmeyer system pattern
~linden_1 = Prewrite(0, ( 0: #[0.0125, 0.0375, 0.075, 0.125, 0.250, 0.5, 2.0 ],
0.0375: #[0.0125, 0.0375, 0.5 ],
0.0125: #[0.250, 0.0125, 0.0375, 0.0125],
0.5: #[0.5, 0.0125, 0.0375, 0.0125 , 0.0375]),
3);
)
// check what the lindenmeyer system gives me
// x = ~linden_1.asStream; 40.do({ ((x.next)).post; "-".post });
// run the patterns together
(
// this pattern just changes the volume on the xenakish synth, creates structure
q = Pbind( \type, \set, \id, ~xenakish_1.nodeID,
  \args, #[vol, triggerGrainEvery],
\triggerGrainEvery, ~linden_1,
\dur, 1
).play;
)
// this maps all the OSC messages to their corresponding synth
(
var savedGoIn = 0;
var lotsOfMessages = List.new(1);
lotsOfMessages.add( OSCresponderNode(nil, '/ass/source_vol', { |t, r, msg| ~first_filter.set(\source_vol, msg[1] ) }).add );
lotsOfMessages.add( OSCresponderNode(nil, '/ass/room', { |t, r, msg| ~first_filter.set(\room, msg[1] ) }).add );
lotsOfMessages.add( OSCresponderNode(nil, '/ass/vol', { |t, r, msg| ~first_filter.set(\vol, msg[1] ) }).add );
lotsOfMessages.add( OSCresponderNode(nil, '/ass/pan', { |t, r, msg| ~first_filter.set(\pan, msg[1] ) }).add );
lotsOfMessages.add( OSCresponderNode(nil, '/ass/damp', { |t, r, msg| ~first_filter.set(\damp, msg[1] ) }).add );
lotsOfMessages.add( OSCresponderNode(nil, '/ass/stereoWidthVol', { |t, r, msg| ~first_filter.set(\stereoWidthVol, msg[1] ) }).add );
lotsOfMessages.add( OSCresponderNode(nil, '/ass/stereoWidthAmount', { |t, r, msg| ~first_filter.set(\stereoWidthAmount, msg[1] ) }).add );
lotsOfMessages.add( OSCresponderNode(nil, '/ass/lp_cutoff_freq', { |t, r, msg| ~first_filter.set(\lp_cutoff_freq, msg[1].linexp(200, 20000, 200, 20000) ) }).add );
lotsOfMessages.add( OSCresponderNode(nil, '/ass/hp_cutoff_freq', { |t, r, msg| ~first_filter.set(\hp_cutoff_freq, msg[1].linexp(200, 20000, 200, 20000) ) }).add );
lotsOfMessages.add( OSCresponderNode(nil, '/xenakish/goTo', { |t, r, msg| ~xenakish_1.set(\goTo, msg[1], \goIn, savedGoIn, \t_ramp, 1); }).add );
lotsOfMessages.add( OSCresponderNode(nil, '/xenakish/goIn', { |t, r, msg| savedGoIn = msg[1] }).add );
lotsOfMessages.add( OSCresponderNode(nil, '/xenakish/speedRoot', { |t, r, msg| ~xenakish_1.set(\speed, Scale.major.tuning.ratios[0] ) }).add );
lotsOfMessages.add( OSCresponderNode(nil, '/xenakish/speedFourth', { |t, r, msg| ~xenakish_1.set(\speed, Scale.major.tuning.ratios[6] ) }).add );
lotsOfMessages.add( OSCresponderNode(nil, '/xenakish/speedFifth', { |t, r, msg| ~xenakish_1.set(\speed, Scale.major.tuning.ratios[8] ) }).add );
)
// kill all the OSC message listeners
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment