[{"data":1,"prerenderedAt":624},["ShallowReactive",2],{"project-43835584":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":46,"post_text":48,"what":49,"said":85,"maker_in_thread":208,"shape":216,"grid":221,"attempts":586,"same_week":587,"maker_shows":18,"maker_hidden":616,"reader_version":617,"card":618},"43835584","Beatsync","perfect audio sync across multiple devices","title","Show HN: Beatsync – perfect audio sync across multiple devices","https:\u002F\u002Fgithub.com\u002Ffreeman-jiang\u002Fbeatsync","github.com","freemanjiang",1745947945,2025,439,128,98,3837,3,"legend","creative","multi-device audio sync","web_app",[24,25,26,27,28],"audio sync","multi-device audio","surround sound","web audio api","synchronized playback","curious",0.172,{"positive":32,"neutral":33,"mixed":34,"critical":35},19,36,6,10,71,{"idea":38,"performance":40,"execution":42,"design":44},{"positive":34,"critical":39},1,{"positive":41,"critical":41},5,{"positive":43,"critical":43},2,{"positive":45,"critical":39},0,[41,18,18,39,18,45,45,18,41,18,45,18,41,45,18,39,41,18,18,18,18,18,18,18,45,39,18,39,18,43,18,41,41,43,47,41,18,47,41,47],4,"Hi HN! I made Beatsync, an open-source browser-based audio player that syncs audio with millisecond-level accuracy across many devices.\n\nTry it live right now: https:\u002F\u002Fwww.beatsync.gg\u002F\n\nThe idea is that with no additional hardware, you can turn any group of devices into a full surround sound system. MacBook speakers are particularly good.\n\nInspired by Network Time Protocol (NTP), I do clock synchronization over websockets and use the Web Audio API to keep audio latency under a few ms.\n\nYou can also drag devices around a virtual grid to simulate spatial audio — it changes the volume of each dev",{"problem":50,"audience":56,"pricing":56,"motivation":57,"time_to_build":56,"stack":63,"openness":82,"stage":83,"team_size":84},{"value":51,"source":52,"evidence":53},"Playing audio in sync across multiple devices without extra hardware","maker",[54],{"id":55},"post",null,{"value":58,"source":52,"evidence":59},"Group in-person listening, and listening across the internet with others",[60],{"id":61,"by":11,"text":62},"43836969","I primarily built this for group in-person listening, and that's what the spatial audio controls are for. But what is interesting is that since it only requires the browser, it…",[64,70,74],{"value":65,"source":52,"evidence":66},"Web Audio API",[67],{"id":68,"by":11,"text":69},"43837353","Great question! There's two steps: First, I do clock synchronization with a central server so that all clients can agree on a time reference. Then, instead of directly…",{"value":71,"source":52,"evidence":72},"WebSockets",[73],{"id":55},{"value":75,"source":76,"evidence":77},"TypeScript","commenter",[78],{"id":79,"by":80,"text":81},"43842459","imcritic","Nice idea, but this project is currently written in Typescript, so I view it as a prototype at best.","open_source","beta","solo",{"praise":86,"objections":109,"requests":134,"questions":163,"alternatives":182},[87,102],{"value":88,"source":76,"evidence":89},"Impressively accurate sync that works instantly in the browser with no install",[90,94,98],{"id":91,"by":92,"text":93},"43839097","Groxx","Impressively accurate - Android phone in Firefox \u003C-> Chrome on OSX == basically perfect to my ear. That's super cool, thanks for sharing!",{"id":95,"by":96,"text":97},"43841281","joelkoen","This is the most impressive demo I've ever seen - no app download, no account sign up, no crap, just works instantly. Well done.",{"id":99,"by":100,"text":101},"43842979","gitroom","Pretty cool, just the fact it works instantly in the browser with nothing to download is actually kinda wild to me tbh.",{"value":103,"source":76,"evidence":104},"Clever use of websockets and no mic needed",[105],{"id":106,"by":107,"text":108},"43838489","js4ever","Love it, this is impressive and very smart, no need for mic!",[110,121,127],{"value":111,"source":76,"evidence":112},"Desync when one device is plugged into external speakers",[113,117],{"id":114,"by":115,"text":116},"43844556","withinboredom","Works pretty good. There is noticeable desync when one device is plugged into speakers though (at least on windows). It'd be great if you had some way to get a specific device's…",{"id":118,"by":119,"text":120},"43846643","chaosprint","have you considered using webtransport? When I was developing Glicol (https:\u002F\u002Fglicol.org\u002F) sync, the main challenge is network jitter. Had to give it up eventually. Furthermore,…",{"value":122,"source":52,"evidence":123},"Bluetooth latency breaks sync",[124],{"id":125,"by":11,"text":126},"43837259","Thank you for the kind words! Yeah, I think it gets a lot more complicated once you start dealing with speaker hardware. It pretty much only works for the device's native speaker…",{"value":128,"source":76,"evidence":129},"Not open source until a license is added",[130],{"id":131,"by":132,"text":133},"43838479","rezonant","It's not open source until you pick a license. Since there is no license in this repository, it is at best source-available.",[135,142,149,156],{"value":136,"source":76,"evidence":137},"Support for uploading long mixes and playlists",[138],{"id":139,"by":140,"text":141},"43843419","_joel","Really cool but issues for me when uploading mixes (MP3's about 90 mins long, 150MB). They never make it to the playlists",{"value":143,"source":76,"evidence":144},"Periodic resync to handle clock drift",[145],{"id":146,"by":147,"text":148},"43839009","RicoElectrico","Does this resync periodically? (I mean not only when a new track starts)",{"value":150,"source":76,"evidence":151},"Volume controls",[152],{"id":153,"by":154,"text":155},"43839613","krick","Very cool, but lacks volume controls.",{"value":157,"source":76,"evidence":158},"Apple Music or Spotify integration",[159],{"id":160,"by":161,"text":162},"43837691","hackncheese","Any plans to integrate this with Apple Music or Spotify? I would assume your algorithm would work only with files uploaded to the site, but curious if you had plans to attempt…",[164,175],{"value":165,"source":76,"evidence":166},"How clock drift and ring buffers are handled",[167,171],{"id":168,"by":169,"text":170},"43836717","Dwedit","How does it deal with the audio ring buffers on the various devices? Does it just try to start them all at the same time, or does it take into account the sample position within…",{"id":172,"by":173,"text":174},"43851700","fxtentacle","How do you handle different playback devices having small clock speed differences between them?",{"value":176,"source":76,"evidence":177},"How sub-millisecond accuracy is achieved across browsers",[178],{"id":179,"by":180,"text":181},"43837821","badmonster","how does it achieve millisecond-accurate multi-device audio synchronization across browsers?",[183,194,201],{"value":184,"source":76,"evidence":185},"Snapcast",[186,190],{"id":187,"by":188,"text":189},"43836874","daredoes","Have you seen snapcast? That's currently my go-to audio sync solution for running whole house audio. Always open to alternatives, but so far nothing beats the performance and…",{"id":191,"by":192,"text":193},"43844401","nsteel","Snapcast has a webapp and a native android client. Although I'm not sure how well it handles many, many clients. In theory, if all on the same WiFi they should all play in sync…",{"value":195,"source":76,"evidence":196},"Airfoil",[197],{"id":198,"by":199,"text":200},"43841507","radley","Cool, keep it up! For anyone who's curious, Airfoil (a paid app) can play simultaneously from a Mac to a variety of devices: https:\u002F\u002Frogueamoeba.com\u002Fairfoil\u002Fmac\u002F",{"value":202,"source":76,"evidence":203},"Strobe audio and Panaudia",[204],{"id":205,"by":206,"text":207},"43838020","thruflo","This looks really cool, congrats! Just to share a couple of similar\u002Frelated projects in case useful for reference: http:\u002F\u002Fstrobe.audio multi-room audio in Elixir…",{"comments":209,"answered":35,"key":210},20,[211,212,213],{"id":125,"text":126},{"id":61,"text":62},{"id":214,"text":215},"43842542","Haha yeah guarantee is a strong word. I just mean that it’s good enough to not be noticeable (even within the same physical room)",{"commenters":217,"max_depth":218,"maker_replies":209,"first_comment_mins":219,"lifespan_hours":220},86,7,76,150,[222,226,230,233,237,240,241,244,247,251,255,257,260,263,266,269,272,275,277,279,281,284,286,290,293,296,299,302,303,307,310,313,315,317,319,322,323,324,327,329,332,335,337,340,342,343,346,349,351,352,354,357,359,362,364,366,370,373,376,377,379,382,385,389,394,397,399,401,405,409,412,414,417,419,421,425,428,430,432,434,436,439,442,445,447,449,452,455,458,462,465,468,471,474,476,478,483,486,490,494,498,502,506,510,514,516,519,523,525,527,531,533,538,541,543,547,549,553,555,557,559,562,566,570,574,576,580,584],[223,45,41,224,225,45],"43836877","project\u002Fpositive\u002Fidea","whimsy",[227,45,18,228,229,45],"43836908","project\u002Fneutral\u002Fidea","hgomersall",[231,45,41,224,232,45],"43841297","cypherpunks01",[234,45,45,235,236,45],"43842290","other\u002Fneutral\u002Fnone","vladvasiliu",[238,45,45,235,239,45],"43843927","sokka_h2otribe",[191,45,18,228,192,45],[242,45,45,235,243,45],"43848359","pmontra",[245,45,45,246,192,45],"43877779","commenter\u002Fneutral\u002Fnone",[248,45,18,249,250,45],"43849553","project\u002Fneutral\u002Fperformance","jpc0",[252,45,39,253,254,45],"43841402","project\u002Fcritical\u002Fperformance","pcthrowaway",[256,45,45,246,243,45],"43846207",[258,45,45,246,259,45],"43846327","timdiggerm",[261,45,18,249,262,45],"43837196","camtarn",[264,45,45,235,265,45],"43841540","superjan",[267,45,45,235,268,45],"43844169","KayEss",[270,45,45,235,271,45],"43846995","entropie",[273,45,45,235,274,45],"43847972","dspillett",[276,45,45,235,265,45],"43849126",[278,45,45,246,271,45],"43851682",[280,45,45,235,225,45],"43852818",[282,45,45,246,283,45],"43860364","rahimnathwani",[125,45,45,285,11,39],"maker\u002Fneutral\u002Fperformance",[287,45,18,288,289,45],"43839216","maker\u002Fneutral\u002Fidea","raisedbyninjas",[291,45,18,249,292,45],"43842575","hn8726",[294,45,45,295,239,45],"43843916","commenter\u002Fneutral\u002Fperformance",[297,45,18,249,298,45],"43852531","apitman",[300,45,41,224,301,45],"43846426","WhtWsThtAgn",[61,39,45,224,11,39],[304,39,18,305,306,45],"43837134","project\u002Fmixed\u002Fperformance","Ne02ptzero",[308,39,45,235,309,45],"43837413","moomin",[311,39,45,235,312,45],"43839206","recursive",[314,39,45,235,309,45],"43841277",[316,39,45,235,312,45],"43846987",[318,39,45,235,309,45],"43850840",[320,39,45,246,321,45],"43845509","amluto",[214,39,45,285,11,39],[187,43,18,228,188,45],[325,43,45,326,11,39],"43836907","project\u002Fneutral\u002Fnone",[205,18,41,328,206,45],"project\u002Fpositive\u002Fnone",[330,47,18,228,331,45],"43845569","Krei-se",[333,47,45,235,334,45],"43845965","fao_",[336,47,45,235,331,45],"43884262",[338,47,45,235,339,45],"43853845","worthless-trash",[341,47,45,235,331,45],"43856018",[168,41,18,249,169,45],[344,41,18,249,345,45],"43836924","brcmthrowaway",[347,41,18,249,348,45],"43836938","cosmotic",[350,41,18,249,348,45],"43839047",[68,41,45,285,11,39],[353,41,39,253,262,45],"43837434",[355,41,18,249,356,45],"43837569","serial_dev",[358,41,45,285,11,39],"43837639",[360,34,41,224,361,45],"43841309","TowerTall",[91,218,41,363,92,45],"project\u002Fpositive\u002Fperformance",[365,218,41,363,232,45],"43841438",[367,368,18,249,369,45],"43838414",8,"maxmynter95",[131,371,39,372,132,45],9,"project\u002Fcritical\u002Fnone",[374,371,45,375,11,39],"43840439","maker\u002Fpositive\u002Fdocs",[160,35,18,228,161,45],[378,35,45,288,11,39],"43838463",[380,35,18,228,381,45],"43841635","alexweej_",[383,35,18,228,384,45],"43845164","iamsaitam",[386,387,18,228,388,45],"43846398",11,"dchristian",[390,391,18,392,393,45],"43837994",12,"project\u002Fmixed\u002Fexecution","lacoolj",[395,391,45,396,11,39],"43838462","maker\u002Fneutral\u002Fexecution",[398,391,45,396,11,39],"43842507",[400,391,18,305,393,45],"43850981",[402,403,18,326,404,45],"43843012",13,"matteason",[406,407,45,235,408,45],"43836762",14,"jauntywundrkind",[410,407,45,235,411,45],"43836911","duped",[413,407,45,235,408,45],"43838506",[415,407,45,235,416,45],"43852773","doughecka",[146,418,18,249,147,45],15,[420,418,45,285,11,39],"43840443",[422,423,18,249,424,45],"43837511",16,"bjackman",[426,423,45,235,427,45],"43837580","hatthew",[429,423,45,235,262,45],"43838764",[431,423,45,235,424,45],"43848977",[433,423,45,235,427,45],"43900286",[435,423,45,285,11,39],"43837626",[437,423,18,249,438,45],"43838425","mkishi",[440,423,39,253,441,45],"43844173","urbandw311er",[443,423,39,253,444,45],"43838098","cesaref",[118,446,39,253,119,45],17,[448,446,45,285,11,39],"43847270",[95,450,41,451,96,45],18,"project\u002Fpositive\u002Fexecution",[453,450,45,454,11,39],"43842527","maker\u002Fpositive\u002Fnone",[456,32,18,228,457,45],"43843424","pete1302",[459,32,39,460,461,45],"43844080","project\u002Fcritical\u002Fidea","dsr_",[463,32,45,464,457,45],"43844286","commenter\u002Fneutral\u002Fidea",[466,209,18,249,467,45],"43842964","Aldipower",[469,470,18,249,321,45],"43845519",21,[198,472,18,473,199,45],22,"project\u002Fmixed\u002Fidea",[114,475,18,305,115,45],23,[477,475,45,285,11,39],"43847347",[479,480,39,481,482,45],"43841630",24,"project\u002Fcritical\u002Fdesign","emilfihlman",[484,480,45,485,11,39],"43842521","maker\u002Fneutral\u002Fdesign",[487,488,18,228,489,45],"43856548",25,"dragonw",[491,492,18,228,493,45],"43840281",26,"LordGrignard",[495,496,45,235,497,45],"43839797",27,"fitsumbelay",[499,500,41,224,501,45],"43844229",28,"h2zizzle",[503,504,18,228,505,45],"43842423",29,"slmkbh",[507,508,41,363,509,45],"43861070",30,"alana314",[511,512,45,235,513,45],"43843305",31,"awongh",[515,512,45,235,140,45],"43843426",[139,517,39,518,140,45],32,"project\u002Fcritical\u002Fexecution",[520,517,18,521,522,45],"43843793","project\u002Fneutral\u002Fexecution","xnickb",[524,517,18,521,140,45],"43844242",[526,517,45,396,11,39],"43847402",[528,529,18,228,530,45],"43840960",33,"gkanai",[99,532,41,451,100,45],34,[534,535,18,536,537,45],"43837817",35,"project\u002Fneutral\u002Fdesign","HelloUsername",[539,33,41,224,540,45],"43836680","crunchwrapjs",[172,542,18,249,173,45],37,[544,545,41,363,546,45],"43841394",38,"kelvinzhang",[548,545,45,235,11,39],"43847445",[550,551,18,521,552,45],"43837884",39,"ajb",[554,551,45,396,11,39],"43842514",[106,556,41,363,107,45],40,[179,558,18,249,180,45],41,[153,560,18,561,154,45],42,"project\u002Fmixed\u002Fdesign",[563,564,41,328,565,45],"43836868",43,"dddw",[567,568,41,328,569,45],"43838540",44,"djkesu",[571,572,41,328,573,45],"43836513",45,"johng",[575,572,45,454,11,39],"43836753",[577,578,41,328,579,45],"43838175",46,"ng-henry",[581,582,41,328,583,45],"43836931",47,"shahanneda",[79,585,39,518,80,45],48,[],[588,593,598,603,607,611],{"id":589,"name":590,"points":591,"category":592},"43820228","PyXL",983,"hardware",{"id":594,"name":595,"points":596,"category":597},"43803148","RetrOS-32",575,"infrastructure",{"id":599,"name":600,"points":601,"category":602},"43816419","screenrecorder.me",462,"dev_tools",{"id":604,"name":605,"points":606,"category":597},"43778081","TacOS",320,{"id":608,"name":609,"points":610,"category":20},"43791992","Clever Coloring Book",316,{"id":612,"name":613,"points":614,"category":615},"43831298","Reject Cookies",296,"web_saas",false,"v2",{"id":619,"name":5,"line":6,"ai":616,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":620,"top":18,"kw":621,"maker":11,"domain":10,"tier":19,"attempts":45,"strip":622,"url":9,"mix":623,"praise":88,"objection":111,"sub":21},43835584,0.17,[24,25,26,27,28],"5331300353035031533333330131323552453454",[32,33,34,35],1794036673887]