Sonic Pi beatslicing livecoding session

Nikolaus Gradwohl2018-06-23T17:47:10+02:00

this is the recording of a SonicPi Livecoding session made from 2 sample loops sliced and rearranged in different ways

for the drum sounds I used a drumloop sliced it into 32 peaces each 1% the length of the original loop. Each click is chosen at random from the ring created by the line command.

n = 32
l = 0.01
s =  line(0, 1, steps: n+1).choose
f = [1,s + l].min

sample "drumloop.wav", beat_stretch: 16, start: s, finish: f

The samples are triggered at a given 16th slot with a changeable probability.

the e-piano loop is played back at different speeds chosen from an array using [1,-1,0.5, -0.5, 0.75, -0.75].choose and placed at a random position in the stereofield using a :pan fx

Sonic Pi Beatslicing session

read more ...

New Song - A Target you can't see

Nikolaus Gradwohl2018-06-19T06:49:45+02:00

a repeating yet ever changing 10 note pattern creating a world for the melody to live in

A Target you can't see

read more ...

Welcome Lil Erebus

Nikolaus Gradwohl2018-06-11T19:33:30+02:00

I build the Erebus Lil DIY kit by dreadbox this weekend - after 6 hours of soldering estimated 100000 components on very very tiny solder pads on saturday, I spent 8 hours on sunday searching for the one cold solder joint :-/

But everything is working fine now and here is a first short jam with my new synth - enjoy!

Lil Erebus

read more ...

New Song - Turn into a Tune

Nikolaus Gradwohl2018-05-22T07:01:38+02:00

A song starting as a simple arpeggio slowly evolving into a tune

Recorded and Mixed in Bitwig Studio drums are from a volca beats and sample, pads from streichfett and blofeld. The synth sound are from bitwigs polysynth and a 0-Coast


read more ...

creating midifiles using ruby

Nikolaus Gradwohl2018-03-26T07:21:37+02:00

I have been experimenting with randomly generated drum patterns lately and found out pretty soon, that a totally random generated pattern isn't exacly what I was after, I wanted a pattern generator where I can specify propabilities for each drum hit to occure. So I wrote a ruby script using midilib that generates midi files containing patterns, which I can then import into bitwig and loop and arrange for my tracks.


Midilib is a nifty little ruby library that allows you to read or write midifiles. For my purpose I used the library to write the files.

the library can be installed using gem

gem install midilib

A midifile contains sequences, sequences contain tracks and tracks contain midi events. These events can be any midi event like noteOn, noteOf, controlChange, programChange, ... For each midiEvent in a track the delta time to the last event is stored.

in midi lib you can specify a time_from_start value and lets midilib recalculate the delta values before saving the track.

So here is a ruby script that generates a hihat pattern (channel 1, midi note 44 in my kit), where the notes are placed on a 16th grid with a random chance between 20% and 50%.

require 'midilib/sequence'
require 'midilib/consts'
include MIDI

seq =

track =
seq.tracks << track << <<, 'Test Pattern')

track =
seq.tracks << track = 'Loop1'

s = 0
l = seq.note_to_delta('16th')
e = Random.rand(0.2..0.5)

16.times do
    if ( Random.rand < e ) then
    on =,44,127,0)
    on.time_from_start = s
    off =,44,127,0)
    off.time_from_start = s + l << on << off
s += l

track.recalc_delta_from_times'pattern3.mid', 'wb') { |file| seq.write(file) }
read more ...

new Song Ice5

Nikolaus Gradwohl2018-03-01T05:20:02+01:00

An ambient electronic 5/4 track inspired by the -10°C we currently have outside


read more ...

processing sound visualizer

Nikolaus Gradwohl2018-02-14T20:27:41+01:00

I made a visualizer for my track Walk in the rain using processing. I used a stereo autocorrelation function to generate the line drawing using the minim framework and added a glsl shader to create the lens distortion effect.

Processing sound Visualizer

read more ...

Volca Sample SuperCollider Drum Set

Nikolaus Gradwohl2018-02-09T21:00:59+01:00

I generated some random drum samples using supercollider and selected 100 samples as my new main drum kit for the volca sample. This is the first track I used my new drum sounds one. The volca sample gets a little help from the volca beats kick drum. The Bass sound is from the MiniNova, The synth track is from the Blofeld.

Volca Sample Supercollider Drum Set

read more ...

new Track: Glipse of worlds that might be

Nikolaus Gradwohl2017-11-28T07:13:51+01:00

a mix of analog and digital synths, plugins, samples, passion, fragments of half remembered dreams and an arpeggiator.

and yes - I'm in a slightly wired mood today

and also yes - this is the blender default cube - with beveled edges, floating slightly above a plane with a diffuse shader and a sun light with a size of 0.8 rendered in cycles

glimpse of worlds that might be

read more ...

Calculating Euclidean Rhythmns using the Bresenham Algorithm

Nikolaus Gradwohl2017-11-24T06:43:52+01:00

Recently I started playing with euclidean rhythms and implemented the bjorklund algorithm shown in the paper by Godfired Toussaint in ruby. The implementation isn't really rocket science (actually it's ring accelerator science :-)) but it uses recursive function calls, two arrays, multiple stages, ... and I had the feeling that this is far more complicated than it needs to be. After reading several posts, blogs and papers about the implementations of the algorithm I read somewhere that the algorithm produces the same result as the bresenham algorithm - at first I ignored the sentence and unfortunately I have no idea anymore where I read it but today I implemented a simple version of it an the results I get are the same as my recursive version - or rotations, which is fine because you usually loop over the sequences and are free to choose a starting point - so in case anyone is interested here is my bresenhamish method for calculating euclidean rhythms in ruby - shouldn't be too complicated to port it to different languages

def eucledean(k,n)
    f = 1.0*n/k
    res =,0);
    a = 0
    k.times do |i|
        res[a.to_i] = 1
        a += f
    return res

(1..8).each do |i|
print eucledian(i,8)
print "\n"

and this are the results I get for the 8 possible rhythms with 8 steps

[1, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 1, 0, 0, 0]
[1, 0, 1, 0, 0, 1, 0, 0]
[1, 0, 1, 0, 1, 0, 1, 0]
[1, 1, 0, 1, 1, 0, 1, 0]
[1, 1, 1, 0, 1, 1, 1, 0]
[1, 1, 1, 1, 1, 1, 1, 0]
[1, 1, 1, 1, 1, 1, 1, 1]
read more ...