> "The audio engine is built on a declarative audio graph (using `virtual-audio-graph`), inspired by React's virtual DOM, which makes managing the Web Audio API much cleaner. If you're building web based audio apps I highly recommend checking out this library.
"
when you have more and more interactions on the gui web audio api will become a problem, check out audioworklet.
2 small requests that (I think) would help with the UX: consider moving (or duplicating) the play button - maybe directly in the middle below the editor, or on that panel itself. It took me a few confusing seconds to realise where it was. Also, could you consider making each fourth (or first) column a very slightly lighter grey? So if I want my kick on 1, 3, 10 and 11 it's really easy to see where to click without counting?
One thing I'd find frustrating if using this when working on music: "When beat is playing, get new sample for drum plays as soon as it generates".
If "this sample is programmed to play in playing beat", then it'd be good to do a silent replace, or have the option to, so that you don't get a weird unquantized snare sound, for example. I'm finding it puts me off the generated sound more if I initially hear it in a context where it doesn't fit.
This takes me back to 2019 when me and my team won HackInOut, a hackathon held in Bangalore, India by building Rosaline, a generative drum machine, that took in lead melodies (guitar tracks, piano samples, etc) and generated a full fledged drum track.
Used GANs & a lot of weird hacky optimizations, can't even find the code for it anymore, but it was a great time :)
Thanks for building this. Really inspiring and great work.
ClojureScript is such an awesome secret weapon for building web apps. I started building a similar web audio looping app using borkdude's scittle version of ClojureScript. Only once the app had grown substantially, did I move on to proper ClojureScript. The cljs development experience is just awesome.
That background really captures the look of a dirty laptop display. I was actually taken aback at first, thinking that I must have somehow sneezed over my screen without realising!
Cool tool! I often play odd time signatures, e.g. I'm trying to program the drums for Rondo ala turk by Dave Brubeck (repeating 2-2-2-3 pattern). Can you tell me how I can do that?
I really like it, and the FX option is a really fun addition on top of where most people get to. One ask I'd have is for FX to stay "on" and duplicate what was put down for each new cell until it's turned off again? It's a tiny thing.
One thing I notice is that the generated beats are very alike. Yeah it makes sense to play snare on the 2 and the 4, and to have kicks always fall on the downbeat, but you'd get more creative grooves if you allow for some more variation there.
It could even be a slider that allows you to stray away from the common patterns.
Nice work! Nice that you also implemented an MPC-style swing. How do you generate samples? Are they also procedurally generated or are they chosen from a fixed set of samples?
I suppose you're not planning to release any sources for this...
Show HN: I made a generative online drum machine with ClojureScript
(dopeloop.ai)169 points by chr15m 17 hours ago | 47 comments
Comments
when you have more and more interactions on the gui web audio api will become a problem, check out audioworklet.
I am developing https://glicol.org/ and it has a js port on https://glicol.js.org/ a typical usecase is drum machine with very high time accuracy
2 small requests that (I think) would help with the UX: consider moving (or duplicating) the play button - maybe directly in the middle below the editor, or on that panel itself. It took me a few confusing seconds to realise where it was. Also, could you consider making each fourth (or first) column a very slightly lighter grey? So if I want my kick on 1, 3, 10 and 11 it's really easy to see where to click without counting?
To be clear, this is pure curiosity on my part as I love Clojure(Script) and am consistently missing it during my day job.
One thing I'd find frustrating if using this when working on music: "When beat is playing, get new sample for drum plays as soon as it generates".
If "this sample is programmed to play in playing beat", then it'd be good to do a silent replace, or have the option to, so that you don't get a weird unquantized snare sound, for example. I'm finding it puts me off the generated sound more if I initially hear it in a context where it doesn't fit.
Used GANs & a lot of weird hacky optimizations, can't even find the code for it anymore, but it was a great time :)
https://devfolio.co/projects/rosaline
This is all that's left of it
ClojureScript is such an awesome secret weapon for building web apps. I started building a similar web audio looping app using borkdude's scittle version of ClojureScript. Only once the app had grown substantially, did I move on to proper ClojureScript. The cljs development experience is just awesome.
One piece of feedback; I'd love an option to toggle background color of everything nth note. Makes it easier to place on beat.
It also includes a bunch of greek rhythms; try tsifteteli!
One thing I notice is that the generated beats are very alike. Yeah it makes sense to play snare on the 2 and the 4, and to have kicks always fall on the downbeat, but you'd get more creative grooves if you allow for some more variation there.
It could even be a slider that allows you to stray away from the common patterns.
Seems like a cool, simple app