A further continuation of the rhythmic idea used in Episodes 7 and 8, this time implemented as a sctweet.
mp3 file: In the Mountains and in the Tombs (sctweet 20150210) (3.1 MB)
Full supercollider source: play{l=LFSaw;a=Decay.ar(Impulse.ar(1/8),0.2,l.ar(l.kr(2/25,0,88,176)));[16,10,4,3].do({|t|a=CombN.ar(a,6,t/8+[3,4],20,1,a)});a}//#sctweets
(138 characters)
I managed to create an even shorter tweet, which differs only in the amplitude envelope of the notes. I didn't think it sounded quite as pretty, though:
play{l=LFSaw;a=HPF.ar(l.ar(1/8),8,l.ar(l.kr(2/25,0,88,176)));[16,10,4,3].do{|d|a=CombN.ar(a,6,d/8+[3,4],24,1,a)};a}// #sc140 #supercollider
The notes of this composition follow a cycle of 25 pitches, taking 3 minutes and 20 seconds to perform a single repeat. Each note is echoed in a complex rhythm, creating the arpeggios you hear. This recording follows one complete cycle of pitches.
Here's an expanded version of the tweet that explains what's going on:
(
{
var pitch=LFSaw.kr(2/25,0,88,176);
// the pitch rises from 88Hz to 264Hz (an octave and a fifth) in 12.5 seconds
var tone=LFSaw.ar(pitch);
// generate a sawtooth wave following the pitch
var env=Decay.ar(Impulse.ar(1/8),0.2);
// 0.2 second percussive envelope that repeats once every 8 seconds
var note=env*tone;
/* the original tweet performs the same multiplication in the
* mul: parameter of the Decay ugen
*
* this combination produces the 25 note cycle. The notes
* are harmonically related because the pitch rises in a linear
* fashion. If the pitch doesn't wrap around before the next note,
* it will be 32/25 * 88Hz higher. If it does wrap around, it
* will be 18/25 * 88Hz lower. The total set of all notes played
* consists of harmonic partials 13-37 of a fundamental frequency
* of 7.04 Hz. (41 cents above A-6)
*/
var delaytimes=[16,10,4,3];
// delaytimes measured in 16th notes at 120bpm
var out = note;
// chain all the delays:
delaytimes.do{|delay|
var delayinseconds=delay/8;
var stereodelay=[3,4];
// left channel delays an additional 6 beats at 120bpm,
// right channel delays an additional 8 beats
out=CombN.ar(out,6,delayinseconds+stereodelay,24,1,out);
};
// uncomment this line to see what frequencies are being used:
// Poll.ar(Impulse.ar(1/8),ZeroCrossing.ar(tone),"freq");
out;
}.play
)
The multiple long delay times consume quite a bit of memory. To run these in supercollider, you may have to increase the server's memory capacity. This worked for me (run before booting the server):
s.options.memSize=(2**15)
As usual, the title of this track is chosen from a randomly selected Bible passage. By total coincidence, the song Legion by Severed Heads refers to the same passage.