• chaosprint a day ago

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

    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

    • chr15m 9 hours ago

      I don't like creating a lot of audio nodes on the fly for that reason. Beat Maker re-renders the audio to a buffer any time a value is changed. The audio engine is very efficient, literally playing one static buffer on loop. For the browser/OS this is basically memcpy, which is cheap, and does not take place on the GUI thread.

    • iamben a day ago

      This is great fun, congrats!

      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?

      • mockingloris 13 hours ago

        > Also, could you consider making each fourth (or first) column a very slightly lighter grey

        This could be a component logic; a row of drop downs for customizing the UI and a good examples are color and grid count. This could even be a toml/json config file that can be imported/exported.

        My own addition is ability to import samples from my own device.

        • chr15m 9 hours ago

          Importing samples is on my TODO list. Thank you for the feedback!

        • chr15m 9 hours ago

          Great ideas, thank you. I will triage these suggestions into the issue tracker. Many thanks!

        • dpoljak a day ago

          Really cool! How come you've chosen ClojureScript, and did you regret that choice in the 2 years you've been working on this?

          To be clear, this is pure curiosity on my part as I love Clojure(Script) and am consistently missing it during my day job.

          • chr15m 9 hours ago

            No regrets. As a solo dev I can use whatever I want and I use ClojureScript for almost all projects. I've been writing code for decades, used dozens of languages, and nothing comes even close to the DX affordances of cljs. It's an absolute joy.

            • raspasov a day ago

              I think the question is for other projects: How come you've not chosen ClojureScript? ;)

            • gabriel666smith 20 hours ago

              Love this!

              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.

              • chr15m 9 hours ago

                That's a good point. Will fix, thanks.

              • h4ch1 a day ago

                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 :)

                https://devfolio.co/projects/rosaline

                This is all that's left of it

                • chr15m 9 hours ago

                  Looks cool! It's a much more difficult problem than it looks - great that you got something working.

                • marksholms 20 hours ago

                  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.

                  • chr15m 9 hours ago

                    Sounds like a fun project! I also love that you can start out lightweight in Scittle and then switch to compiled cljs fairly seamlessly if your idea takes off. Such a nice dev experience!

                  • WesleyJohnson 18 hours ago

                    Very cool and quite fun. I love that you used Clojurescript. I played with it years ago and have been meaning to get back to it.

                    One piece of feedback; I'd love an option to toggle background color of everything nth note. Makes it easier to place on beat.

                    • chr15m 9 hours ago

                      Will add this, thanks for the suggestion!

                    • viccy-kobuletti 21 hours ago

                      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!

                      • weego 19 hours ago

                        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 hours ago

                          That's a good idea. Will investigate, thanks for the suggestion!

                        • ericyd 12 hours ago

                          It's not very mobile friendly but on desktop it's a pleasure! The ability to generate waveforms feels pretty novel, well done.

                          • RigelKentaurus 16 hours ago

                            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 hours ago

                              Sorry, this drum machine cannot do 9/8 time.

                            • amelius a day ago

                              Thanks for making this a web app, and not some app that only runs on half of the phones/tablets out there.

                              • chr15m 9 hours ago

                                I'm all in on web apps! The browser is an incredible runtime. I do not think I will ever touch native code again.

                              • monneyboi a day ago

                                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.

                                • spapas82 21 hours ago

                                  I had also build a similar (non polished) app using js: https://boombox-agw.pages.dev/

                                  It also includes a bunch of greek rhythms; try tsifteteli!

                                  • chr15m 9 hours ago

                                    Very cool! Love greek music, ancient and new.

                                  • thw_9a83c a day ago

                                    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 18 hours ago

                                      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 16 hours ago

                                        What is Mpc style swing? Does that mean you can push the swing beats all the way to the next time slice?

                                        • thw_9a83c 14 hours ago

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

                                          • chr15m 9 hours ago

                                            Beat Maker's maximum swing setting is 132% greater than the MPC. I'll add this to the marketing materials, thank you!

                                            • recursive 14 hours ago

                                              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.

                                        • dmje 20 hours ago

                                          Really great, very responsive, fun, like the fact you can download your work in lots of different formats. Ace!

                                          • raspasov a day ago

                                            Very nice! ClojureScript rocks. Just curious, did you use any React for this, or is it vanilla HTML interop?

                                            • diggan a day ago

                                              > 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 hours ago

                                                Thanks! Yes, it uses React via Reagent.

                                              • mclau157 21 hours ago

                                                Is this able to be used with Strudel the code-based beat maker?

                                                • chr15m 9 hours ago

                                                  I suppose you could import the samples into Strudel?

                                                • nonethewiser 21 hours ago

                                                  Pricing page could say what the features are

                                                  Seems like a cool, simple app

                                                  • chr15m 9 hours ago

                                                    Good point, thanks. I need to improve the pricing page and I will note this down for when I do.

                                                  • asimpletune 21 hours ago

                                                    This is wonderful work. Thanks for sharing.

                                                    • sakrist a day ago

                                                      awesome tool! would be more usable to scroll horizontally as one page and ability to add verticals one at a time.

                                                      • phrygian a day ago

                                                        very nice, enjoy listening to the beats. also good to see something come out of Clojure land after a while

                                                        • hdb2 a day ago

                                                          this is really great, I like it!

                                                          • ratelimitsteve 19 hours ago

                                                            already using this to practice randomized beats on my drum pad. this is dope, thank you.