Monday, February 15, 2016

Episode 13: Meat in the House

an ambient classic-rock remix

mp3 file: Meat in the House (13.1M)
Supercollider source: eyeballsun-20150213-104730.scd

This was supposed to be Episode 12, but I never got around to posting it.

This track employs the same strategy used in Radio Eyeballsun Episode 9. I was inspired to revisit it when I learned about ASMR videos on YouTube, and they reminded me of the clipped little noises in some IDM tracks, and the chopped-up music of The Books.

The sample used this time was an entire song. This was actually a mistake but I think it goes with the spirit of the remix.

Monday, June 08, 2015

Episode 12: 100 Yards

A counting exercise.

mp3 file: 100 Yards (1:08 min)

sc source: paces.scd

My pace (i.e. two steps) is pretty close to 5 feet. That means in 6 paces I walk 10 yards. This morning I was walking at about 108 steps per minute and trying to count feet and yards along with my paces. I couldn't really do it, but I thought I could make a piece of music that did. Here the bass represents footsteps, the tinkly sound is feet and the bells represent yards.

Tuesday, February 10, 2015

Episode 11: In the Mountains and in the Tombs

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, this song refers to the same passage.

Episode 10: sctweet 20131004 (POKEY filter simulation)

I did this over a year ago, but I must have forgotten to post it here...

mp3 file: capmikee_sctweet_20131004.mp3 (4.1 MB)
Full Supercollider source: play{i=Impulse;f=Stepper.kr(i.kr(5),0,[57,66],75,LFClipNoise.kr(2,12,7)).midicps;SetResetFF.ar(i.ar(f),i.ar(f.rotate*2));}// #sctweets (134 characters)

Inspired by the "high-pass filter" on the Atari POKEY chip and rendered using Supercollider, this is not 8-bit music but 1-bit music. No post-processing of any kind was applied before mp3 conversion, not even to remove DC offset.

A note on the POKEY "high-pass filter." For years I was mystified by what this effect actually does. It clearly has beating or sweep effects not consistent with its description in "De Re Atari." After looking at some waveforms, doing some experiments and reading the sparse information available online about the chip, I concluded that what it is actually doing is a sort of pulse-width modulation. This synth, I believe, will perfectly emulate the effect in Supercollider:

(
{
    var inputFreq = MouseX.kr(100, 1000, warp:1);
    var cutoffFreq = MouseY.kr(100, 1000, warp:1);
    var in = Impulse.ar(inputFreq);
    var modulator = Impulse.ar(cutoffFreq) + Impulse.ar(inputFreq, phase:0.5);
    SetResetFF.ar(in, modulator);
}.scope
)

For the tweet, I have eliminated code that is only really relevant when the "cutoff" frequency is lower than the "input" frequency.

Twitter: @capmikee #sctweets #supercollider #sc140

Friday, March 04, 2011

Episode 9: Azmaveth

mp3 file: Azmaveth (12.3 MB)
Supercollider file: eyeballsun_110202.rtf (7.2 K)

This idea was kicking around for a long time, but I was never quite happy with the results. The other day I went back and just decided to do it anyway, and now I'm pretty happy with it.

It's a sort of fractal music thing, with the drum hits on the downbeat going into a pair of delays that play back at varying speeds: double rate, normal rate, half rate, one-third rate, zero rate and backwards one-third rate. Some interesting glitches appear at zero rate, which are the cause of the buzzy tones.

This is an sctweet I did over a year ago on the same basic idea:

play{t=Impulse.ar(1/2);d=TIRand;a=Ringz.ar(t,70)-DelayC.ar(LocalIn.ar(2),5,{Slew.ar(d.ar(2,5,t),d.ar(1,3,t)/2)}!2);LocalOut.ar(a);a}

Tuesday, August 25, 2009

Episode 8: Conviction of Things Not Seen

MP3 file: Conviction of Things Not Seen (13 MB)
Supercollider file: eyeballsun_090824_1.rtf (4K)

This is the last thing I was working on before my computer died in early 2007. I've got a new computer now, powerful enough to run supercollider at last. I was almost finished back then, so I only did a few tweaks to this before recording it.

"Things Not Seen" has the same kind of setup as "Our Lord Sprang Out," with a simple blip on the downbeat feeding a long chain of rhythmic delays. Where Episode 7 used feedback synthesis (resonators, filters, and ring modulator), Episode 8 uses a looping sample of cabaret music. There's vocals, drums, piano, accordion and wind instruments in there.

Thursday, January 15, 2009

Episode 7: Our Lord Sprang Out

mp3 file: Our Lord Sprang Out (18M)
MacCSound file: eyeballsun_081031_01.csd (21K)

I started this way back in October, and I've been working on it about 15 minutes per week ever since then.

You still can't dance to it.