Stenography and Field Recordings


16 August 2017

From 17.7.2017 – 15.12.2017 I had the pleasure to be a resident at the Institut für Elektronische Musik und Akustik - IEM in Graz/Austria. Other posts on the IEM residency can be viewed here.


I made a BELA pin diagram.

Working on the BELA pin diagram

Field recording at Wasserkraftwerk

I recorded Source material at and around the water power plant in Feldkirchen a.d. Mur.

recording the water power plant at the Mur

Bug fixing and enhancing Steno

The language Steno turns out to be a wonderful way to explore massive sound synthesis based on simple base elements. Since it is quite young, it still has some bugs to be tracked and can also be enhanced with useful features. The majority of the last week, I explored the possibilities of the language, traced bugs and wrote little enhancements. Two of them are

  • Fixing nesting depth for synth elements:
t = Steno(2, true).push;

t.quelle(\a, {|in, ctls|
  SinOsc.ar(100 * ctls[\nestingDepth] + 200)
});

-- a(aa(aa))
// >> equivalent to
{Mix.ar(SinOsc.ar([100, 200, 200, 300, 300]))!2}.play
  • Introduction of negative feedback to Steno variables: A negative value inverts the signal on its feedback path. This makes it possible to implement quite a nice variability in feedback paths:
t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters 
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(\0, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(\0, \feedback, -0.9)
, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters 
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(\0, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(\0, \feedback, -0.9)
, \feedback, -0.9)
, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters 
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(\0, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(\0, \feedback, -0.9)
, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters 
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(\0, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(\0, \feedback, -0.9)
, \feedback, -0.9)
, \feedback, -0.9)
, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters 
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(\0, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(\0, \feedback, -0.9)
, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters 
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(\0, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(\0, \feedback, -0.9)
, \feedback, -0.9)
, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters 
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(\0, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(\0, \feedback, -0.9)
, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(t = Steno(2, true).push;

(
// a filter that creates an impulse
t.filter(\i, {|in, ctls|
  Dust2.ar(10) + DelayL.ar(in.reverse, 0.1, {Rand(0.001, 0.0005)}!2, 1)
});

// a variable
t.declareVariables([0]);
)

// swap between one and more filters 
-- 0i0
-- 0ii0

// the feedback parameter turns it into a Karplus-Strong model
t.set(\0, \feedback, 0.9)
// a negative value halves the ringing frequency
t.set(\0, \feedback, -0.9)
, \feedback, -0.9)
, \feedback, -0.9)
, \feedback, -0.9)