Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Euclidean Drum Machine (groovemechanics.com)
77 points by marcw on Nov 6, 2014 | hide | past | favorite | 23 comments


My patch...

var patch = [ {steps:11,pulses:4,offset:0}, {steps:7,pulses:1,offset:8}, {steps:5,pulses:2,offset:0}, {steps:3,pulses:1,offset:0}, {steps:1,pulses:16,offset:0}, ]; patch.forEach(function(hit,index){ index = index + 1; $('.space-'+index).val(hit.steps).trigger('change'); $('.fill-'+index).val(hit.pulses).trigger('change'); $('.offset-'+index).val(hit.offset).trigger('change'); });

just drop that into your F12 tools' watch window and we can share configs/patches


Double-bass metal

var patch = [ {steps:11,pulses:13,offset:2}, {steps:8,pulses:2,offset:6}, {steps:5,pulses:7,offset:4}, {steps:1,pulses:3,offset:1}, {steps:15,pulses:8,offset:8}, ]; patch.forEach(function(hit,index){ index = index + 1; $('.space-'+index).val(hit.steps).trigger('change'); $('.pulses-'+index).val(hit.pulses).trigger('change'); $('.offset-'+index).val(hit.offset).trigger('change'); });


Could you post a screenshot of how you did this? My browser dev fu is weak.


I'm fascinated by this concept and I've even had some ideas about making something similar, though I haven't worked them out

I'd love to look at the source code for this.


There's a popular paper on the technique by Godfried Toussaint that explores it in depth: http://cgm.cs.mcgill.ca/~godfried/publications/banff.pdf


He has a bunch of interesting material and a book called The Geometry of Musical Rhythm. Being a CS prof, though, he has the intensely annoying habit of counting everything from zero. Musicians don't do this, they count from 1 (like everyone else except programmers), and so all his diagrams, notation etc. have to been mentally shifted by one step every time you reach for an instrument or talk to another musician.

I personally think that counting from zero is a really harmful habit. I understand how it originated and of course switching to counting from 1 would involve all sorts of kludges and result in all sorts of bugs. But it strikes me as a classic case of abstraction gone wrong, as 'the nth step' is going to mean entirely different things in the problem and the software domain.


The paper "The Distance Geometry of Music" by Demain et al. might also be of interest: http://erikdemaine.org/papers/DeepRhythms_CGTA/paper.pdf



The top level site (http://www.groovemechanics.com/) has some other cool instruments like a virtual analog sequencer and synthesizer. It would be awesome to be able to use multiple instruments at once in an integrated session - who doesn't want to be a JS-plug-in one-man-band?


Warning for all those with headphones on:

If you navigate to a different tab, and then come back to groovemechanics.com, the sound pops in VERY LOUDLY...it was painful and a bit scary to my eardrums.

Other than that, though, this is really cool!


I did not heed this warning. It is VERY LOUD! Heart attack loud :)


Holy coolness, can you make a version that runs in node-webkit so I can hook it up to ableton and other DAWs via OSC? That would be 100% groovy. Do you mind if i do it myself some time?


Thanks! Yeah, I plan to open-source the project. So of course that would be great to port it node-webkit.


Ooo a MAX midi out plug-in that could fire off notes in a drum rack


Suggestion: a random button.


(function(){ for(var i=1;i<6;i++){ $('.space-'+i).val(Math.floor((Math.random() * 16) + 1)).trigger('change'); $('.fill-'+i).val(Math.floor((Math.random() * 16) + 1)).trigger('change'); $('.offset-'+i).val(Math.floor((Math.random() * 8) + 1)).trigger('change'); } })()


Suggestion. Update the url hash with the settings so you can share links.


I don't understand why and how it periodically resets.


its an algorithm that's been popular in music programming the past several years. there are a bunch of implementations of it.

its a method for evenly distributing x pulses along a grid of y steps.

4 / 16 is house kick 5 / 16 is a dancehall beat

start by setting all steps to 16 (the grid size), offset to 0 and vary the pulse setting and you will hear how they are distributed along the steps.

good simple explanation with python implementation:

https://github.com/brianhouse/bjorklund

javascript:

http://blog.fader.co.uk/post/11519018856/bjorklund-algorithm...

I usually call it bjorklund.

I once used it to evenly distribute promoted content across slots on a website.


Are you referring to the adjustable reset counter in the bottom right (which by default resets every 32 steps)? I wish the option were available to disable it and simply have the rhythm reset at its natural period. Alas...


If the least common multiple of two elements is high, the rhythm would have a very long period, which doesn't sound very well. Three elements of periods 16,9 and 7 would have a period of 1008 steps, which at a tempo of 100 would take 10 seconds to reset. That's not a rhythm, that's a tune.


I actually thought it would be interesting to do a tune along those lines.

Have a quartet where each one is playing something with a different time signature. Hellish to coordinate, but could be interesting at the same time, as instruments wander in and out of sync with each other. Chord progressions forming with two and three instruments while the others are doing something else.


That it doesn't sound well is a very subjective notion. Polyrhythm is quite common in some types of music, and a staple of traditional music in many places outside europe. In western music you can usually find it art music, film soundtracks, jazz, IDM, progressive rock... With well placed accents and syncopation I don't think it's that bothersome to the untrained ear even.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: