[{"data":1,"prerenderedAt":273},["ShallowReactive",2],{"project-22517538":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":41,"post_text":43,"what":44,"said":88,"maker_in_thread":168,"shape":170,"grid":175,"attempts":234,"same_week":235,"maker_shows":206,"maker_hidden":265,"reader_version":266,"card":267},"22517538","TablaZinc","Generate guitar tablature using a constraint solver","title","Show HN: Generate guitar tablature using a constraint solver","https:\u002F\u002Fgithub.com\u002Fsenshu\u002FTablaZinc","github.com","_mouvantsillage",1583667440,2020,109,26,594,3028,20,"notable","creative","music tablature generator","cli",[24,25,26,27,28],"guitar tablature","constraint solver","minizinc","fingering generator","music notation","curious",0.125,{"positive":32,"neutral":33,"mixed":34,"critical":35},3,12,0,1,16,{"idea":38,"performance":39,"docs":40},{"positive":32,"critical":35},{"positive":34,"critical":34},{"positive":34,"critical":34},[32,42,32,32,32,32,34,34,34,34,34,32,32,32,42,32,34,32,35,34,34,34,42,32,34,32],5,null,{"problem":45,"audience":56,"pricing":43,"motivation":61,"time_to_build":66,"stack":70,"openness":85,"stage":86,"team_size":87},{"value":46,"source":47,"evidence":48},"Converting sheet music or transcriptions into playable fretted-instrument tablature","commenter",[49,53],{"id":50,"by":51,"text":52},"22520614","senshu","Author here. TablaZinc is a proof-of-concept tablature generator for fretted string instruments -- such as the guitar, bass, mandolin, banjo, etc. It is a week-end project that I…",{"id":54,"by":51,"text":55},"22520478","I think I understand what you mean. A trained guitar player would not need such a tool, and a beginner should probably avoid using it :). My original idea was to explore how I…",{"value":57,"source":47,"evidence":58},"Guitar players who cannot read sheet music fluently",[59,60],{"id":50,"by":51,"text":52},{"id":54,"by":51,"text":55},{"value":62,"source":47,"evidence":63},"Learn constraint programming and get playable jazz solo tabs",[64,65],{"id":50,"by":51,"text":52},{"id":54,"by":51,"text":55},{"value":67,"source":47,"evidence":68},"A week-end project",[69],{"id":50,"by":51,"text":52},[71,75],{"value":72,"source":47,"evidence":73},"MiniZinc",[74],{"id":50,"by":51,"text":52},{"value":76,"source":47,"evidence":77},"Gecode solver",[78,81],{"id":79,"by":51,"text":80},"22523686","The authors of the Gecode solver could explain it better than me, but I think that -O3 and -O4 perform a first pass that pre-compute variable bounds and values, which could…",{"id":82,"by":83,"text":84},"22523796","mzl","That is about right. What happens at -O4 is that for every variable, the upper and lower bounds are tested, and if using the bound as the value for the variable would make the…","open_source","prototype","solo",{"praise":89,"objections":105,"requests":121,"questions":140,"alternatives":149},[90],{"value":91,"source":47,"evidence":92},"Interesting use case and fun project",[93,97,101],{"id":94,"by":95,"text":96},"22523592","pachico","Congratulations! It's a very nice use case!",{"id":98,"by":99,"text":100},"22520199","cormacrelf","Pretty cool. It’s nice that computing the good fingerings takes a while, makes my brain feel less ‘out of a job’ that it can do that nearly real-time. Would be good to see some…",{"id":102,"by":103,"text":104},"22521927","phkahler","Some time ago I transcribed Solfegiato into python script and converted to MIDI notes. Then printed it as TAB where each note is shown on all strings if the fret number is in…",[106,117],{"value":107,"source":47,"evidence":108},"Tabs are not captured well by MIDI; expressive playing and fingering choices vary",[109,113],{"id":110,"by":111,"text":112},"22524055","moomin","A story. Many years ago, my guitar teacher set me a challenge to learn the guitar solo to “Time” by Pink Floyd. At one point, he pointed out that what I was playing was much more…",{"id":114,"by":115,"text":116},"22531591","Sohcahtoa82","Yeah, I've seen a lot of bickering over what the \"correct\" fingering is for some songs that produce the same notes. For example, the repeated two-note riff at 0:17 in Nirvana -…",{"value":118,"source":47,"evidence":119},"Harmony and multi-note chords are not yet handled",[120],{"id":98,"by":99,"text":100},[122,127],{"value":123,"source":47,"evidence":124},"Support for harmony and multiple simultaneous notes",[125,126],{"id":98,"by":99,"text":100},{"id":54,"by":51,"text":55},{"value":128,"source":47,"evidence":129},"Compare with dynamic programming or shortest path approaches",[130,134,137],{"id":131,"by":132,"text":133},"22521314","anderskaseorg","If you’re looking for a more practical algorithm: this problem can be formulated as a shortest path problem on the graph whose vertices are (n, fret, finger, string) tuples. A…",{"id":135,"by":51,"text":136},"22523677","I agree with that and I definitely will try. As explained in the first comment, one of the motivations for the project was to learn constraint programming. The tablature…",{"id":138,"by":51,"text":139},"22523722","Definitely. This could be the next step in my exploration of programming techniques to solve this problem. I will have a look at your implementation.",[141],{"value":142,"source":47,"evidence":143},"Why -O4 speeds up the solver",[144,148],{"id":145,"by":146,"text":147},"22522813","H8crilA","Jesus, what's going on between -O3 and -O4? This type of a gain warrants investigation. Have you tried profiling both cases?",{"id":82,"by":83,"text":84},[150,154,161],{"value":151,"source":47,"evidence":152},"Dorico",[153],{"id":98,"by":99,"text":100},{"value":155,"source":47,"evidence":156},"Soundslice",[157],{"id":158,"by":159,"text":160},"22523971","adrianh","Check out Soundslice (https:\u002F\u002Fwww.soundslice.com\u002F) for an excellent tab and notation editor. It’s web-based and hence works well on Linux.",{"value":162,"source":47,"evidence":163},"optimal-guitar Java project",[164],{"id":165,"by":166,"text":167},"22521235","tschiller","You can also formulate the problem as a dynamic programming problem. Here's a Java repo I made back in college solving the simpler problem: given a tab, what's the easiest…",{"comments":34,"answered":34,"key":169},[],{"commenters":171,"max_depth":172,"maker_replies":34,"first_comment_mins":173,"lifespan_hours":174},19,4,504,116,[176,178,180,182,183,184,185,189,193,196,200,203,205,207,208,209,210,211,214,216,217,219,221,223,228,232],[50,34,32,177,51,34],"project\u002Fneutral\u002Fidea",[102,34,42,179,103,34],"project\u002Fpositive\u002Fidea",[145,34,32,181,146,34],"project\u002Fneutral\u002Fperformance",[79,34,32,181,51,34],[82,34,32,181,83,34],[131,35,32,177,132,34],[186,35,34,187,188,34],"22522616","commenter\u002Fneutral\u002Fnone","texasbigdata",[190,35,34,191,192,34],"22523409","other\u002Fneutral\u002Fnone","ves",[194,35,34,191,195,34],"22524379","wwright",[197,35,34,198,199,34],"22524837","other\u002Fneutral\u002Fdocs","charlus",[201,35,34,198,202,34],"22533062","dgellow",[135,35,32,204,51,34],"maker\u002Fneutral\u002Fidea",[165,206,32,177,166,34],2,[138,206,32,204,51,34],[98,32,42,179,99,34],[54,32,32,204,51,34],[158,32,34,191,159,34],[212,32,32,177,213,34],"22521217","superpermutat0r",[110,172,35,215,111,34],"project\u002Fcritical\u002Fidea",[114,172,34,191,115,34],[218,172,34,191,111,34],"22559574",[220,172,34,191,115,34],"22565454",[94,42,42,222,95,34],"maker\u002Fpositive\u002Fidea",[224,225,32,226,227,34],"22522292",6,"maker\u002Fneutral\u002Fdocs","wyclif",[229,225,34,230,231,34],"22522295","commenter\u002Fneutral\u002Fdocs","dang",[233,225,32,226,51,34],"22523724",[],[236,241,246,251,256,261],{"id":237,"name":238,"points":239,"category":240},"22545878","Fraidycat",807,"productivity",{"id":242,"name":243,"points":244,"category":245},"22548217","Visual SQL",512,"data",{"id":247,"name":248,"points":249,"category":250},"22492343","HiddenVM",429,"security_privacy",{"id":252,"name":253,"points":254,"category":255},"22495518","Unscreen",193,"ai",{"id":257,"name":258,"points":259,"category":260},"22532017","Crescendo",164,"dev_tools",{"id":262,"name":263,"points":264,"category":260},"22510839","cxxmatrix",158,false,"v2",{"id":268,"name":5,"line":6,"ai":265,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":269,"top":18,"kw":270,"maker":11,"domain":10,"tier":19,"attempts":34,"strip":271,"url":9,"mix":272,"praise":91,"objection":107,"sub":21},22517538,0.13,[24,25,26,27,28],"35333300000333530310005303",[32,33,34,35],1794036587276]