/*----------------------------------------------------------------------------* * * Nur * by Dave Seidel (January 2009) * * Copyright (c) 2009 Dave Seidel, some rights reserved. This work is * licensed under the Creative Commons "Attribution" License * (http://creativecommons.org/licenses/by/3.0/). * * http://mysterybear.net/article/31 * *----------------------------------------------------------------------------*/ /* * Execute this block first. */ ( // instrument and wrapper ( // Risset harmonic arpeggio instrument SynthDef(\risset, { |buf, freq, dur, out=0, lev=1, ofs=0.01| var mul = (1/10) * lev; var osc = [ Mix(Osc.ar(buf, freq + (ofs * [-4,-2,0,2,4]), 0, mul)), Mix(Osc.ar(buf, freq + (ofs * [-3,-1,0,1,3]), 0, mul)) ]; var env = Env.linen(3, dur, 9, 1); Out.ar(out, EnvGen.kr(env, doneAction:2) * osc); }).send(s); // function wrapper to play chords on the Risset instrument ~risset = { |base,chord,partials,ofs=0.01,dur=120| var wave = Buffer.alloc(s, 8192, 1); var risset = { |base,wave,oct,ratio,ofs| Synth("risset",[\buf, wave, \freq, (base*oct) * ratio, \dur, dur, \lev, (1/9), \ofs, ofs ]) }; wave.sine2(partials, 1/partials); chord.do { |item| risset.(base, wave, 1, item, item * ofs) }; "risset: " + base + ", " + chord + ", " + partials + ", " + ofs + ", " + dur; }; ); // chord and waveform data ( // chords (in just intonation) ~chord1 = [ 1, (3/2), 2 ]; ~chord2 = [ 1, (4/3), (3/2), 2 ]; ~chord3 = [ 1, (4/3), (3/2), (7/4), 2 ]; ~chord4 = [ 1, (4/3), (3/2), (7/4), 2, (9/4) ]; // waveform (harmonics from the Fibonacci series) ~fibs = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89]; ); "setup done"; ) /* * Execute the following lines, one at a time. The first line will * establish a "beat"; use that as the underlying rhythm for subsequent * lines, where each beat is about one second in duration, and there is * an eight-beat pause between each line. */ ~risset.(240, ~chord1, ~fibs, 1.875); ~risset.(240, ~chord1, ~fibs, 0.9375); ~risset.(240, ~chord1, ~fibs, 0.46875); ~risset.(240, ~chord1, ~fibs, 0.234375); ~risset.(240, ~chord1, ~fibs, 0.1171875); ~risset.(240, ~chord1, ~fibs, 0.05859375); ~risset.(240, ~chord1, ~fibs, 0.029296875); ~risset.(240, ~chord1, ~fibs, 0.0146484375); ~risset.(240, ~chord1, ~fibs, 0.00732421875); ~risset.(240, ~chord1, ~fibs, 0.003662109375); ~risset.(240, ~chord2, ~fibs, 1.875); ~risset.(240, ~chord2, ~fibs, 0.9375); ~risset.(240, ~chord2, ~fibs, 0.46875); ~risset.(240, ~chord2, ~fibs, 0.234375); ~risset.(240, ~chord2, ~fibs, 0.1171875); ~risset.(240, ~chord2, ~fibs, 0.05859375); ~risset.(240, ~chord2, ~fibs, 0.029296875); ~risset.(240, ~chord2, ~fibs, 0.0146484375); ~risset.(240, ~chord2, ~fibs, 0.00732421875); ~risset.(240, ~chord2, ~fibs, 0.003662109375); ~risset.(240, ~chord3, ~fibs, 1.875); ~risset.(240, ~chord3, ~fibs, 0.9375); ~risset.(240, ~chord3, ~fibs, 0.46875); ~risset.(240, ~chord3, ~fibs, 0.234375); ~risset.(240, ~chord3, ~fibs, 0.1171875); ~risset.(240, ~chord3, ~fibs, 0.05859375); ~risset.(240, ~chord3, ~fibs, 0.029296875); ~risset.(240, ~chord3, ~fibs, 0.0146484375); ~risset.(240, ~chord3, ~fibs, 0.00732421875); ~risset.(240, ~chord3, ~fibs, 0.003662109375); ~risset.(240, ~chord4, ~fibs, 1.875); ~risset.(240, ~chord4, ~fibs, 0.9375); ~risset.(240, ~chord4, ~fibs, 0.46875); ~risset.(240, ~chord4, ~fibs, 0.234375); ~risset.(240, ~chord4, ~fibs, 0.1171875); ~risset.(240, ~chord4, ~fibs, 0.05859375); ~risset.(240, ~chord4, ~fibs, 0.029296875); ~risset.(240, ~chord4, ~fibs, 0.0146484375); ~risset.(240, ~chord4, ~fibs, 0.00732421875); ~risset.(240, ~chord4, ~fibs, 0.003662109375);