1001010

Nikolaus Gradwohl2018-02-13T07:30:46+01:00

SuperCollider drumsample generator

Nikolaus Gradwohl2018-02-10T10:08:46+01:00

I noticed that my Volca Sample in my homestudio din't quite get the attantion and love it deserved so I desided to create a new sample pack for it. I wanted some fresh electronic samples so I wrote some SuperCollider scripts to create random drum Samples. I created a script for bassdrum, snare, hihats, clap, crash, tom and a metallic 'ding' sound - which I named 'Ding' because I could not come up with a more clever name. Each of the script generates 64 samples. I then chose 100 and organized them into sound banks and uploaded them to my Volca Sample.

Samples 00 to 19 are bass drums, 20 to 29 are clap samples, 30 to 39 is a crash, 40 to 49 is 'ding', 50 to 69 is closed and open hihats, 70 to 89 are snares and 90 to 99 are my tom samples. I'm not 100% satisfied by the ordering yet maybe I move the snare samples after the bassdrums and the hihats to the end of the list - the current ordering is created mainly for alphabetical reasons :-) but I really like the organisation in banks of 10.

To simplify things further I also created 10 empty patterns - the first one places bd-00 on slot 1, bd-10 on slot 2, sn-70 on slot 3, sn-80 on slot 4, ...

the second pattern places bd-01 on slot 1, bd-11 on slot 2, sn-71 on slot 3, sn-81 on slot 4, ... and so on. This way I can switch between the drumkits pretty fast. Since I mainly use my volca sample as a midi device, I usually don't need the patterns for anything else.

click here to listen to a track I made using this samples

If you want to create your own set of samples here are the supercollider scripts I used with a short description. If you create something nice with them please share a link in the comments.

Bassdrum

For the Bassdrum I combined a short noise burst with a bandpass filter sweep and a Sinewave with a linear pitch envelope.

SynthDef.new("bd", {
    arg  n=0.8, nl = 0.02, start=110, end=1, l1=0.1, l2=0.3, exp=1.7;
    var boom;
    e = pow(Line.ar(0.9,0,l2),exp);

    boom = BBandPass.ar(WhiteNoise.ar(),freq:Line.ar(100,10,nl))*Line.ar(1,0,nl)*n+
    SinOsc.ar(Line.ar(start, end, l1))*e;
    Out.ar(0,[boom,boom])

}).add;

{
    64.do{
        Synth.new("bd", ["n":rrand(0.8,0),"nl",rrand(0.03,0), "start",rrand(100.0,50.0),"end",rrand(100,10), "l1", rrand(0.1,0), "l2", rrand(0.8,0.1),"exp", rrand(1,4)]);
        1.6.wait;
    }
}.fork()
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 ...

purple blocks

Nikolaus Gradwohl2018-02-08T05:18:06+01:00

I made a new short blender animation - just for fun. I used a displace modifier on a subdivided cube and animated the texture using an empty as a control object. I moved, turned and scaled the empty for five frames and then paused for 20. I then used a remesh modifier to turn the noisy mess of a mesh back into a bunch of cubes.

I like the jumpy animation - maybe I use it in a music video some time.

you can download the blend file here

purple blocks

read more ...

roar

Nikolaus Gradwohl2018-02-02T05:51:42+01:00

ring segments

Nikolaus Gradwohl2018-02-01T08:02:20+01:00

I created new images I can hang on my livingroom walls using processing. This time I wrote a sketch, that creates circular shapes made of 64 line segments. Each segment can be shifted by a fixed offset if a certain random number is exceeded. I used this method to generate for concentric rings and added a keyPress method that saves the current frame as a png file and creates a new ring pattern.

I also added a little blur effect to create a subtle shadow effect. I generated a bunch of images selected 3 and printed them on an A3 printer

segments

read more ...

how to connect additional soundcards to your jack setup

Nikolaus Gradwohl2017-11-29T07:55:13+01:00

alsa_in

Many hardware synthesizer come with an USB port these days and some of them even connect as a soundcard, allowing you to route the audio from the synth directly to your daw without wasting an input on your soundcard. And sometimes you want to record something using an USB microphone or USB Guitar cable.

To connect such devices to my DAW via jack on linux I created a little startup script that runs every time I start Bitwig Studio to make sure all the external devices are connected. I use alsa_in - a command line tool that allows you to connect an additional alsa sound card. a2jack needs some parameters like the device name, sampling rate or buffer size to use and starts a process. Then it starts a process that listens to the alsa device and forwards the input to jack by connecting as a jack client application with some inputports. These ports can be configured as input routes in your daw like Bitwig or ardor - just like you would do with an input channel on your main sound-card.

To route audio from your daw to the output of an second sound you can use alsa_out

My music startup script connects the audio interface of my Yamaha MX61 and an usb-soundcard, that is connected to my Korg KaosPad Mini, so I can use it as an external effects processor in bitwig-studio

alsa_in -j "MX61" -d hw:CARD=MX49MX61,DEV=0 -r 44100 -p 256 &
alsa_in -j "FX" -d hw:CARD=Device,DEV=0 -r 44100 -p 256 &
alsa_out -j "FX" -d hw:CARD=Device,DEV=0 -r 44100 -p 512

You can get a list of the available alsa device names by running the command

aplay -L

Unfortunately the USB soundcard I use always selects the microphone input when it is plugged in or my computer restarts. To fix this I use the amixer command to change the capture channel to line and mute it - so I don' t generate feedback loops (I spent hours finding out where that distortion came from :-/)

amixer -D "hw:CARD=Device" cset numid=11 on # Line capture on
amixer -D "hw:CARD=Device" cset numid=5 off # Line mute

you can get a list of supported controls and their id by a running

amixer -D "hw:CARD=Device" controls

just replace "hw:CARD=Device" with the device identifier of your sound interface.

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 = Array.new(n,0);
    a = 0
    k.times do |i|
        res[a.to_i] = 1
        a += f
    end
    return res
end

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

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 ...

AnimationNodes2 Experiment - balls and sticks

Nikolaus Gradwohl2017-11-23T08:35:19+01:00

I finally managed to solve all the cython issues and install version 2 of the animation nodes addon on my linux machine, and rendered a first experiment with the new vectorized nodes - the nodes setup is much simpler than the loop version of 1.6 and i really like the new syntax.

you can download the blend file here

sticks and balls

hint: if you get a "cannot import name X" errors - try to delete the _pycache_ folder in ~/.config/blender/2.79/scripts/addon - this solved the problem for me

read more ...