windter


spatio-temporal sound thoughts.

Till Bovermann (2011)

mono recording of the 8-channel piece


var amp = 0.1;

// intro White
SynthDef(\introWhite, {
  var pink, white, whiter, whiter2, crackle, out;

  crackle = {LPF.ar(Dust.ar(1000), 50, mul: 20)}!8;
  whiter = {
    HPF.ar(WhiteNoise.ar, XLine.kr(4000, 10000, 10), mul: XLine.kr(0.1, 10, 10))
  }!8;

  white = {WhiteNoise.ar}!8;
  pink = {PinkNoise.ar}!8;

  out = SelectX.ar(
    EnvGen.ar(Env([0, 3, 3, 0], [0.1, 9.8, 0.1])),
    [crackle, pink, white, whiter]
  ).tanh *
  EnvGen.ar(Env([0, 1, 1, 0], [0, 10, 0]), doneAction: 2) * amp;
  Out.ar(0, out)

}).add;

// White + shake
SynthDef(\whiteshake, {|lFreq=67|
  var pink, white, whiter, whiter2, crackle, out;

  crackle = {Crackle.ar(Line.kr(1, 2.1, 10))}!8;
  whiter = {
    HPF.ar(WhiteNoise.ar, Line.kr(4000, 16000, 10), mul: Line.kr(1, 5, 10))
    + RLPF.ar(Pulse.ar(Line.ar(1, 0.9, 10) * 25, Rand(0, 1)), 400, mul: 20)
    + RLPF.ar(Impulse.ar(Line.ar(1, 1.1, 10) * 50, Rand(0, 1)), 200, mul: 20)
    + RLPF.ar(Impulse.ar(Line.ar(1, 0.8746, 10) * 75, Rand(0, 1)), 100, mul: 20)
  }!8;

  whiter2 = {
    //HPF.ar(
      ClipNoise.ar
    //  , Line.kr(4000, 16000, 10)
    //  , mul: Line.kr(1, 100, 10))
  }!8;
  white = {WhiteNoise.ar}!8;
  pink = {PinkNoise.ar}!8;

  out = SelectX.ar(
    EnvGen.ar(Env([0, 1, 4, 4, 2, 1, 1, 3], [0.1, 0.1, 3.7, 0.1, 0.1, 2, 1])),
    [crackle, pink, white, whiter2, whiter]
  ).tanh *
  RLPF.ar(Pulse.ar(Line.ar(1, rrand(0.9, 1.1), 10) * 100, rrand(0.5, 1.0)), lFreq, rq: 0.01, mul: 20) *
  EnvGen.ar(Env([0, 1, 1, 0], [0, 10, 0]), doneAction: 2) * amp * 0.2;

  Out.ar(0, out.tanh)
}).add;

// Impulses
SynthDef(\impulses, {|freq = 5, i = 0, hFreq = 1000|
  var out = SplayAz.ar(
    8,
    ({|j| HPF.ar(Impulse.ar(freq, j/20), hFreq)}!20).scramble,
    EnvGen.ar(Env([0, 0, 0.1, 0.2, 0.5], [0.5, 2, 3, 4.5])),
    center: Line.ar(i.sign * 4, 0, 10) + (i/4)
  ).postln
   *
  EnvGen.ar(Env([0, 1, 1, 0], [0, 10, 0]), doneAction: 2) * amp * 40;
  Out.ar(0, out)
}).add;

thisThread.randSeed = [5651, 561, 51, 54, 54349857].choose.postln;

// karussel
SynthDef(\karussel, {|scaling = 0|
  var channels = #[0, 1, 2, 3, 4, 5, 6, 7];
  var allEight;
  var out;

  allEight = (12.collect{|i|
    var freq = (rrand(10, 40).degreeToKey([0, 3, 6, 9] + scaling) * LFPulse.kr(2).range(2, 1))  .midicps
     *  EnvGen.ar(Env([0.125, 1, 1, 0], [0.5, 8.5, 1]), doneAction: 2)
     * LFNoise1.ar(10).range(0.98, 1.02);
    var a, b;
    var out;
    var trig;

    trig = Impulse.ar(1, i/8);
    #a, b = Pan2.ar(
      SinOsc.ar(freq, 0, XLine.kr(10, 1, 10)).tanh * EnvGen.ar(Env.perc(0.001, rrand(0.1, 0.5)), gate: trig),
      EnvGen.ar(Env.perc(0, 1), gate: trig)
    );
    channels = channels.scramble;
    out = 0!8;
    out[channels.first] = a;
    out[channels.last] = b;
  }.sum + (Silent.ar!8))* 0.5;
  out = SplayAz.ar(8, allEight, Line.ar(0, 2, 5), center: Line.kr(16, 0, 10))
    * EnvGen.ar(Env([0, 1, 1, 0], [0, 10, 0]), doneAction: 2)  * amp * 10;
  Out.ar(0, out.postln)
}).add;

thisThread.randSeed = 54349857;

// Roundnround
SynthDef(\roundnround, {|scaling = 0|
  var in, pos, out;
  var freq = (({rrand(5, 20)}!5).degreeToKey([0, 3, 6, 9] + scaling))  .midicps
     * LFNoise1.ar(10).range(0.98, 1.02);

  in = SinOsc.ar(freq, Rand(0, pi), mul: Line.kr(10, 1, 5)).tanh;
  pos = {HPF.ar(
    WhiteNoise.ar.lag(
      Line.kr(0.05, 0, 9.5)
    ), Line.kr(50, 20000, 9))
    + rrand(0.0, 2)
  }!5
  + SinOsc.ar(0.01
    //XLine.kr(0.1, 1, 10).range(0, 2)
  );
  out = PanAz.ar(
    8,
    in,
    pos
  ).sum
   * EnvGen.ar(Env([0, 1, 1, 0], [0, 10, 0]), doneAction: 2) * amp * 2;
  Out.ar(0, out)
}).add;

// outro White
SynthDef(\outroWhite, {
  var pink, white, whiter, whiter2, crackle, monowhiter, polywhiter, out;

  crackle = {LPF.ar(Dust.ar(1000), 50, mul: 20)}!8;
  whiter = {
    HPF.ar(WhiteNoise.ar, XLine.kr(10000, 4000, 10), mul: XLine.kr(10, 0.5, 10))
  }!8;
  white = {WhiteNoise.ar}!8;
  pink = {PinkNoise.ar}!8;
  polywhiter = {
    HPF.ar(WhiteNoise.ar, 4000, mul: 0.5)
  }!8;
  monowhiter = (
    HPF.ar(WhiteNoise.ar, 4000, mul: 0.5)
  )!8;
  out = SelectX.ar(
    EnvGen.ar(Env([2, 5, 5, 2, 1, 0], [0.1, 9.8, 0.1, 0, 5])),
    [polywhiter, monowhiter, crackle, pink, white, whiter]
  ).tanh *
  EnvGen.ar(Env([0, 1, 1, 0], [0, 15, 5]), doneAction: 2) * amp;
  Out.ar(0, out)
}).add

The piece

{
var dt = 4.6;
dt.wait;

Synth(\introWhite);
10.wait;
dt.wait;

Synth(\impulses, [\freq, 12, \i, 0, \hFreq, 5000]);
12.wait;
[0, -2, 3, 0].do{|scale|
  [8, 12, 5, 10, 14, 16, 12].do{|freq, i|
    Synth(\impulses, [\freq, freq-scale, \i, i-scale, \hFreq, 5000]);
    1.wait
  };
  11.wait;
};
dt.wait;

[50, 67, 60, 50].do{|lfreq|
  Synth(\whiteshake, [\lfreq, lfreq]);
  11.5.wait;
};
dt.wait;

[0, -1, 3, 0].do{|scale|
  Synth(\karussel, [\scaling, scale]);
  11.wait;
};
dt.wait;

[0, -1, 3, 0].do{|scale|
  Synth(\roundnround, [\scaling, scale]);
  11.5.wait;
};
dt.wait;

Synth(\outroWhite);
}.fork