[{"data":1,"prerenderedAt":408},["ShallowReactive",2],{"project-25641420":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":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":44,"post_text":46,"what":47,"said":73,"maker_in_thread":220,"shape":228,"grid":232,"attempts":371,"same_week":372,"maker_shows":41,"maker_hidden":400,"reader_version":401,"card":402},"25641420","Handel","A procedural programming language for writing songs in browser","title","Show HN: Handel – A procedural programming language for writing songs in browser","https:\u002F\u002Fhandel-pl.github.io","handel-pl.github.io","ddj231",1609814715,2021,187,58,250,2533,10,"notable","creative","music composition language","web_app",[24,25,26,27,28],"music programming language","song composition","browser music","midi","chunks","curious",0.152,{"positive":32,"neutral":33,"mixed":34,"critical":35},7,17,3,1,28,{"docs":38,"idea":40,"execution":42,"design":43},{"positive":39,"critical":39},0,{"positive":41,"critical":39},2,{"positive":39,"critical":35},{"positive":41,"critical":39},[39,34,34,39,45,45,34,39,34,39,34,45,34,34,39,39,39,39,39,45,45,34,39,34,34,34,39,39,34,34,39,34,34,35,39,34,39,45,39,34],5,null,{"problem":48,"audience":46,"pricing":46,"motivation":58,"time_to_build":46,"stack":63,"openness":70,"stage":71,"team_size":72},{"value":49,"source":50,"evidence":51},"Writing songs with code, focused on composition rather than live performance","maker",[52,55],{"id":53,"by":11,"text":54},"25642231","I started building Handel some weeks ago, as a simple way of writing music with code. While the livecoding movement focuses on providing solutions for performing music live with…",{"id":56,"by":11,"text":57},"25654913","I wanted to deviate from live coding, and make a language that targets songwriting\u002Fcomposition. I think the end goal of live coding is slightly different, and seems to target…",{"value":59,"source":50,"evidence":60},"Simple song writing as a way of writing music with code, deviating from live coding",[61,62],{"id":53,"by":11,"text":54},{"id":56,"by":11,"text":57},[64],{"value":65,"source":50,"evidence":66},"Tone.js",[67],{"id":68,"by":11,"text":69},"25649324","It isn't expected. But I have noticed the issue as well, and I'm looking to fix. I think it may have to do with how note lengths from beats are being calculated. The Handel…","open_source","beta","unknown",{"praise":74,"objections":98,"requests":134,"questions":173,"alternatives":196},[75,90],{"value":76,"source":77,"evidence":78},"Readable, natural syntax","commenter",[79,82,86],{"id":80,"by":11,"text":81},"25642608","I think in 2 ways: 1. Readability: Ex. start play E3, Ab3 for 1b rest 5b play E3, Ab3 for 1b finish It is somewhat intuitive to read the above without experience with the…",{"id":83,"by":84,"text":85},"25646020","ArtWomb","Syntax is very human readable, yet still expressive. In terms of extending, is there an easy interface for generating custom waveforms? Or alternatively, if I generate sine…",{"id":87,"by":88,"text":89},"25643556","kliments","Functional and very simple to use, and looks clean to the eye. Great job!",{"value":91,"source":77,"evidence":92},"Browser-based with live web player",[93,97],{"id":94,"by":95,"text":96},"25643954","undecisive","Definitely cool! I do like simple text-based music tools, and the fact that it has a live web player is excellent. A couple of things I noted: - I couldn't work out how to run…",{"id":87,"by":88,"text":89},[99,106,116,123],{"value":100,"source":77,"evidence":101},"Playback drifts out of sync between tracks",[102],{"id":103,"by":104,"text":105},"25644956","arcsincosin","I'm having a hard time getting instruments to synchronize in the examples—over time all the sequences drift. Is this expected \u002F known?",{"value":107,"source":77,"evidence":108},"Lacks arithmetic and variable mutation",[109,113],{"id":110,"by":111,"text":112},"25645647","SamBam","This looks wonderful. I may be missing it from the description, but when I think \"procedural\" I think that I should be able to change the variables with math, or at the very…",{"id":114,"by":11,"text":115},"25647841","Thanks! So by procedural what is meant is that the there are chunks (which are Handel's procedures\u002Ffunctions). Currently your code snippet can't be replicated in Handel. Looping…",{"value":117,"source":77,"evidence":118},"Cannot run chunks in sequence",[119,120],{"id":94,"by":95,"text":96},{"id":121,"by":11,"text":122},"25653740","Thanks for the feedback! Running two chunks in sequence is currently not supported, but I've been considering a separate block (or a customization of a run of a chunk) that could…",{"value":124,"source":77,"evidence":125},"Midi export and Firefox support unclear",[126,130],{"id":127,"by":128,"text":129},"25642927","jacquesm","Nice. Have you found any good workarounds for getting midi to work in Firefox or is this Chrome only?",{"id":131,"by":132,"text":133},"25643927","capableweb","Well, you're both slightly off. No, midi does not work in Firefox, last time I checked, Mozilla still doesn't like the security of the current API hence it hasn't been…",[135,142,149,159,166],{"value":136,"source":77,"evidence":137},"Add composition examples in the editor",[138],{"id":139,"by":140,"text":141},"25642377","tartoran","I suggest you add a drop down with some composition examples in the editor so it kind of demos out what it is capable of. The language feels quite natural to transfer an existing…",{"value":143,"source":77,"evidence":144},"Support key or mode transposition",[145],{"id":146,"by":147,"text":148},"25642602","andreskytt","Being able to set a key or mode would be nice. Play verse but 3 semitones up. Play melody A but in phrygian. Would be nice to experiment with different moods",{"value":150,"source":77,"evidence":151},"Export to MIDI or sheet music formats",[152,156],{"id":153,"by":154,"text":155},"25647306","jkingsbery","Looks interesting. I had spent a while playing around with LilyPond (http:\u002F\u002Flilypond.org\u002F), and I think something like Handel would solve issues with some of the more repetitive…",{"id":157,"by":11,"text":158},"25647589","Hi! Compiling to midi is also a great feature. I think having both the immediate feedback of hearing your compositions, and the ability to export to midi would be useful",{"value":160,"source":77,"evidence":161},"Interface with Max, Pure Data or SuperCollider",[162],{"id":163,"by":164,"text":165},"25645783","yatakaka","Would be great if this could interface with Max, pure data, supercollider or some synthesis language.",{"value":167,"source":77,"evidence":168},"Looping on play command",[169,170],{"id":94,"by":95,"text":96},{"id":171,"by":11,"text":172},"25654591","I added the loop customization to play commands in Handel v0.1.12. So for repeating commands you can use this syntax: play somenotelist for 1b loop for 5 Here is your code using…",[174,185,189],{"value":175,"source":77,"evidence":176},"How does it differ from ABC notation or Lilypond",[177,181],{"id":178,"by":179,"text":180},"25642525","johnx123-up","How is this different (or better than) from ABC notation?",{"id":182,"by":183,"text":184},"25643948","sam_goody","How des this compare to Lilypond (aside for being browser based)?",{"value":186,"source":77,"evidence":187},"Can custom waveforms be added",[188],{"id":83,"by":84,"text":85},{"value":190,"source":77,"evidence":191},"Can sub-beat note durations be set",[192],{"id":193,"by":194,"text":195},"25644143","stelonix","Am very interested! By looking at it on a glance, I'm wanting to write a mscx (Musescore) importer. I have a question though, that may have skipped my eyes: is there a way of…",[197,204,209,213],{"value":198,"source":77,"evidence":199},"Sonic Pi",[200],{"id":201,"by":202,"text":203},"25642237","gegtik","reminds me of sonicpi",{"value":205,"source":77,"evidence":206},"LilyPond",[207,208],{"id":182,"by":183,"text":184},{"id":153,"by":154,"text":155},{"value":210,"source":77,"evidence":211},"ABC notation",[212],{"id":178,"by":179,"text":180},{"value":214,"source":77,"evidence":215},"Renoise tracker",[216],{"id":217,"by":218,"text":219},"25644992","fab1an","This reminds me of the very fun and oldschool tracker paradigm for music production. Incidentally, this is experiencing a bit of a renaissance due to the wonderful Polyend…",{"comments":221,"answered":18,"key":222},16,[223,224,227],{"id":53,"text":54},{"id":225,"text":226},"25642468","There's an examples folder here linked to from the documentation but having examples in editor would be intuitive as well. (here's the link to the folder if you were curious:…",{"id":80,"text":81},{"commenters":229,"max_depth":45,"maker_replies":221,"first_comment_mins":230,"lifespan_hours":231},38,124,27,[233,235,237,238,239,240,244,246,250,253,255,257,258,261,264,267,269,271,274,275,278,282,285,288,291,294,297,300,303,306,309,312,314,315,317,318,320,322,325,326,328,331,333,337,340,341,342,345,347,350,352,354,358,360,362,365,367,368],[53,39,39,234,11,35],"project\u002Fneutral\u002Fidea",[139,39,34,236,140,39],"maker\u002Fneutral\u002Fdocs",[225,39,39,236,11,35],[178,39,34,234,179,39],[80,39,39,234,11,35],[241,39,45,242,243,39],"25643365","maker\u002Fpositive\u002Fidea","fergonco",[157,39,39,245,11,35],"project\u002Fpositive\u002Fidea",[247,39,45,248,249,39],"25643650","project\u002Fpositive\u002Fnone","p2detar",[251,39,39,252,194,39],"25651532","commenter\u002Fneutral\u002Fnone",[94,39,34,254,95,39],"project\u002Fmixed\u002Fexecution",[121,39,39,256,11,35],"maker\u002Fneutral\u002Fnone",[193,39,34,234,194,39],[259,39,34,234,260,39],"25645278","mcphage",[262,39,39,263,11,35],"25647676","project\u002Fneutral\u002Fdocs",[265,39,34,266,260,39],"25648344","project\u002Fneutral\u002Fexecution",[268,39,39,266,11,35],"25648988",[83,39,45,270,84,39],"project\u002Fpositive\u002Fdesign",[272,39,34,234,273,39],"25648404","PaulDavisThe1st",[56,39,39,234,11,35],[276,39,34,256,277,39],"25654210","ad404b8a372f2b9",[279,35,39,280,281,39],"25642850","other\u002Fneutral\u002Fnone","preya2k",[283,35,39,280,284,39],"25643156","rusk",[286,35,39,280,287,39],"25643193","adflux",[289,35,39,280,290,39],"25644555","numlock86",[292,35,39,280,293,39],"25645117","mmmateo",[295,35,39,280,296,39],"25646175","layer8",[298,35,39,280,299,39],"25643984","dagw",[301,41,45,245,302,39],"25650502","VitorVRS",[304,41,39,305,11,35],"25653761","maker\u002Fpositive\u002Fnone",[307,41,45,248,308,39],"25654737","FlashBlaze",[310,34,34,254,311,39],"25644578","letientai299",[313,34,39,234,11,35],"25649110",[171,34,39,266,11,35],[146,316,34,234,147,39],4,[153,45,34,234,154,39],[319,45,39,252,273,39],"25648350",[127,321,34,266,128,39],6,[323,321,39,252,324,39],"25643726","adamjb",[131,321,39,252,132,39],[327,32,39,280,273,39],"25648390",[329,32,39,252,330,39],"25653817","yardshop",[182,332,34,234,183,39],8,[334,335,34,254,336,39],"25645945",9,"city41",[338,335,39,339,11,35],"25648003","maker\u002Fneutral\u002Fexecution",[110,18,34,234,111,39],[114,18,39,234,11,35],[343,18,34,344,111,39],"25648896","project\u002Fneutral\u002Fdesign",[217,346,39,280,218,39],11,[103,348,35,349,104,39],12,"project\u002Fcritical\u002Fexecution",[68,348,39,351,11,35],"project\u002Fneutral\u002Fperformance",[163,353,34,234,164,39],13,[355,356,34,263,357,39],"25644254",14,"eecks",[359,356,39,263,11,35],"25649640",[87,361,45,270,88,39],15,[363,361,45,248,364,39],"25643582","franci97",[366,361,39,305,11,35],"25649977",[201,221,34,234,202,39],[369,221,34,234,370,39],"25644159","simonvc",[],[373,378,382,387,391,396],{"id":374,"name":375,"points":376,"category":377},"25634192","read.cv",938,"productivity",{"id":379,"name":380,"points":381,"category":20},"25614167","iceland-thermal",753,{"id":383,"name":384,"points":385,"category":386},"25627673","Lightspeed",452,"infrastructure",{"id":388,"name":389,"points":390,"category":377},"25644828","Unclack",279,{"id":392,"name":393,"points":394,"category":395},"25657198","Reslash",266,"consumer_social",{"id":397,"name":398,"points":399,"category":377},"25622095","OpenScan",200,false,"v2",{"id":403,"name":5,"line":6,"ai":400,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":404,"top":18,"kw":405,"maker":11,"domain":10,"tier":19,"attempts":39,"strip":406,"url":9,"mix":407,"praise":76,"objection":100,"sub":21},25641420,0.15,[24,25,26,27,28],"0330553030353300000553033300330331030503",[32,33,34,35],1794036600874]