{"version":3,"file":"icecast-metadata-player-1.17.3.synaudio.min.js","mappings":"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","sources":["webpack://IcecastMetadataPlayer/./node_modules/synaudio/node_modules/@eshaz/web-worker/cjs/browser.js","webpack://IcecastMetadataPlayer/./node_modules/simple-yenc/dist/esm.js","webpack://IcecastMetadataPlayer/./node_modules/synaudio/src/SynAudio.js","webpack://IcecastMetadataPlayer/./node_modules/synaudio/index.js"],"sourcesContent":["/**\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nmodule.exports = Worker;","const t=(t,n=4294967295,e=79764919)=>{const r=new Int32Array(256);let o,s,i,c=n;for(o=0;o<256;o++){for(i=o<<24,s=8;s>0;--s)i=2147483648&i?i<<1^e:i<<1;r[o]=i}for(o=0;o>24^t[o])];return c},n=t=>{const n=[];for(const e of t){let t=(e+42)%256;0===t||10===t||13===t||61===t?n.push(\"=\"+String.fromCharCode((t+64)%256)):n.push(String.fromCharCode(t))}return n.join(\"\")},e=(n,e=t)=>{const r=t=>new Uint8Array(t.length/2).map(((n,e)=>parseInt(t.substring(2*e,2*(e+1)),16))),o=t=>r(t)[0],s=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((t,n)=>s.set(t,n)));const i=new Uint8Array(n.length);let c,a,l,f=!1,g=0,h=42,p=n.length>13&&\"dynEncode\"===n.substring(0,9),u=0;p&&(u=11,a=o(n.substring(9,u)),a<=1&&(u+=2,h=o(n.substring(11,u))),1===a&&(u+=8,l=(t=>new DataView(r(t).buffer).getInt32(0,!0))(n.substring(13,u))));const d=256-h;for(let t=u;t255){const t=s.get(c);t&&(c=t+127)}f&&(f=!1,c-=64),i[g++]=c0?c+d:c-h}else f=!0;const m=i.subarray(0,g);if(p&&1===a){const t=e(m);if(t!==l){const n=\"Decode failed crc32 validation\";throw console.error(\"`simple-yenc`\\n\",n+\"\\n\",\"Expected: \"+l+\"; Got: \"+t+\"\\n\",\"Visit https://github.com/eshaz/simple-yenc for more information\"),Error(n)}}return m},r=(n,e='\"',r=t,o)=>{const s=(t,n)=>(t%n+n)%n,i=(t,n)=>n.push(String.fromCharCode(61,(t+64)%256)),c=t=>t.map((t=>t.toString(16).padStart(2,\"0\")));let a,l,f=[],g=1/0,h=Array(256).fill(0);if('\"'===e?(l=[0,8,9,10,11,12,13,34,92,61],a=t=>0===t||8===t||9===t||10===t||11===t||12===t||13===t||34===t||92===t||61===t):\"'\"===e?(l=[0,8,9,10,11,12,13,39,92,61],a=t=>0===t||8===t||9===t||10===t||11===t||12===t||13===t||39===t||92===t||61===t):\"`\"===e&&(l=[13,61,96],f=[7,205,231],a=(t,n)=>13===t||36===t&&123===n||61===t||92===t&&(85===n||117===n)||96===t),void 0===o){o=0;for(let t=0;t{const n=new Uint8Array(4);return new DataView(n.buffer).setInt32(0,t,!0),[...n]})(r(n)))];for(let t=0;tt.replace(/[\\\\]/g,\"\\\\\\\\\").replace(/[`]/g,\"\\\\`\").replace(/\\${/g,\"\\\\${\");export{t as crc32,e as decode,r as dynamicEncode,n as encode,o as stringify};\n","/* Copyright 2022-2023 Ethan Halsall\n \n This file is part of synaudio.\n \n synaudio is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n synaudio is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with this program. If not, see \n*/\n\nimport { decode } from \"simple-yenc\";\nimport Worker from \"@eshaz/web-worker\";\n\n// prettier-ignore\nconst simd=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]))\n\nconst wasmModule = new WeakMap();\n\n/* WASM strings are embeded during the build */\nconst simdWasm = String.raw`dynEncode01658cce3922eÆØÒfeeefsfÅoääääääääääegtfhÊÓÛkÒÊÒÔ×Þgeghgfekmfäe¦åíipl€gnÈÔ××ÊÑÆÙÊeepÄÄÍÊÆÕÄÇÆØÊheo\u0016Œf\u0013Œivälànâiá©eeeeeeee†“g¥g¥…g¦g­re…g¦fІ|…f¦v³i¥…f¦uІz¦e…fІ}…e…f¦gهxφ~…e¦¥Ð‡u†th¥…f…f…wчvφ{…t†p…u†o¦e†qh¥…e…q‡g¦gÙχq…qbeee…e…g…vϦgÙÏbeeebIfbpee…e…g¦iׇq¦gÙχr…rbeee…e…q…vϦgÙÏbeeebIfbpee…e…g¦mׇq¦gÙχr…rbeee…e…q…vϦgÙÏbeeebIfbpee…e…g¦qׇq¦gÙχr…rbeee…e…q…vϦgÙÏbeeebIfbpee…p‡r¦¥Ð†p…o‡s¦¥Ð†o…g¦uχq…z­repg¥…f…q±reg¥…f…qЇo¦i®re…e…q…vϦgÙυ~®iä…e…q¦gÙυe…{¦gÙÏ®j¦epre…o¦áև{¦iЇp¦gÛ¦fϦfֆg¥…pªi¥¦e†gqfp…z…gЦáÖ¦iЦgÛ¦fϦcdddlֆp¦e†gh¥…s…rbege…sbegebIfbpge…s…rbegu…sbegubIfbpgu…r¦…φr…s¦…φs…g¦mφg…p¦gЇprepp…i¥…e…g…qχg¦gÙχp…e…g…vϦgÙÏbege…pbegebIfbpgep…o…{«rf…f…q…{χqІop…q¦ä؆g…o¦fÖiä…e…q¦gÙχo…e…q…vϦgÙϏge…oge÷ge…q¦fÏj…qp†q…g…}«re…f…qІp…y…q¦gهoφr…e†gh¥…g…oχq…g…rχsge…qge÷ge…q…sgi…qgi÷gi…g¦mφg…p¦gЇprepp…x…yφy…t…xφt…w¦fχw…|¬repqfp…f¦e±re¦e…fІt…f¦fֆu…e…f¦gهvφw…f¦i®†y…f¦áևo¦q«†zh¥…f…rцs¦e†gg¥g¥…yre…e…e…f…sϦgÙÏ®…w…e…s¦gÙχq°Öre…e…qbege…ebegebIfbpgeg¥…o¦i«re…e…qbegu…ebegubIfbpgu…o¦m«re…e…qbeg……ebeg…bIfbpg……zre…e…qbeg•…ebeg•bIfbpg•p…f…o‡g«rfp…g¦ä؆q…uiä…e…g¦gÙχx…e…g…sϦgÙϏge…xge÷ge…g¦f×j…gp†g…q…t«re…f…gІq…p…g¦gهxφ{…e†gh¥…g…xχs…g…{χ}ge…sge÷ge…s…}gi…sgi÷gi…g¦mφg…q¦gЇqrepp…p…vφp…r¦fχr…|¬reppg¥…j¦g­re…j¦fІv…i¦v³i¥…i¦uІ|¦e†y¦e…iІ{…h…i¦gهzφ}…h¦¥Ð‡j†t¦e†wh¥…i…i…wчuφx…t†p…j†o¦e†qh¥…h…q‡g¦gÙχq…qbeee…h…g…uϦgÙÏbeeebIfbpee…h…g¦iׇq¦gÙχr…rbeee…h…q…uϦgÙÏbeeebIfbpee…h…g¦mׇq¦gÙχr…rbeee…h…q…uϦgÙÏbeeebIfbpee…h…g¦qׇq¦gÙχr…rbeee…h…q…uϦgÙÏbeeebIfbpee…p‡r¦¥Ð†p…o‡s¦¥Ð†o…g¦uχq…|­repg¥…i…q±reg¥…i…qЇo¦i®re…h…q…uϦgÙυ}®iä…h…q¦gÙυh…x¦gÙÏ®j¦epre…o¦áևx¦iЇp¦gÛ¦fϦfֆ~g¥…pªi¥¦e†gqfp…|…gЦáÖ¦iЦgÛ¦fϦcdddlֆp¦e†gh¥…s…rbege…sbegebIfbpge…s…rbegu…sbegubIfbpgu…r¦…φr…s¦…φs…g¦mφg…p¦gЇprepp…~i¥…h…g…qχg¦gÙχp…h…g…uϦgÙÏbege…pbegebIfbpgep…o…x«rf…i…q…xχqІop…q¦ä؆g…o¦fÖiä…h…q¦gÙχo…h…q…uϦgÙϏge…oge÷ge…q¦fÏj…qp†q…g…{«re…i…qІp…y…q¦gهoφr…h†gh¥…g…oχq…g…rχsge…qge÷ge…q…sgi…qgi÷gi…g¦mφg…p¦gЇprepp…y…zφy…t…zφt…w¦fχw…v¬repqfp…i¦e±re¦e†p¦e…iІs…i¦fֆt…h…i¦gهuφw…i¦i®†y…i¦áևj¦q«†|¦e†rh¥…i…rцo¦e†gg¥g¥…yre…h…h…i…oϦgÙÏ®…w…h…o¦gÙχq°Öre…h…qbege…hbegebIfbpgeg¥…j¦i«re…h…qbegu…hbegubIfbpgu…j¦m«re…h…qbeg……hbeg…bIfbpg……|re…h…qbeg•…hbeg•bIfbpg•p…j‡g…i«rfp…g¦ä؆q…tiä…h…g¦gÙχz…h…g…oϦgÙϏge…zge÷ge…g¦f×j…gp†g…q…s«re…i…gІq…p…g¦gهzφx…h†gh¥…g…zχo…g…xχ{ge…oge÷ge…o…{gi…ogi÷gi…g¦mφg…q¦gЇqrepp…p…uφp…r¦fχr…v¬repp¦e†i…n¦e›ge…m¦e›geg¥…k¦e¯i¥…k¦hֆjg¥…k¦fЇi¦h®i¥¦e†oqfp…e†g…k¦áևo†qh¥……gge \u0005…ggi \u0005…ggm \u0005…ggq \u0005†…g¦uφg…q¦iЇqrepp…ji¥…e…o¦gÙφg…j†qh¥……gge \u0005†…g¦iφg…q¦fЇqreppg¥…i¦h®i¥¦e†oqfp…h†g…k¦áևo†qh¥…‘…gge \u0005…ggi \u0005…ggm \u0005…ggq \u0005†‘…g¦uφg…q¦iЇqrepp…ji¥…h…o¦gÙφgh¥…‘…gge \u0005†‘…g¦iφg…j¦fЇjrepp…k¦uІs…‘…k\u001c‡‘\b\u001b†‡…k¦v­i¥¦e†i¦e†qqgp…‡bx†¦e†j…h†gh¥…€…gbeee…bJf‡€…€bKfbIf…gbeeu…bJf‡€…€bKfbIf…gbee……bJf‡€…€bKfbIf…gbee•…bJf‡€…€bKfbIf†€…g¦¥Ð†g…j¦uχj…s­rep…i¦Õֆq¦f†iqfp…k¦uІs…“…k\u001c‡‘\b\u001b†‡¦e†qp…€b„h…€b„g…€b„e…€b„f÷÷÷†ˆg¥…k…q±re…q¦ä؅kφp…k¦hևoiä…h…q¦gÙφg…o†jh¥…gge…‡ø‡‰…‰ù…ˆ÷†ˆ…g¦iφg…j¦fЇjrep…o…q×j…qp†q…p¦h®re…k…qІj…h…q¦gÙφgh¥…ggq…‡ø‡‰…‰ù…ggm…‡ø‡‰…‰ù…ggi…‡ø‡‰…‰ù…gge…‡ø‡‰…‰ù…ˆ÷÷÷÷†ˆ…g¦uφg…j¦iЇjrepp¦e†j…ii¥…‡bx†€…h†gh¥…g…gbeee…€bJfbpee…g…gbeeu…€bJfbpeu…g…gbee……€bJfbpe……g…gbee•…€bJfbpe•…g¦¥Ð†g…j¦uχj…s­repp…ˆ…k\u0017¨eeå$÷‡‰ú†ˆ…f…kІtg¥…j…k³re…k…k…jЇf¦h°iä…f¦áևr¦iЇg¦gÛ¦fχo¦hֆq…‡bx†€¦e†p…g¦q´i¥…o¦adddlֆo…h…j¦gÙφgh¥…g…gbege…€bJfbpge…g…gbegu…€bJfbpgu…g…gbeg……€bJfbpg……g…gbeg•…€bJfbpg•…g¦¥Ð†g…p¦uφp…o¦iЇorepp…qi¥…h…j…pϦgÙφgh¥…g…gbege…€bJfbpge…g¦uφg…q¦fЇqrepp…f…r«rf…j…rÏj…jp‡jІq…h…j¦gÙφgh¥…g…gge…‡øge…g¦iφg…q¦fЇqrepp…ˆö†‹…t¦e¯i¥…l¦gنu¦e†r¦e…kІv…k¦fֆw…k¦fЦÕֆq…‹ †’…e†oh¥…e…r¦gÙχyge†Ž…e…k…rϦgÙφ|……‘\b\u001b†Šgä…iªi¥bqeeeeeeeeeeeeeeee†€bqeeeeeeeeeeeeeeee†¦eqfp…Šbx†‚¦e†g¦e†pbqeeeeeeeeeeeeeeee†bqeeeeeeeeeeeeeeee†€h¥……g…oχfbeee…‚bJf‡ƒ…g…hχjbeeebKfbIf…fbeeu…‚bJf‡„…jbeeubKfbIf…fbee……‚bJf‡……jbee…bKfbIf…fbee•…‚bJf‡†…jbee•bKfbIf†…€…ƒ…ƒbKfbIf…„…„bKfbIf…………bKfbIf…†…†bKfbIf†€…g¦¥Ð†g…p¦uχp…s­rep…qp†f…|ge†…€b„h…€b„g…€b„e…€b„f÷÷÷†‡…b„h…b„g…b„e…b„f÷÷÷†ˆg¥…f…k³re…f¦ä؆g…wiä…y…f¦gهjϏge…Šø‡Œ…h…jϏgeù…ˆ÷†ˆ…Œ…Œù…‡÷†‡…f¦f×j…fp†f…g…v«re…f¦gنg…k…fІjh¥…g…oχfgi…Šø‡Œ…g…hχpgiù…fge…Šø‡…pgeù…ˆ÷÷†ˆ…Œ…Œù……ù…‡÷÷†‡…g¦mφg…j¦gЇjrepp…ˆ…‰ú …‡…‰ú \u0004…’\u0007\b\u001b‡‡…mgeÃi¥…n…r›ge…m…‡gep……Ž \u0006… \u0005†…o…uφo…l…rχr…t­reppg¥…l¦f±re…nge‡f…l…lчgχj…t…j…t­€†t¦e†p…f…gЇf¦e…f¦e¯€†rg¥…k¦e±i¥…“†qfp…k¦hֆjg¥…k¦fЦh®i¥…“†qfp…e…r¦gÙφg…“†…k¦áևp†qh¥……gge \u0005…ggi \u0005…ggm \u0005…ggq \u0005†…g¦uφg…q¦iЇqrepp…jªre…e…p…rϦgÙφgh¥……gge \u0005†…g¦iφg…j¦fЇjrepp…r…t³re¦e…kІp…k¦fֆu…e…r¦gÙφo…k¦fЦÕֆl…‹ †’h¥…e…r¦gÙχvge†…e…k…rϦgÙφw……‘\b\u001b†Šgä…iªi¥bqeeeeeeeeeeeeeeee†€bqeeeeeeeeeeeeeeee†¦eqfp…Šbx†‚¦e†q…o†g…h†jbqeeeeeeeeeeeeeeee†bqeeeeeeeeeeeeeeee†€h¥……gbeee…‚bJf‡ƒ…jbeeebKfbIf…gbeeu…‚bJf‡„…jbeeubKfbIf…gbee……‚bJf‡……jbee…bKfbIf…gbee•…‚bJf‡†…jbee•bKfbIf†…€…ƒ…ƒbKfbIf…„…„bKfbIf…………bKfbIf…†…†bKfbIf†€…g¦¥Ð†g…j¦¥Ð†j…q¦uχq…s­rep…lp†f…wge†Ž…€b„h…€b„g…€b„e…€b„f÷÷÷†‡…b„h…b„g…b„e…b„f÷÷÷†ˆg¥…f…k³re…f¦ä؆g…uiä…v…f¦gهjϏge…Šø‡‹…h…jϏgeù…ˆ÷†ˆ…‹…‹ù…‡÷†‡…f¦f×j…fp†f…g…p«re…f¦gنg…k…fІjh¥…g…oχfgi…Šø‡‹…g…hχqgiù…fge…Šø‡Œ…qgeù…ˆ÷÷†ˆ…‹…‹ù…Œ…Œù…‡÷÷†‡…g¦mφg…j¦gЇjrepp…ˆ…‰ú …‡…‰ú \u0004…’\u0007\b\u001b‡‡…mgeÃi¥…n…r›ge…m…‡gep…… \u0006…Ž \u0005†…o¦iφo…r¦fχr…t¬reppppetÙÆ×ÌÊÙÄËÊÆÙÚ×ÊØflØÎÒɖ—`;\nconst scalarWasm = String.raw`dynEncode010e15d7b662\u000eo{\u000f\u000e\u000e\u000e\u000f+\u0011n\u0011\u000en\u0013‹‹\u000f‹n\u0018\u000e\u0010\u001d\u000f\u0011s|„\u0014{s{}€‡\u0010\u000e\u0010\u0011\u0012\u0011\u000e\u000f\u0010\u0014\u0016\u000f\u000eOŽ–\u0012\u0019\u0015)\u0010\u0017q}€€szo‚s\u000e\u0010\u0019mmvso~mpos\u0011\u000e\u0018  \u0011Ú\u0011\u0010\u0019\u000f‹\u0010N.\u0010O\u0010V\u001b\u000e.\u0010O\u000fy/\u0014.\u000fO\u0013\\\u0012N.\u000fO\u0012y/\u0015.\u000fO\u0010‚/\u0016.\u000fO\u000f/\u0017\u0011N.\u000e/\u0010O\u000f/\u0012\u0011N.\u0010.\u0010.\u0013x0\u00118\u0010\u000e.\u00108\u0010\u000e F\u0010\u000e.\u0010.\u00118\u0010\u0012.\u00108\u0010\u0012 F\u0010\u0012.\u0010.\u00118\u0010\u0016.\u00108\u0010\u0016 F\u0010\u0016.\u0010.\u00118\u0010\u001a.\u00108\u0010\u001a F\u0010\u001a.\u0010O\u001ex/\u0010.\u0012O\u0011x/\u0011.\u0012O\u0012x/\u0012.\u0011.\u0015V\u001b\u000e\u0019\u0010N.\u000f.\u0012O\u000fy0\u0011Z\u001b\u000e.\u0017\u0012.\u0010.\u0010.\u0013x8\u0010\u000e.\u00108\u0010\u000e F\u0010\u000e.\u0012\u0013.\u0011\u0019/\u0010.\u000f.\u0012T\u001b\u000e.\u000f.\u0010y/\u0012.\u0013.\u0010O\u0010‚0\u0018x/\u0019.\u000e/\u0010\u0011N.\u0010.\u0018x0\u0011.\u0010.\u0019x0\u001a8\u0010\u000e.\u00118\u0010\u000e F\u0010\u000e.\u0011.\u001a8\u0010\u0012.\u00118\u0010\u0012 F\u0010\u0012.\u0010O\u0016x/\u0010.\u0012O\u0010y0\u0012\u001b\u000e\u0019\u0019.\u0013.\u0016x/\u0013.\u0014.\u001bO\u000fx0\u001bU\u001b\u000e\u0019\u001a\u000f\u0019.\u000fO\u000eZ\u001b\u000e.\u000fO\u0010‚/\u0012.\u000e8\u0010\u000e/\u001c.\u000fO\u000fT/\u0011.\u000fO\u0011T/\u0013.\u000e/\u0010\u0011N.\u000e.\u00108\u0010\u000e.\u001c 0\u001cF\u0010\u000e\u0010N.\u0011\u001b\u000e.\u000e.\u00108\u0010\u0012.\u000e8\u0010\u0012 F\u0010\u0012.\u000fO\u0010T\u001b\u000e.\u000e.\u00108\u0010\u0016.\u000e8\u0010\u0016 F\u0010\u0016.\u0013\u001b\u000e.\u000e.\u00108\u0010\u001a.\u000e8\u0010\u001a F\u0010\u001a\u0019.\u0010.\u0012x/\u0010.\u0014O\u000fy0\u0014\u001b\u000e\u0019\u0019\u0019‘\u0011\u0010\u0013\u0014‹\u0010N.\u00120\u0013O\u0013V\u0012O\u000e\u0013.\u0013O\u0012y/\u0017\u0011N.\u000e.\u0014x0\u00128\u0010\u001a.\u0010¡0\u0018.\u000f.\u0014x0\u00168\u0010\u001a¢.\u00128\u0010\u0016.\u0010¡0\u001b.\u00168\u0010\u0016¢.\u00128\u0010\u0012.\u0010¡0\u001c.\u00168\u0010\u0012¢.\u00128\u0010\u000e.\u0010¡0\u001d.\u00168\u0010\u000e¢.\u0019    /\u0019.\u0018.\u0018¢.\u001b.\u001b¢.\u001c.\u001c¢.\u001d.\u001d¢.\u001a    /\u001a.\u0014O\u001ex/\u0014.\u0015O\u0012x0\u0015.\u0017V\u001b\u000e\u0019.\u0013O\u000fyOŠ\u00190\u0012.\u0013\\\u001b\u000e.\u0012O/\u0014.\u0013O\u000f\u0012.\u000e.\u0012O\u0010‚0\u0015x8\u0010\u000e.\u0010¡0\u0018.\u000f.\u0015x8\u0010\u000e¢.\u0019 /\u0019.\u0018.\u0018¢.\u001a /\u001a.\u0012O\u000f€\u0013.\u0012\u0019/\u0012O\u000e.\u0013y.\u0014T\u001b\u000e.\u0013.\u0012y/\u0015.\u000e.\u0012O\u0010‚0\u000ex/\u0014.\u000e.\u000fx/\u000e\u0011N.\u00148\u0010\u0012.\u0010¡0\u0018.\u0018¢.\u00148\u0010\u000e.\u0010¡0\u001b.\u001b¢.\u001a  /\u001a.\u0018.\u000e8\u0010\u0012¢.\u001b.\u000e8\u0010\u000e¢.\u0019  /\u0019.\u0014O\u0016x/\u0014.\u000eO\u0016x/\u000e.\u0015O\u0010y0\u0015\u001b\u000e\u0019\u0019.\u0019.\u0013ÀQ\u000e\u000eŽÍ 0\u0010£É.\u001a.\u0010£É­.\u0011É°±Ä\u0019Ê\u0019\u0011\u0012\u0012‹\u0013ŠR\u000e\u000e\u000e\u000e\u000e\u000e\u000e\u000e/$\u0010N.\u000e.\u000f.\u0010\u001e\u000e.\u0011.\u0012.\u0013\u001e\u000e.\u0017O\u000eD\u0010\u000e.\u0016O\u000eD\u0010\u000e\u0010N.\u0014O\u000eX\u0012N.\u0014O\u0011/\u0013.\u0014O\u000fy0\u0018O\u0011]\u0012N.\u000e/\u0012.\u0014OŠ0\u001a/\u0010\u0011N. .\u00128\u0010\u000eÉ®.\u00128\u0010\u0012É®.\u00128\u0010\u0016É®.\u00128\u0010\u001aÉ®/ .\u0012O\u001ex/\u0012.\u0010O\u0012y0\u0010\u001b\u000e\u0019\u0019.\u0013\u0012N.\u001aO\u0010‚.\u000ex/\u0012.\u0013/\u0010\u0011N. .\u00128\u0010\u000eÉ®/ .\u0012O\u0012x/\u0012.\u0010O\u000fy0\u0010\u001b\u000e\u0019\u0019\u0010N.\u0018O\u0011W\u0012NO\u000e/\u001a\u001a\u000f\u0019.\u0011/\u0012.\u0014OŠ0\u001a/\u0010\u0011N.!.\u00128\u0010\u000eÉ®.\u00128\u0010\u0012É®.\u00128\u0010\u0016É®.\u00128\u0010\u001aÉ®/!.\u0012O\u001ex/\u0012.\u0010O\u0012y0\u0010\u001b\u000e\u0019\u0019.\u0013\u0012N.\u001aO\u0010‚.\u0011x/\u0012\u0011N.!.\u00128\u0010\u000eÉ®/!.\u0012O\u0012x/\u0012.\u0013O\u000fy0\u0013\u001b\u000e\u0019\u0019.\u0014O\u0012y/\u001a.\u0014À/\u001f.\u0014O\u0013V\u0012NO\u000e/\u0018O\u000e/\u0010\u001a\u0010\u0019.!Ä.\u001f£/\u001cO\u000e/\u0013.\u0011/\u0012\u0011N.\u00128\u0010\u001a.\u001c¡0\u001d.\u001d¢.\u00128\u0010\u0016.\u001c¡0\u001d.\u001d¢.\u00128\u0010\u0012.\u001c¡0\u001d.\u001d¢.\u00128\u0010\u000e.\u001c¡0\u001d.\u001d¢.\u001e    /\u001e.\u0012O\u001ex/\u0012.\u0013O\u0012x0\u0013.\u001aV\u001b\u000e\u0019.\u0018OŠ/\u0010O\u000f/\u0018\u001a\u000f\u0019.\u0014O\u0012y/\u001a.\u0014À/\u001fO\u000e/\u0010\u0019.!.\u0014Å0!±Ä/\u001c\u0010N.\u0010.\u0014\\\u001b\u000e.\u0014.\u0010Ox/\u001b.\u0014O\u00110\u0019\u0012.\u0010O\u0010‚.\u0011x/\u0012.\u0019/\u0013\u0011N.\u00128\u0010\u000e.\u001c¡0\u001d.\u001d¢.\u001e /\u001e.\u0012O\u0012x/\u0012.\u0013O\u000fy0\u0013\u001b\u000e\u0019.\u0010.\u0019€\u0013.\u0010\u0019/\u0010.\u001bO\u0011W\u001b\u000e.\u0014.\u0010y/\u0013.\u0010O\u0010‚.\u0011x/\u0012\u0011N.\u00128\u0010\u001a.\u001c¡0\u001d.\u001d¢.\u00128\u0010\u0016.\u001c¡0\u001d.\u001d¢.\u00128\u0010\u0012.\u001c¡0\u001d.\u001d¢.\u00128\u0010\u000e.\u001c¡0\u001d.\u001d¢.\u001e    /\u001e.\u0012O\u001ex/\u0012.\u0013O\u0012y0\u0013\u001b\u000e\u0019\u0019O\u000e/\u0013.\u0018\u0012N.\u0011/\u0012\u0011N.\u0012.\u00128\u0010\u000e.\u001c¡F\u0010\u000e.\u0012.\u00128\u0010\u0012.\u001c¡F\u0010\u0012.\u0012.\u00128\u0010\u0016.\u001c¡F\u0010\u0016.\u0012.\u00128\u0010\u001a.\u001c¡F\u0010\u001a.\u0012O\u001ex/\u0012.\u0013O\u0012x0\u0013.\u001aV\u001b\u000e\u0019\u0019.\u001e.\u001fQ\u000e\u000eŽÍ £/\u001e.\u000f.\u0014y/\u0010\u0010N.\u0013.\u0014\\\u001b\u000e.\u0014.\u0013Ox/\u000f.\u0014.\u0013yO\u00110\u001a\u0012N.\u0013O\u0010‚.\u0011x/\u0012\u0011N.\u0012.\u00128\u0010\u000e.\u001c¡F\u0010\u000e.\u0012O\u0012x/\u0012.\u0013O\u000fx/\u0013.\u001aO\u000fy0\u001a\u001b\u000e\u0019\u0019.\u000fO\u0011W\u001b\u000e.\u0014.\u0013y/\u001a.\u0013O\u0010‚.\u0011x/\u0012\u0011N.\u0012.\u00128\u0010\u000e.\u001c¡F\u0010\u000e.\u0012.\u00128\u0010\u0012.\u001c¡F\u0010\u0012.\u0012.\u00128\u0010\u0016.\u001c¡F\u0010\u0016.\u0012.\u00128\u0010\u001a.\u001c¡F\u0010\u001a.\u0012O\u001ex/\u0012.\u001aO\u0012y0\u001a\u001b\u000e\u0019\u0019.\u001eŸ/\u001c\u0010N.\u0010O\u000eZ\u0012NO\u000e/\u0018\u001a\u000f\u0019.\u0015O\u0010‚/\u0019.\u0014O\u0010‚/\u001aO\u000e/\u0018.\u000e/\u0012O\u000e/\u0013\u0011N. .\u00128\u0010\u000eɯ/\".\u0012.\u001ax8\u0010\u000eÉ/#.\u00168\u0010\u000e/\u001e.\u0012.\u0011. .!±Ä.\u001c.\u0014\u001e\u000f0\u001f.\u001el\u0012.\u0017.\u0013D\u0010\u000e.\u0016.\u001fF\u0010\u000e.\u0013\u0013.\u0018\u0019/\u0018.\".#®/ .\u0012.\u0019x/\u0012.\u0013.\u0015x0\u0013.\u0010V\u001b\u000e\u0019\u0019\u0010N.\u0015O\u000fZ\u001b\u000e.\u0018.\u0015.\u0015z0\u0012x0\u000f.\u0010.\u000f.\u0010V)/\u0015O\u000e/\u000f.\u0018.\u0012y0\u0010O\u000e.\u0010O\u000eX)/\u0010\u0010N.\u0014O\u000eZ\u0012N.$/ \u001a\u000f\u0019.\u0014O\u0011/\u0013\u0010N.\u0014O\u000fyO\u0011W\u0012N.$/ \u001a\u000f\u0019.\u0010O\u0010‚.\u000ex/\u0012.$/ .\u0014OŠ0\u000f/\u001a\u0011N. .\u00128\u0010\u000eÉ®.\u00128\u0010\u0012É®.\u00128\u0010\u0016É®.\u00128\u0010\u001aÉ®/ .\u0012O\u001ex/\u0012.\u001aO\u0012y0\u001a\u001b\u000e\u0019\u0019.\u0013S\u001b\u000e.\u000f.\u0010xO\u0010‚.\u000ex/\u0012\u0011N. .\u00128\u0010\u000eÉ®/ .\u0012O\u0012x/\u0012.\u0013O\u000fy0\u0013\u001b\u000e\u0019\u0019.\u0010.\u0015\\\u001b\u000e.\u0010O\u0010‚.\u000ex/\u0012.\u0010.\u0014xO\u0010‚.\u000ex/\u0013\u0011N. .\u00128\u0010\u000eɯ/\".\u00138\u0010\u000eÉ/#.\u00168\u0010\u000e/\u001e.\u0012.\u0011. .!±Ä.\u001c.\u0014\u001e\u000f0\u001f.\u001el\u0012N.\u0017.\u0010D\u0010\u000e.\u0016.\u001fF\u0010\u000e\u0019.\".#®/ .\u0012O\u0012x/\u0012.\u0013O\u0012x/\u0013.\u0010O\u000fx0\u0010.\u0015U\u001b\u000e\u0019\u0019\u0019\u0019`;\n\nexport default class SynAudio {\n constructor(options = {}) {\n this._correlationSampleSize =\n options.correlationSampleSize > 0 ? options.correlationSampleSize : 11025;\n this._initialGranularity =\n options.initialGranularity > 0 ? options.initialGranularity : 16;\n this._correlationThreshold =\n options.correlationThreshold >= 0 ? options.correlationThreshold : 0.5;\n\n this._module = wasmModule.get(SynAudio);\n\n if (!this._module) {\n this._module = simd().then((simdSupported) =>\n simdSupported\n ? WebAssembly.compile(decode(simdWasm))\n : WebAssembly.compile(decode(scalarWasm)),\n );\n wasmModule.set(this._module);\n }\n\n this.SynAudioWorker = function SynAudioWorker(\n module,\n correlationSampleSize,\n initialGranularity,\n ) {\n this._sourceCache = new Map();\n\n // correlation sample size must not exceed the size of each audio clip\n this._getCorrelationSampleSize = (a, b) =>\n Math.min(\n a.samplesDecoded,\n b.samplesDecoded,\n this._correlationSampleSize,\n );\n\n // initial granularity must not exceed the size of each audio clip\n this._getInitialGranularity = (a, b) =>\n Math.min(a.samplesDecoded, b.samplesDecoded, this._initialGranularity);\n\n this._setAudioDataOnHeap = (input, output, heapPos) => {\n const bytesPerElement = output.BYTES_PER_ELEMENT;\n\n let floatPos = heapPos / bytesPerElement;\n\n for (let i = 0; i < input.length; i++) {\n heapPos += input[i].length * bytesPerElement;\n output.set(input[i], floatPos);\n floatPos += input[i].length;\n }\n\n return heapPos;\n };\n\n this._executeAsWorker = (functionName, params) => {\n let source = this._sourceCache.get(functionName);\n\n if (!source) {\n let type = \"text/javascript\",\n isNode,\n webworkerSourceCode =\n \"'use strict';\" +\n `(${((\n SynAudioWorker,\n functionName,\n correlationSampleSize,\n initialGranularity,\n ) => {\n self.onmessage = (msg) => {\n const worker = new SynAudioWorker(\n Promise.resolve(msg.data.module),\n correlationSampleSize,\n initialGranularity,\n );\n\n worker._workerMethods\n .get(functionName)\n .apply(null, msg.data.params)\n .then((results) => {\n self.postMessage(results);\n });\n };\n }).toString()})(${SynAudioWorker.toString()}, \"${functionName}\", ${\n this._correlationSampleSize\n }, ${this._initialGranularity})`;\n\n try {\n isNode = typeof process.versions.node !== \"undefined\";\n } catch {}\n\n source = isNode\n ? `data:${type};base64,${Buffer.from(webworkerSourceCode).toString(\n \"base64\",\n )}`\n : URL.createObjectURL(new Blob([webworkerSourceCode], { type }));\n\n this._sourceCache.set(functionName, source);\n }\n\n const worker = new (globalThis.Worker || Worker)(source, {\n name: \"SynAudio\",\n });\n\n const result = new Promise((resolve) => {\n worker.onmessage = (message) => {\n worker.terminate();\n resolve(message.data);\n };\n });\n\n this._module.then((module) => {\n worker.postMessage({\n module,\n params,\n });\n });\n\n return result;\n };\n\n this._sync = (a, b) => {\n const pageSize = 64 * 1024;\n const floatByteLength = Float32Array.BYTES_PER_ELEMENT;\n\n const correlationSampleSize = this._getCorrelationSampleSize(a, b);\n const initialGranularity = this._getInitialGranularity(a, b);\n\n const memory = new WebAssembly.Memory({\n initial:\n ((a.samplesDecoded * a.channelData.length +\n b.samplesDecoded * b.channelData.length) *\n floatByteLength) /\n pageSize +\n 4,\n });\n\n return this._module\n .then((module) =>\n WebAssembly.instantiate(module, {\n env: { memory },\n }),\n )\n .then(({ exports }) => {\n const instanceExports = new Map(Object.entries(exports));\n\n const correlate = instanceExports.get(\"correlate\");\n const dataArray = new Float32Array(memory.buffer);\n const heapView = new DataView(memory.buffer);\n\n const aPtr = instanceExports.get(\"__heap_base\").value;\n const bPtr = this._setAudioDataOnHeap(\n a.channelData,\n dataArray,\n aPtr,\n );\n const bestCorrelationPtr = this._setAudioDataOnHeap(\n b.channelData,\n dataArray,\n bPtr,\n );\n const bestSampleOffsetPtr = bestCorrelationPtr + floatByteLength;\n\n correlate(\n aPtr,\n a.samplesDecoded,\n a.channelData.length,\n bPtr,\n b.samplesDecoded,\n b.channelData.length,\n correlationSampleSize,\n initialGranularity,\n bestCorrelationPtr,\n bestSampleOffsetPtr,\n );\n\n const bestCorrelation = heapView.getFloat32(\n bestCorrelationPtr,\n true,\n );\n const bestSampleOffset = heapView.getInt32(\n bestSampleOffsetPtr,\n true,\n );\n\n return {\n correlation: bestCorrelation,\n sampleOffset: bestSampleOffset,\n };\n });\n };\n\n this._syncWorkerConcurrent = (a, b, threads) => {\n const promises = [];\n const lengths = [0];\n\n // |-----------| |-----------| \"end\"\n // \"start\" |-|---------| |-----------|\n // | |\n // | |correlationSampleSize\n\n // split a buffer into equal chunks for threads\n // overlap at the start of the buffer by correlation sample size\n // overlap at the end of the buffer by correlation sample size\n\n // initial granularity low -> high, more -> less threads\n // correlation sample low -> high, less -> more threads\n // file size low -> high, less -> more threads\n\n const correlationSampleSize = this._getCorrelationSampleSize(a, b);\n\n // rough estimate for a good max thread count for performance\n const maxThreads =\n (Math.log(a.samplesDecoded * correlationSampleSize) /\n Math.log(this._initialGranularity + 1)) *\n Math.log(correlationSampleSize / 10000 + 1);\n\n threads = Math.max(\n Math.round(\n Math.min(\n threads,\n maxThreads,\n a.samplesDecoded / correlationSampleSize / 4,\n ),\n ),\n 1,\n );\n\n const aLength = Math.ceil(a.samplesDecoded / threads);\n\n let offset = 0;\n for (let t = 0; t < threads; t++) {\n const aSplit = {\n channelData: [],\n };\n\n for (let i = 0; i < a.channelData.length; i++) {\n const cutChannel = a.channelData[i].subarray(\n offset,\n offset + aLength + correlationSampleSize,\n );\n aSplit.channelData.push(cutChannel);\n aSplit.samplesDecoded = cutChannel.length;\n }\n\n offset += aLength - correlationSampleSize;\n lengths.push(offset);\n\n promises.push(this._syncWorker(aSplit, b));\n }\n\n return Promise.all(promises).then((results) => {\n // find the result with the highest correlation and calculate the offset relative to the input data\n let bestResultIdx = 0;\n let bestCorrelation = -1;\n for (let i = 0; i < results.length; i++)\n if (results[i].correlation > bestCorrelation) {\n bestResultIdx = i;\n bestCorrelation = results[i].correlation;\n }\n\n return {\n correlation: results[bestResultIdx].correlation,\n sampleOffset:\n results[bestResultIdx].sampleOffset + lengths[bestResultIdx],\n };\n });\n };\n\n this._syncWorker = (a, b) => {\n return this._executeAsWorker(\"_sync\", [a, b]);\n };\n\n this._syncWorkerConcurrentMain = (a, b, threads) => {\n // can't serialize the webworker polyfill in nodejs\n return globalThis.Worker\n ? this._executeAsWorker(\"_syncWorkerConcurrent\", [a, b, threads])\n : this._syncWorkerConcurrent(a, b, threads);\n };\n\n // constructor\n\n // needed to serialize minified code when methods are refererenced as a string\n // prettier-ignore\n this._workerMethods = new Map([\n [\"_sync\", this._sync],\n [\"_syncWorker\", this._syncWorker],\n [\"_syncWorkerConcurrent\", this._syncWorkerConcurrent],\n ]);\n\n this._module = module;\n this._correlationSampleSize = correlationSampleSize;\n this._initialGranularity = initialGranularity;\n };\n\n this._instance = new this.SynAudioWorker(\n this._module,\n this._correlationSampleSize,\n this._initialGranularity,\n );\n }\n\n async syncWorkerConcurrent(a, b, threads) {\n return this._instance._syncWorkerConcurrentMain(\n a,\n b,\n threads >= 1 ? threads : 1,\n );\n }\n\n async syncWorker(a, b) {\n return this._instance._syncWorker(a, b);\n }\n\n async sync(a, b) {\n return this._instance._sync(a, b);\n }\n\n async syncMultiple(clips, threads) {\n threads = threads >= 1 ? threads : 8;\n\n const workers = [];\n const graph = [];\n\n let notify = () => {},\n wait = Promise.resolve(),\n runningThreads = 0;\n\n const resetNotify = () => {\n wait = new Promise((resolve) => {\n notify = resolve;\n });\n };\n\n for (let i = 0; i < clips.length; i++) graph.push({ vertex: {} });\n\n for (let v = 0; v < clips.length; v++) {\n const vertexClip = clips[v];\n const vertex = graph[v].vertex;\n\n vertex.name = vertexClip.name;\n vertex.samplesDecoded = vertexClip.data.samplesDecoded;\n vertex.edges = new Set();\n\n for (let e = 0; e < clips.length; e++) {\n if (v === e) continue;\n\n const edgeClip = clips[e];\n const edge = graph[e];\n\n runningThreads++;\n workers.push(\n this.syncWorker(vertexClip.data, edgeClip.data).then(\n (correlationResult) => {\n if (correlationResult.correlation > this._correlationThreshold) {\n vertex.edges.add({\n parent: vertex,\n vertex: edge.vertex,\n samplesDecoded: edgeClip.data.samplesDecoded,\n ...correlationResult,\n });\n }\n runningThreads--;\n notify();\n },\n ),\n );\n\n if (runningThreads >= threads) {\n resetNotify();\n await wait;\n }\n }\n }\n\n await Promise.all(workers);\n\n // prettier-ignore\n const weighResults = (a, b) => {\n if (a.parent && b.parent && a.parent.samplesDecoded !== b.parent.samplesDecoded) return a.parent.samplesDecoded > b.parent.samplesDecoded;\n if (a.correlation !== b.correlation) return a.correlation > b.correlation;\n if (a.sampleOffset !== b.sampleOffset) return a.sampleOffset > b.sampleOffset;\n return a.vertex && b.vertex && a.vertex.name.localeCompare(b.vertex.name) < 0;\n };\n\n // detect cycles and weigh for which edge to remove\n const path = new Map();\n const cycles = new Set();\n\n const detectCycle = (vertex) => {\n for (const edge of vertex.edges.values()) {\n if (path.has(vertex)) return path.get(vertex);\n\n path.set(vertex, edge);\n\n const cycleStartEdge = detectCycle(edge.vertex);\n const cycleEndEdge = edge;\n\n if (cycleStartEdge) {\n let keep, remove;\n if (weighResults(cycleStartEdge, cycleEndEdge)) {\n keep = cycleStartEdge;\n remove = cycleEndEdge;\n } else {\n keep = cycleEndEdge;\n remove = cycleStartEdge;\n }\n\n if (!remove.cycleWith) {\n remove.cycleWith = new Set();\n cycles.add(remove);\n }\n\n remove.cycleWith.add(keep);\n\n if (keep.cycleWith) {\n keep.cycleWith.delete(remove);\n }\n }\n\n path.delete(vertex);\n }\n };\n\n for (const { vertex } of graph) detectCycle(vertex);\n\n // delete any cycles\n for (const edge of cycles)\n if (edge.cycleWith.size) edge.parent.edges.delete(edge);\n\n // find the root elements\n const roots = new Set();\n for (const v of graph) roots.add(v.vertex);\n for (const v of graph)\n for (const edge of v.vertex.edges) roots.delete(edge.vertex);\n\n // build a unique sequence of matches for each root\n const traverseRoot = (path, root, edges, sampleOffsetFromRoot = 0) => {\n for (const edge of edges) {\n if (\n !(path.has(edge.vertex) && weighResults(path.get(edge.vertex), edge))\n )\n path.set(edge.vertex, {\n name: edge.vertex.name,\n correlation: edge.correlation,\n sampleOffset: sampleOffsetFromRoot + edge.sampleOffset,\n });\n\n traverseRoot(\n path,\n root,\n edge.vertex.edges,\n sampleOffsetFromRoot + edge.sampleOffset,\n );\n }\n };\n\n const results = [];\n\n for (const root of roots) {\n const path = new Map();\n path.set(root, {\n name: root.name,\n sampleOffset: 0,\n });\n traverseRoot(path, root, root.edges);\n\n results.push(\n [...path.values()].sort(\n (a, b) =>\n a.sampleOffset - b.sampleOffset ||\n (a.correlation || 0) - (b.correlation || 0) ||\n b.name.localeCompare(a.name),\n ),\n );\n }\n\n return results;\n }\n}\n","import SynAudio from \"./src/SynAudio.js\";\n\nexport default SynAudio;\n"],"names":["module","exports","Worker","t","n","e","r","Int32Array","o","s","i","c","length","Uint8Array","map","parseInt","substring","Map","forEach","set","a","l","f","g","h","p","u","DataView","buffer","getInt32","d","charCodeAt","get","m","subarray","console","error","Error","wasmModule","WeakMap","simdWasm","String","raw","scalarWasm","SynAudio","constructor","options","this","_correlationSampleSize","correlationSampleSize","_initialGranularity","initialGranularity","_correlationThreshold","correlationThreshold","_module","async","WebAssembly","validate","simd","then","simdSupported","compile","SynAudioWorker","_sourceCache","_getCorrelationSampleSize","b","Math","min","samplesDecoded","_getInitialGranularity","_setAudioDataOnHeap","input","output","heapPos","bytesPerElement","BYTES_PER_ELEMENT","floatPos","_executeAsWorker","functionName","params","source","isNode","type","webworkerSourceCode","self","onmessage","msg","Promise","resolve","data","_workerMethods","apply","results","postMessage","toString","process","versions","node","Buffer","from","URL","createObjectURL","Blob","worker","globalThis","name","result","message","terminate","_sync","floatByteLength","Float32Array","memory","Memory","initial","channelData","instantiate","env","instanceExports","Object","entries","correlate","dataArray","heapView","aPtr","value","bPtr","bestCorrelationPtr","bestSampleOffsetPtr","correlation","getFloat32","sampleOffset","_syncWorkerConcurrent","threads","promises","lengths","maxThreads","log","max","round","aLength","ceil","offset","aSplit","cutChannel","push","_syncWorker","all","bestResultIdx","bestCorrelation","_syncWorkerConcurrentMain","_instance","syncWorkerConcurrent","syncWorker","sync","syncMultiple","clips","workers","graph","notify","wait","runningThreads","vertex","v","vertexClip","edges","Set","edgeClip","edge","correlationResult","add","parent","weighResults","localeCompare","path","cycles","detectCycle","values","has","cycleStartEdge","cycleEndEdge","keep","remove","cycleWith","delete","size","roots","traverseRoot","root","sampleOffsetFromRoot","sort"],"sourceRoot":""}