Top
Best
New

Posted by chr15m 9/12/2025

Show HN: I made a generative online drum machine with ClojureScript(dopeloop.ai)
After two years of development, I'm super excited to release Beat Maker! This is my take on what I hope is the best free, web-based drum machine.

My goal was to build something that was not only fun and easy to use for beginners but also powerful enough for serious producers. I did extensive research on existing drum machines, analyzed their UX, and tried to build something that adds something new.

It's a nearly 100% client-side app, written in ClojureScript, and is a PWA so you can install it to your home screen for an app-like experience.

Besides the standard grid editor, Beat Maker has some unique features that I think HN readers might find interesting:

- Procedural sample generation. One annoying thing about writing beats is searching through folders full of samples. I wanted to improve this and so I added the ability to generate new samples with a single click, giving you an infinite supply of unique drum samples. * Generative beat creation. If you're looking for inspiration, Beat Maker can generate entire patterns for you as a starting point. You can then edit and tweak the beat to your liking. Great for solving the "blank canvas" problem and giving you something good to start from. * Advanced export options. This is where it really shines for producers. You can export your work as: * A standard WAV loop * Individual stems (ZIP) * A MIDI file * A ZIP file of all your samples as WAVs * A SoundFont (.sf2) drum kit from your generated samples * An Impulse Tracker (.it) file for use in trackers like Renoise, OpenMPT or a Polyend * Pocket Operator/Volca sync. It can output a sync signal on the left audio channel to sync with these hardware devices for perfect timing. * Per-Note FX. You can add effects like volume slides, repeats, and start volume changes to individual notes for more complex drum phrases incorporating flam and roll.

As an old school tracker guy, I'm particularly excited about the Impulse Tracker export mode. I was surprised to discover how many DAWs (including hardware like Polyend) can import this format. Of course, you can also pull up Impulse Tracker on DOSBox, or the more modern re-implementation, Schismtracker for that retro experience.

By the way, the beat generator feature is not trained on any artists or anything like that. It's an algorithm I built from scratch myself.

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.

I'd love for you to try it out and let me know what you think. Feedback (and the inevitable bug reports) most welcome! Thank you!

P.S. Also, here's a video summary: https://youtu.be/qVmEn9z3H24

202 points | 55 commentspage 2
monneyboi 9/12/2025|
Dope!

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.

weego 9/12/2025||
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.
chr15m 9/13/2025|
That's a good idea. Will investigate, thanks for the suggestion!
thw_9a83c 9/12/2025||
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...
s20n 9/12/2025||
I found some repositories related to this on OP's github page <https://github.com/chr15m?tab=repositories>

This is the repository for the webaudio functions <https://github.com/chr15m/cljs-dopeloop>

recursive 9/12/2025||
What is Mpc style swing? Does that mean you can push the swing beats all the way to the next time slice?
thw_9a83c 9/12/2025||
> What is Mpc style swing?

You can get an explanation directly from the MPC 3000 manual [0].

> Does that mean you can push the swing beats all the way to the next time slice?

At least the original MPC series couldn't move the note to the next time slice. The maximum setting was 75%. That made the first note of each pair of 1/8 or 1/16 notes three times the length of the second note.

[0]: <https://www.manualslib.com/manual/207365/Akai-Mpc-3000.html?...>

recursive 9/12/2025|||
Thanks.

That sounds like a very normal and unremarkable swing implementation, like I've used in every DAW and sequencer. But maybe MPC did it first, and I've been using MPC-like swing this whole time.

chr15m 9/13/2025|||
Beat Maker's maximum swing setting is 132% greater than the MPC. I'll add this to the marketing materials, thank you!
RigelKentaurus 9/12/2025||
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?
chr15m 9/13/2025|
Sorry, this drum machine cannot do 9/8 time.
ericyd 9/12/2025||
It's not very mobile friendly but on desktop it's a pleasure! The ability to generate waveforms feels pretty novel, well done.
chr15m 9/22/2025|
If you have any feedback about what is difficult/buggy on mobile I would love to know. It's a major goal for this to be usable on mobile. Do let me know if you have any suggestions.
dmje 9/12/2025||
Really great, very responsive, fun, like the fact you can download your work in lots of different formats. Ace!
raspasov 9/12/2025||
Very nice! ClojureScript rocks. Just curious, did you use any React for this, or is it vanilla HTML interop?
diggan 9/12/2025||
> view-source:https://dopeloop.ai/beat-maker/js/main.js

> CTRL+F "React"

> 93 matches

Somewhere there is a React lurking :)

Guessing it's via Reagent as it's also mentioned 8 times, and is a fairly traditional approach to frontend with ClojureScript.

chr15m 9/13/2025||
Thanks! Yes, it uses React via Reagent.
ratelimitsteve 9/12/2025||
already using this to practice randomized beats on my drum pad. this is dope, thank you.
chr15m 9/18/2025|
That's awesome! I never thought of this use case. Thank you for letting me know.
ratelimitsteve 9/18/2025||
I've been playing for a couple months now and I'm getting to a point where the basic 8 hat 4 bass 2 snare beat is coming naturally, but now I need to work on keeping each limb independent of all the others. The way your system does 8ths on the hat then randomizes the snare and bass helps me break out of that pattern, and being able to visualize the beats as loops is a lot easier for me than reading sheet music. I'm really having a lot of fun with this.
mclau157 9/12/2025||
Is this able to be used with Strudel the code-based beat maker?
chr15m 9/13/2025|
I suppose you could import the samples into Strudel?
nonethewiser 9/12/2025|
Pricing page could say what the features are

Seems like a cool, simple app

chr15m 9/13/2025|
Good point, thanks. I need to improve the pricing page and I will note this down for when I do.
More comments...