[{"data":1,"prerenderedAt":404},["ShallowReactive",2],{"project-45220069":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":34,"aspects":35,"strip":44,"post_text":46,"what":47,"said":92,"maker_in_thread":215,"shape":227,"grid":232,"attempts":368,"same_week":369,"maker_shows":342,"maker_hidden":396,"reader_version":397,"card":398},"45220069","Beat Maker","A generative online drum machine with ClojureScript","title","Show HN: I made a generative online drum machine with ClojureScript","https:\u002F\u002Fdopeloop.ai\u002Fbeat-maker\u002F","dopeloop.ai","chr15m",1757666655,2025,202,55,317,3837,9,"notable","creative","drum machine","web_app",[21,24,25,26,27],"beat maker","generative beats","web audio","clojurescript","loved",0.272,{"positive":31,"neutral":32,"mixed":33,"critical":33},10,16,1,28,{"performance":36,"design":38,"execution":39,"idea":40,"docs":42,"pricing":43},{"positive":37,"critical":37},0,{"positive":37,"critical":37},{"positive":37,"critical":37},{"positive":41,"critical":33},3,{"positive":37,"critical":37},{"positive":37,"critical":37},[41,37,41,41,41,37,37,41,37,37,41,37,45,45,41,37,37,37,45,37,33,45,41,41,37,37,41,37,41,45,41,37,45,37,45,37,41,45,41,45],5,"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.\n\nMy 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.\n\nIt'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.\n\nBesides the standard grid editor, Beat Maker has s",{"problem":48,"audience":54,"pricing":58,"motivation":62,"time_to_build":66,"stack":70,"openness":89,"stage":90,"team_size":91},{"value":49,"source":50,"evidence":51},"Searching folders for drum samples and blank-canvas beat starting","maker",[52],{"id":53},"post",{"value":55,"source":50,"evidence":56},"Beginners and serious producers making beats",[57],{"id":53},{"value":59,"source":50,"evidence":60},"Free",[61],{"id":53},{"value":63,"source":50,"evidence":64},"Build the best free web-based drum machine with fun UX and producer power",[65],{"id":53},{"value":67,"source":50,"evidence":68},"Two years of development",[69],{"id":53},[71,75,81,85],{"value":72,"source":50,"evidence":73},"ClojureScript",[74],{"id":53},{"value":76,"source":50,"evidence":77},"Reagent (React)",[78],{"id":79,"by":11,"text":80},"45228794","Thanks! Yes, it uses React via Reagent.",{"value":82,"source":50,"evidence":83},"Web Audio API",[84],{"id":53},{"value":86,"source":50,"evidence":87},"virtual-audio-graph",[88],{"id":53},"open_source","launched","solo",{"praise":93,"objections":132,"requests":154,"questions":184,"alternatives":206},[94,110,114,121],{"value":95,"source":96,"evidence":97},"Fun and responsive drum machine","commenter",[98,102,106],{"id":99,"by":100,"text":101},"45222846","dmje","Really great, very responsive, fun, like the fact you can download your work in lots of different formats. Ace!",{"id":103,"by":104,"text":105},"45221837","hdb2","this is really great, I like it!",{"id":107,"by":108,"text":109},"45221871","asimpletune","This is wonderful work. Thanks for sharing.",{"value":111,"source":96,"evidence":112},"Export formats are useful",[113],{"id":99,"by":100,"text":101},{"value":115,"source":96,"evidence":116},"Web app works well, not native-only",[117],{"id":118,"by":119,"text":120},"45221370","amelius","Thanks for making this a web app, and not some app that only runs on half of the phones\u002Ftablets out there.",{"value":122,"source":96,"evidence":123},"ClojureScript choice praised",[124,128],{"id":125,"by":126,"text":127},"45222501","marksholms","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…",{"id":129,"by":130,"text":131},"45223805","WesleyJohnson","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…",[133,140,147],{"value":134,"source":96,"evidence":135},"Generated beats feel too similar",[136],{"id":137,"by":138,"text":139},"45220688","monneyboi","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…",{"value":141,"source":96,"evidence":142},"Not very mobile friendly",[143],{"id":144,"by":145,"text":146},"45227586","ericyd","It's not very mobile friendly but on desktop it's a pleasure! The ability to generate waveforms feels pretty novel, well done.",{"value":148,"source":96,"evidence":149},"Generated samples swap in mid-playback",[150],{"id":151,"by":152,"text":153},"45222621","gabriel666smith","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…",[155,162,170,177],{"value":156,"source":96,"evidence":157},"Import own samples",[158],{"id":159,"by":160,"text":161},"45226927","mockingloris","> 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…",{"value":163,"source":96,"evidence":164},"Highlight every nth column for grid",[165,169],{"id":166,"by":167,"text":168},"45220666","iamben","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…",{"id":129,"by":130,"text":131},{"value":171,"source":96,"evidence":172},"FX that stays on across cells",[173],{"id":174,"by":175,"text":176},"45223711","weego","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…",{"value":178,"source":96,"evidence":179},"Horizontal scrolling and adding bars one at a time",[180],{"id":181,"by":182,"text":183},"45221009","sakrist","awesome tool! would be more usable to scroll horizontally as one page and ability to add verticals one at a time.",[185,192,199],{"value":186,"source":96,"evidence":187},"How samples are generated",[188],{"id":189,"by":190,"text":191},"45220497","thw_9a83c","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…",{"value":193,"source":96,"evidence":194},"Support for odd time signatures",[195],{"id":196,"by":197,"text":198},"45225543","RigelKentaurus","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?",{"value":200,"source":96,"evidence":201},"Use with Strudel",[202],{"id":203,"by":204,"text":205},"45222148","mclau157","Is this able to be used with Strudel the code-based beat maker?",[207,211],{"value":208,"source":96,"evidence":209},"Strudel",[210],{"id":203,"by":204,"text":205},{"value":212,"source":50,"evidence":213},"Impulse Tracker, Renoise, OpenMPT, Schismtracker",[214],{"id":53},{"comments":216,"answered":18,"key":217},21,[218,221,224],{"id":219,"text":220},"45228737","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…",{"id":222,"text":223},"45244235","The algorithm in Beat Maker bypasses that issue completely by rendering the webaudio graph to a static buffer on every change.",{"id":225,"text":226},"45228740","Importing samples is on my TODO list. Thank you for the feedback!",{"commenters":228,"max_depth":229,"maker_replies":216,"first_comment_mins":230,"lifespan_hours":231},30,4,71,282,[233,237,239,242,243,245,246,248,250,252,257,261,263,267,270,272,274,277,279,281,283,285,287,291,293,297,298,300,302,305,308,310,314,317,319,321,323,325,327,330,332,334,336,339,340,344,346,348,350,352,357,359,361,362,366],[234,37,41,235,236,37],"45221137","maker\u002Fneutral\u002Fperformance","chaosprint",[219,37,37,238,11,33],"project\u002Fneutral\u002Fperformance",[240,37,41,238,241,37],"45238264","anonymous344",[222,37,37,238,11,33],[166,33,41,244,167,37],"project\u002Fneutral\u002Fdesign",[159,33,41,244,160,37],[225,33,37,247,11,33],"project\u002Fneutral\u002Fnone",[249,33,37,244,11,33],"45228744",[251,33,37,244,11,33],"45355754",[253,254,41,255,256,37],"45220745",2,"maker\u002Fneutral\u002Fnone","dpoljak",[258,254,37,259,260,37],"45220895","commenter\u002Fneutral\u002Fnone","raspasov",[262,254,37,255,11,33],"45228753",[264,41,37,265,266,37],"45221506","other\u002Fneutral\u002Fidea","h4ch1",[268,41,37,269,11,33],"45228756","other\u002Fneutral\u002Fnone",[151,229,41,271,152,37],"project\u002Fneutral\u002Fexecution",[273,229,37,271,11,33],"45228745",[275,229,45,276,152,37],"45245244","project\u002Fpositive\u002Fnone",[125,45,45,278,126,37],"maker\u002Fpositive\u002Fnone",[280,45,37,259,11,33],"45228772",[129,282,41,244,130,37],6,[284,282,37,244,11,33],"45228758",[286,282,37,244,11,33],"45355760",[288,289,37,265,290,37],"45222115",7,"spapas82",[292,289,37,269,11,33],"45228785",[294,295,41,244,296,37],"45222436",8,"viccy-kobuletti",[118,18,45,276,119,37],[299,18,37,255,11,33],"45228783",[137,31,33,301,138,37],"project\u002Fcritical\u002Fidea",[174,303,45,304,175,37],11,"project\u002Fpositive\u002Fidea",[306,303,37,307,11,33],"45228777","project\u002Fneutral\u002Fidea",[189,309,41,307,190,37],12,[311,309,41,312,313,37],"45223863","project\u002Fneutral\u002Fdocs","s20n",[315,309,41,247,316,37],"45225244","recursive",[318,309,37,269,190,37],"45226345",[320,309,37,259,316,37],"45226454",[322,309,37,247,11,33],"45228790",[196,324,41,307,197,37],13,[326,324,37,307,11,33],"45228775",[144,328,41,329,145,37],14,"project\u002Fmixed\u002Fdesign",[331,328,37,255,11,33],"45330397",[99,333,45,276,100,37],15,[335,32,41,244,260,37],"45220874",[337,32,37,269,338,37],"45221011","diggan",[79,32,37,247,11,33],[341,342,45,304,343,37],"45223199",17,"ratelimitsteve",[345,342,37,255,11,33],"45288564",[347,342,45,304,343,37],"45293246",[203,349,41,307,204,37],18,[351,349,37,307,11,33],"45228797",[353,354,41,355,356,37],"45222468",19,"project\u002Fneutral\u002Fpricing","nonethewiser",[358,354,37,355,11,33],"45228799",[107,360,45,276,108,37],20,[181,216,41,244,182,37],[363,364,45,276,365,37],"45221034",22,"phrygian",[103,367,45,276,104,37],23,[],[370,374,379,383,387,392],{"id":371,"name":372,"points":373,"category":20},"45231378","AnyCrap",1184,{"id":375,"name":376,"points":377,"category":378},"45212535","Asxiv.org",161,"ai",{"id":380,"name":381,"points":382,"category":20},"45232299","CLAVIER-36",146,{"id":384,"name":385,"points":386,"category":20},"45247396","Backdrop",82,{"id":388,"name":389,"points":390,"category":391},"45245138","Dagger.js",80,"languages",{"id":393,"name":394,"points":395,"category":378},"45276501","Math2Tex",79,false,"v2",{"id":399,"name":5,"line":6,"ai":396,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":400,"top":18,"kw":401,"maker":11,"domain":10,"tier":19,"attempts":37,"strip":402,"url":9,"mix":403,"praise":95,"objection":134,"sub":21},45220069,0.27,[21,24,25,26,27],"3033300300305530005015330030353050503535",[31,32,33,33],1794036682374]