framefields 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/LICENCE +202 -0
  2. package/README.md +740 -0
  3. package/dist/audio/index.d.mts +5 -0
  4. package/dist/audio/index.mjs +14 -0
  5. package/dist/audio-Dvwwz8xU.d.mts +37 -0
  6. package/dist/audio-Dvwwz8xU.d.mts.map +1 -0
  7. package/dist/audio-TAvPwzLR.mjs +214 -0
  8. package/dist/audio-TAvPwzLR.mjs.map +1 -0
  9. package/dist/audio-x28ZgQBP.mjs +85 -0
  10. package/dist/audio-x28ZgQBP.mjs.map +1 -0
  11. package/dist/chunk-GMkBE123.mjs +47 -0
  12. package/dist/client-C74hb7fy.mjs +66 -0
  13. package/dist/client-C74hb7fy.mjs.map +1 -0
  14. package/dist/dist-1iUYuPct.mjs +1859 -0
  15. package/dist/dist-1iUYuPct.mjs.map +1 -0
  16. package/dist/dist-Bx6J0VcM.mjs +1859 -0
  17. package/dist/dist-Bx6J0VcM.mjs.map +1 -0
  18. package/dist/dist-C_hjvkdN.mjs +2220 -0
  19. package/dist/dist-C_hjvkdN.mjs.map +1 -0
  20. package/dist/dist-DKm2IyEJ.mjs +94 -0
  21. package/dist/dist-DKm2IyEJ.mjs.map +1 -0
  22. package/dist/dist-cjs-B5EVqDFp.mjs +85 -0
  23. package/dist/dist-cjs-B5EVqDFp.mjs.map +1 -0
  24. package/dist/dist-cjs-BGJkdexX.mjs +437 -0
  25. package/dist/dist-cjs-BGJkdexX.mjs.map +1 -0
  26. package/dist/dist-cjs-BKmGCgtm.mjs +9069 -0
  27. package/dist/dist-cjs-BKmGCgtm.mjs.map +1 -0
  28. package/dist/dist-cjs-BUc0_kg-.mjs +1091 -0
  29. package/dist/dist-cjs-BUc0_kg-.mjs.map +1 -0
  30. package/dist/dist-cjs-BUwe2XhR.mjs +153 -0
  31. package/dist/dist-cjs-BUwe2XhR.mjs.map +1 -0
  32. package/dist/dist-cjs-BWgoUCXJ.mjs +137 -0
  33. package/dist/dist-cjs-BWgoUCXJ.mjs.map +1 -0
  34. package/dist/dist-cjs-CmZEMtO6.mjs +6 -0
  35. package/dist/dist-cjs-D7kEM-Mj.mjs +181 -0
  36. package/dist/dist-cjs-D7kEM-Mj.mjs.map +1 -0
  37. package/dist/dist-cjs-DFUmy89O.mjs +48 -0
  38. package/dist/dist-cjs-DFUmy89O.mjs.map +1 -0
  39. package/dist/dist-cjs-Df7144zM.mjs +209 -0
  40. package/dist/dist-cjs-Df7144zM.mjs.map +1 -0
  41. package/dist/dist-cjs-DgxjcvBN.mjs +98 -0
  42. package/dist/dist-cjs-DgxjcvBN.mjs.map +1 -0
  43. package/dist/dist-cjs-DsMdld8l.mjs +5015 -0
  44. package/dist/dist-cjs-DsMdld8l.mjs.map +1 -0
  45. package/dist/dist-cjs-Dzs5P3K0.mjs +51 -0
  46. package/dist/dist-cjs-Dzs5P3K0.mjs.map +1 -0
  47. package/dist/dist-cjs-ECMuIF57.mjs +323 -0
  48. package/dist/dist-cjs-ECMuIF57.mjs.map +1 -0
  49. package/dist/dist-cjs-lYvO8aDo.mjs +64 -0
  50. package/dist/dist-cjs-lYvO8aDo.mjs.map +1 -0
  51. package/dist/dist-cjs-qEJrwjGk.mjs +66 -0
  52. package/dist/dist-cjs-qEJrwjGk.mjs.map +1 -0
  53. package/dist/dist-cjs-x5cwlqA5.mjs +43 -0
  54. package/dist/dist-cjs-x5cwlqA5.mjs.map +1 -0
  55. package/dist/dist-gjHmorxL.mjs +27479 -0
  56. package/dist/dist-gjHmorxL.mjs.map +1 -0
  57. package/dist/effects/index.d.mts +5 -0
  58. package/dist/effects/index.mjs +35 -0
  59. package/dist/effects-CHWORCYd.mjs +811 -0
  60. package/dist/effects-CHWORCYd.mjs.map +1 -0
  61. package/dist/event-streams-D-APZ7Ke.mjs +204 -0
  62. package/dist/event-streams-D-APZ7Ke.mjs.map +1 -0
  63. package/dist/fonts/index.d.mts +2 -0
  64. package/dist/fonts/index.mjs +3 -0
  65. package/dist/fonts-DrGTBJJk.mjs +188 -0
  66. package/dist/fonts-DrGTBJJk.mjs.map +1 -0
  67. package/dist/index-B0BNPEoH.d.mts +2117 -0
  68. package/dist/index-B0BNPEoH.d.mts.map +1 -0
  69. package/dist/index-BMVVmc4G.d.mts +72 -0
  70. package/dist/index-BMVVmc4G.d.mts.map +1 -0
  71. package/dist/index-D1ZsMpke.d.mts +264 -0
  72. package/dist/index-D1ZsMpke.d.mts.map +1 -0
  73. package/dist/index-D2jDC7O5.d.mts +3643 -0
  74. package/dist/index-D2jDC7O5.d.mts.map +1 -0
  75. package/dist/index-D2wJqSl5.d.mts +114 -0
  76. package/dist/index-D2wJqSl5.d.mts.map +1 -0
  77. package/dist/index-DKFGNyMB.d.mts +309 -0
  78. package/dist/index-DKFGNyMB.d.mts.map +1 -0
  79. package/dist/index-DiSKzDGR.d.mts +65 -0
  80. package/dist/index-DiSKzDGR.d.mts.map +1 -0
  81. package/dist/index.d.mts +4425 -0
  82. package/dist/index.d.mts.map +1 -0
  83. package/dist/index.mjs +2623 -0
  84. package/dist/index.mjs.map +1 -0
  85. package/dist/package-C58KmGKw.mjs +6 -0
  86. package/dist/package-C58KmGKw.mjs.map +1 -0
  87. package/dist/preview/index.d.mts +90 -0
  88. package/dist/preview/index.d.mts.map +1 -0
  89. package/dist/preview/index.mjs +15 -0
  90. package/dist/preview-engine/audio.mjs +1 -0
  91. package/dist/preview-engine/child_process-AIL2NBWS.mjs +1 -0
  92. package/dist/preview-engine/chunk-24P6DAB3.mjs +1 -0
  93. package/dist/preview-engine/chunk-37EFVZWT.mjs +1 -0
  94. package/dist/preview-engine/chunk-3O5OKR6D.mjs +223 -0
  95. package/dist/preview-engine/chunk-47VT677S.mjs +8 -0
  96. package/dist/preview-engine/chunk-4BEJJKEU.mjs +315 -0
  97. package/dist/preview-engine/chunk-4GEWSUX5.mjs +1 -0
  98. package/dist/preview-engine/chunk-55CCFPUX.mjs +237 -0
  99. package/dist/preview-engine/chunk-5JD65JSJ.mjs +110 -0
  100. package/dist/preview-engine/chunk-5UP7FSGT.mjs +294 -0
  101. package/dist/preview-engine/chunk-5XDHHOF2.mjs +367 -0
  102. package/dist/preview-engine/chunk-6YJP57MZ.mjs +729 -0
  103. package/dist/preview-engine/chunk-6ZOXGAYA.mjs +112 -0
  104. package/dist/preview-engine/chunk-AOLAHYVV.mjs +529 -0
  105. package/dist/preview-engine/chunk-B6PLCMBM.mjs +1 -0
  106. package/dist/preview-engine/chunk-BJKH76OM.mjs +264 -0
  107. package/dist/preview-engine/chunk-BUIQ5TUH.mjs +104 -0
  108. package/dist/preview-engine/chunk-BVF64D6H.mjs +1 -0
  109. package/dist/preview-engine/chunk-CA5N7JRZ.mjs +138 -0
  110. package/dist/preview-engine/chunk-CNSHAFEA.mjs +1 -0
  111. package/dist/preview-engine/chunk-CURR5X7D.mjs +1 -0
  112. package/dist/preview-engine/chunk-CVGM2U4J.mjs +47 -0
  113. package/dist/preview-engine/chunk-CYY366IE.mjs +1 -0
  114. package/dist/preview-engine/chunk-D5PHI6ET.mjs +109 -0
  115. package/dist/preview-engine/chunk-D7MZHP2Y.mjs +275 -0
  116. package/dist/preview-engine/chunk-DPPH3NK2.mjs +182 -0
  117. package/dist/preview-engine/chunk-DPST2XLC.mjs +418 -0
  118. package/dist/preview-engine/chunk-DRLEOHN5.mjs +1 -0
  119. package/dist/preview-engine/chunk-EDIZNO3P.mjs +1 -0
  120. package/dist/preview-engine/chunk-EHIIT4ZR.mjs +52 -0
  121. package/dist/preview-engine/chunk-FKZ4XXPE.mjs +1 -0
  122. package/dist/preview-engine/chunk-G3HW4VER.mjs +60 -0
  123. package/dist/preview-engine/chunk-G76HSKOS.mjs +184 -0
  124. package/dist/preview-engine/chunk-GYG2IIBR.mjs +1 -0
  125. package/dist/preview-engine/chunk-H2F5NVQ6.mjs +63 -0
  126. package/dist/preview-engine/chunk-H5BPCY7N.mjs +188 -0
  127. package/dist/preview-engine/chunk-HAXK42HG.mjs +997 -0
  128. package/dist/preview-engine/chunk-HXMDPMLB.mjs +1 -0
  129. package/dist/preview-engine/chunk-HYBAPT6I.mjs +1 -0
  130. package/dist/preview-engine/chunk-I4FH6HYU.mjs +73 -0
  131. package/dist/preview-engine/chunk-IYVN2QEL.mjs +1 -0
  132. package/dist/preview-engine/chunk-JPXQPP6J.mjs +1 -0
  133. package/dist/preview-engine/chunk-JWNHTRED.mjs +164 -0
  134. package/dist/preview-engine/chunk-KZOLCZIV.mjs +103 -0
  135. package/dist/preview-engine/chunk-L62MRHGZ.mjs +89 -0
  136. package/dist/preview-engine/chunk-LEEZXHQO.mjs +117 -0
  137. package/dist/preview-engine/chunk-LKYN3BM2.mjs +1 -0
  138. package/dist/preview-engine/chunk-LP3EP33S.mjs +610 -0
  139. package/dist/preview-engine/chunk-M2GRYRLM.mjs +111 -0
  140. package/dist/preview-engine/chunk-MC7TZZLD.mjs +134 -0
  141. package/dist/preview-engine/chunk-MT2DZQHO.mjs +1 -0
  142. package/dist/preview-engine/chunk-MTJHQATU.mjs +1 -0
  143. package/dist/preview-engine/chunk-N4LHIPHZ.mjs +340 -0
  144. package/dist/preview-engine/chunk-N4PWLBZ7.mjs +5 -0
  145. package/dist/preview-engine/chunk-NQZKBFC6.mjs +40 -0
  146. package/dist/preview-engine/chunk-NWRSVVTF.mjs +186 -0
  147. package/dist/preview-engine/chunk-P3HBP725.mjs +1 -0
  148. package/dist/preview-engine/chunk-PIAJWALT.mjs +1 -0
  149. package/dist/preview-engine/chunk-PJ3DVG45.mjs +1 -0
  150. package/dist/preview-engine/chunk-QP2NI4XD.mjs +82 -0
  151. package/dist/preview-engine/chunk-SA3JUR6D.mjs +52 -0
  152. package/dist/preview-engine/chunk-SRT2OCQW.mjs +1 -0
  153. package/dist/preview-engine/chunk-SWD76532.mjs +98 -0
  154. package/dist/preview-engine/chunk-SXX7HX34.mjs +191 -0
  155. package/dist/preview-engine/chunk-SZ7YRPKO.mjs +3 -0
  156. package/dist/preview-engine/chunk-TMRLZV5X.mjs +1 -0
  157. package/dist/preview-engine/chunk-U446SQP3.mjs +292 -0
  158. package/dist/preview-engine/chunk-UDNCEHUI.mjs +141 -0
  159. package/dist/preview-engine/chunk-V3H7WWOT.mjs +271 -0
  160. package/dist/preview-engine/chunk-V7ZVVUQU.mjs +108 -0
  161. package/dist/preview-engine/chunk-VJGK7MLJ.mjs +3 -0
  162. package/dist/preview-engine/chunk-VSSB73UU.mjs +58 -0
  163. package/dist/preview-engine/chunk-VXUJWPIK.mjs +1 -0
  164. package/dist/preview-engine/chunk-XD4GKD6H.mjs +5 -0
  165. package/dist/preview-engine/chunk-XKO4RYKN.mjs +3 -0
  166. package/dist/preview-engine/chunk-XOEEGC4Z.mjs +1 -0
  167. package/dist/preview-engine/chunk-YAQFFQPG.mjs +1 -0
  168. package/dist/preview-engine/chunk-YKMBRUAE.mjs +1 -0
  169. package/dist/preview-engine/chunk-YSTLMWCG.mjs +1 -0
  170. package/dist/preview-engine/chunk-Z4ERCLNF.mjs +1 -0
  171. package/dist/preview-engine/chunk-ZEYUXJIV.mjs +1 -0
  172. package/dist/preview-engine/chunk-ZX6APG6E.mjs +117 -0
  173. package/dist/preview-engine/effects.mjs +1 -0
  174. package/dist/preview-engine/esbuild-GWV7CM7D.mjs +1 -0
  175. package/dist/preview-engine/fonts.mjs +1 -0
  176. package/dist/preview-engine/framefields.mjs +1959 -0
  177. package/dist/preview-engine/onnxruntime-node-56GSZEH3.mjs +1 -0
  178. package/dist/preview-engine/player.mjs +155 -0
  179. package/dist/preview-engine/renderers-2AUSIYZN.mjs +1 -0
  180. package/dist/preview-engine/renderers-2QN6KZJP.mjs +1 -0
  181. package/dist/preview-engine/renderers-32SKW7ML.mjs +1 -0
  182. package/dist/preview-engine/renderers-5QYK6766.mjs +1 -0
  183. package/dist/preview-engine/renderers-6BJA6MSU.mjs +251 -0
  184. package/dist/preview-engine/renderers-6QAF3LQ2.mjs +1 -0
  185. package/dist/preview-engine/renderers-7AO5746S.mjs +296 -0
  186. package/dist/preview-engine/renderers-AFYKNM6N.mjs +1 -0
  187. package/dist/preview-engine/renderers-AGMH5CRH.mjs +1 -0
  188. package/dist/preview-engine/renderers-AHSGP6LY.mjs +126 -0
  189. package/dist/preview-engine/renderers-ASTBICLA.mjs +1 -0
  190. package/dist/preview-engine/renderers-BHVPLYNN.mjs +1 -0
  191. package/dist/preview-engine/renderers-D7PVQFVU.mjs +1 -0
  192. package/dist/preview-engine/renderers-DB4ABTNA.mjs +1 -0
  193. package/dist/preview-engine/renderers-F2NFJI5L.mjs +1 -0
  194. package/dist/preview-engine/renderers-FI7YHNLY.mjs +1 -0
  195. package/dist/preview-engine/renderers-GBHULMPH.mjs +1 -0
  196. package/dist/preview-engine/renderers-GUKQUMGG.mjs +55 -0
  197. package/dist/preview-engine/renderers-HGT7QDY3.mjs +1 -0
  198. package/dist/preview-engine/renderers-HOYLA7ZK.mjs +1 -0
  199. package/dist/preview-engine/renderers-KKI2D3MZ.mjs +1 -0
  200. package/dist/preview-engine/renderers-KRAJNV4E.mjs +1 -0
  201. package/dist/preview-engine/renderers-KUGZKSVE.mjs +1 -0
  202. package/dist/preview-engine/renderers-L2EQQIOC.mjs +1 -0
  203. package/dist/preview-engine/renderers-LK3NRMGR.mjs +1 -0
  204. package/dist/preview-engine/renderers-LX654SZ3.mjs +1 -0
  205. package/dist/preview-engine/renderers-MCFQFYEL.mjs +1 -0
  206. package/dist/preview-engine/renderers-O6HOYIPS.mjs +1 -0
  207. package/dist/preview-engine/renderers-OEVXCGE2.mjs +1 -0
  208. package/dist/preview-engine/renderers-QVD6C4CS.mjs +1 -0
  209. package/dist/preview-engine/renderers-R3XEYD5V.mjs +248 -0
  210. package/dist/preview-engine/renderers-RBFWJWVM.mjs +1 -0
  211. package/dist/preview-engine/renderers-RX3VLVLO.mjs +1 -0
  212. package/dist/preview-engine/renderers-SM6JP64K.mjs +1 -0
  213. package/dist/preview-engine/renderers-TKMAATVS.mjs +1 -0
  214. package/dist/preview-engine/renderers-UGZUPONY.mjs +1 -0
  215. package/dist/preview-engine/renderers-UTFXZE3G.mjs +1 -0
  216. package/dist/preview-engine/renderers-UWPH7HBH.mjs +1 -0
  217. package/dist/preview-engine/renderers-UZGECFVO.mjs +1 -0
  218. package/dist/preview-engine/renderers-VGU3LNLT.mjs +1 -0
  219. package/dist/preview-engine/renderers-W3VVM5HB.mjs +1 -0
  220. package/dist/preview-engine/renderers-WJUTT5BB.mjs +1 -0
  221. package/dist/preview-engine/renderers-XA2M4YXK.mjs +1 -0
  222. package/dist/preview-engine/renderers-XIHRFEFQ.mjs +1 -0
  223. package/dist/preview-engine/renderers-XJTA5MFG.mjs +1 -0
  224. package/dist/preview-engine/renderers-XLTY5APF.mjs +1 -0
  225. package/dist/preview-engine/renderers-XZ3VXFGZ.mjs +1 -0
  226. package/dist/preview-engine/renderers-YKUQUCTO.mjs +124 -0
  227. package/dist/preview-engine/renderers-YVN3EIOP.mjs +1 -0
  228. package/dist/preview-engine/renderers-YWRP23SZ.mjs +125 -0
  229. package/dist/preview-engine/renderers-ZPWOUWZJ.mjs +120 -0
  230. package/dist/preview-engine/resvg-js-VMU4A77S.mjs +1 -0
  231. package/dist/preview-engine/server-utils-2FAIV45N.mjs +1 -0
  232. package/dist/preview-engine/sharp-V6ZTBNDW.mjs +1 -0
  233. package/dist/preview-engine/shims/fs-promises.mjs +1 -0
  234. package/dist/preview-engine/shims/fs.mjs +1 -0
  235. package/dist/preview-engine/shims/module.mjs +1 -0
  236. package/dist/preview-engine/shims/os.mjs +1 -0
  237. package/dist/preview-engine/shims/path.mjs +1 -0
  238. package/dist/preview-engine/shims/url.mjs +1 -0
  239. package/dist/preview-engine/signals.mjs +1 -0
  240. package/dist/preview-engine/webgpu-NSSANM4F.mjs +1 -0
  241. package/dist/preview-uQM210iy.mjs +2149 -0
  242. package/dist/preview-uQM210iy.mjs.map +1 -0
  243. package/dist/program-Dl510wmI.mjs +5183 -0
  244. package/dist/program-Dl510wmI.mjs.map +1 -0
  245. package/dist/renderer/index.d.mts +3 -0
  246. package/dist/renderer/index.mjs +6 -0
  247. package/dist/renderer-3BNskNuJ.mjs +3 -0
  248. package/dist/renderer-7DOcIxFG.mjs +288 -0
  249. package/dist/renderer-7DOcIxFG.mjs.map +1 -0
  250. package/dist/renderer-9dHlMQGX.mjs +3 -0
  251. package/dist/renderer-B1CvhW4p.mjs +677 -0
  252. package/dist/renderer-B1CvhW4p.mjs.map +1 -0
  253. package/dist/renderer-B2XzjK0z.mjs +3 -0
  254. package/dist/renderer-B80s47yo.mjs +166 -0
  255. package/dist/renderer-B80s47yo.mjs.map +1 -0
  256. package/dist/renderer-B9-QSJcG.mjs +479 -0
  257. package/dist/renderer-B9-QSJcG.mjs.map +1 -0
  258. package/dist/renderer-BAQmR0Zo.mjs +3 -0
  259. package/dist/renderer-BDLnExoP.mjs +127 -0
  260. package/dist/renderer-BDLnExoP.mjs.map +1 -0
  261. package/dist/renderer-BGXU6vcW.mjs +270 -0
  262. package/dist/renderer-BGXU6vcW.mjs.map +1 -0
  263. package/dist/renderer-BGvORwkQ.mjs +3 -0
  264. package/dist/renderer-BLikd6BK.mjs +3 -0
  265. package/dist/renderer-BMovYRoR.mjs +3 -0
  266. package/dist/renderer-BQHbp-Sp.mjs +243 -0
  267. package/dist/renderer-BQHbp-Sp.mjs.map +1 -0
  268. package/dist/renderer-BREIjsUU.mjs +252 -0
  269. package/dist/renderer-BREIjsUU.mjs.map +1 -0
  270. package/dist/renderer-BSbTJBWc.mjs +3 -0
  271. package/dist/renderer-BTu2EVhF.mjs +3 -0
  272. package/dist/renderer-BU1rwNRT.mjs +3 -0
  273. package/dist/renderer-BXMmISWG.mjs +499 -0
  274. package/dist/renderer-BXMmISWG.mjs.map +1 -0
  275. package/dist/renderer-BZJm3m4f.mjs +3 -0
  276. package/dist/renderer-B_NuVaIP.mjs +744 -0
  277. package/dist/renderer-B_NuVaIP.mjs.map +1 -0
  278. package/dist/renderer-BfJSUjPN.mjs +3 -0
  279. package/dist/renderer-BqyAgNt3.mjs +3 -0
  280. package/dist/renderer-BryTM2g7.mjs +3 -0
  281. package/dist/renderer-BsgIcBKH.mjs +391 -0
  282. package/dist/renderer-BsgIcBKH.mjs.map +1 -0
  283. package/dist/renderer-ByDhfrPE.mjs +422 -0
  284. package/dist/renderer-ByDhfrPE.mjs.map +1 -0
  285. package/dist/renderer-C-H680_l.mjs +3 -0
  286. package/dist/renderer-C17wL9QX.mjs +181 -0
  287. package/dist/renderer-C17wL9QX.mjs.map +1 -0
  288. package/dist/renderer-C2n-EHxg.mjs +1 -0
  289. package/dist/renderer-CB5aWAaf.mjs +343 -0
  290. package/dist/renderer-CB5aWAaf.mjs.map +1 -0
  291. package/dist/renderer-CB7lH5K8.mjs +3 -0
  292. package/dist/renderer-CDLrNgfo.mjs +3 -0
  293. package/dist/renderer-CDOUAN7X.mjs +454 -0
  294. package/dist/renderer-CDOUAN7X.mjs.map +1 -0
  295. package/dist/renderer-CH8sdfYX.mjs +387 -0
  296. package/dist/renderer-CH8sdfYX.mjs.map +1 -0
  297. package/dist/renderer-CIvaRnP_.mjs +261 -0
  298. package/dist/renderer-CIvaRnP_.mjs.map +1 -0
  299. package/dist/renderer-CMzEjdzi.mjs +369 -0
  300. package/dist/renderer-CMzEjdzi.mjs.map +1 -0
  301. package/dist/renderer-COkcU3db.mjs +3302 -0
  302. package/dist/renderer-COkcU3db.mjs.map +1 -0
  303. package/dist/renderer-CQCoggIa.mjs +3 -0
  304. package/dist/renderer-CQdVj2JS.mjs +3 -0
  305. package/dist/renderer-CQiTodg9.mjs +337 -0
  306. package/dist/renderer-CQiTodg9.mjs.map +1 -0
  307. package/dist/renderer-CV2m6k1V.mjs +3 -0
  308. package/dist/renderer-CYY-poLe.mjs +3 -0
  309. package/dist/renderer-CZgB5st8.mjs +3 -0
  310. package/dist/renderer-C_Ki91kc.mjs +3 -0
  311. package/dist/renderer-CclIvsLO.mjs +3 -0
  312. package/dist/renderer-Cj-whdVr.mjs +655 -0
  313. package/dist/renderer-Cj-whdVr.mjs.map +1 -0
  314. package/dist/renderer-CkykdR_D.mjs +3 -0
  315. package/dist/renderer-Cl1oUXMi.mjs +1143 -0
  316. package/dist/renderer-Cl1oUXMi.mjs.map +1 -0
  317. package/dist/renderer-CmApuKjS.mjs +3 -0
  318. package/dist/renderer-CpkiHRhh.mjs +269 -0
  319. package/dist/renderer-CpkiHRhh.mjs.map +1 -0
  320. package/dist/renderer-CszOjcRW.mjs +3 -0
  321. package/dist/renderer-CtVkU_GA.mjs +44 -0
  322. package/dist/renderer-CtVkU_GA.mjs.map +1 -0
  323. package/dist/renderer-Cu074POw.mjs +3 -0
  324. package/dist/renderer-CwQhzcUn.mjs +644 -0
  325. package/dist/renderer-CwQhzcUn.mjs.map +1 -0
  326. package/dist/renderer-CzPWB0Ss.mjs +273 -0
  327. package/dist/renderer-CzPWB0Ss.mjs.map +1 -0
  328. package/dist/renderer-D4qLmox-.mjs +3 -0
  329. package/dist/renderer-D6bWQtr-.mjs +3 -0
  330. package/dist/renderer-D6cJ6MSq.mjs +3 -0
  331. package/dist/renderer-D7EX8IjU.mjs +240 -0
  332. package/dist/renderer-D7EX8IjU.mjs.map +1 -0
  333. package/dist/renderer-DDp7_TUi.d.mts +10 -0
  334. package/dist/renderer-DDp7_TUi.d.mts.map +1 -0
  335. package/dist/renderer-DFKsLrUs.mjs +256 -0
  336. package/dist/renderer-DFKsLrUs.mjs.map +1 -0
  337. package/dist/renderer-DPSsf8-t.mjs +3 -0
  338. package/dist/renderer-DQLGnEFc.mjs +3 -0
  339. package/dist/renderer-DY2SVYUW.mjs +3 -0
  340. package/dist/renderer-DZGtBUCx.mjs +792 -0
  341. package/dist/renderer-DZGtBUCx.mjs.map +1 -0
  342. package/dist/renderer-DabG62XS.mjs +406 -0
  343. package/dist/renderer-DabG62XS.mjs.map +1 -0
  344. package/dist/renderer-DbaQLI4z.mjs +771 -0
  345. package/dist/renderer-DbaQLI4z.mjs.map +1 -0
  346. package/dist/renderer-DjI45OYC.mjs +71 -0
  347. package/dist/renderer-DjI45OYC.mjs.map +1 -0
  348. package/dist/renderer-Dm08-hAU.mjs +323 -0
  349. package/dist/renderer-Dm08-hAU.mjs.map +1 -0
  350. package/dist/renderer-DoAY5JbB.mjs +4 -0
  351. package/dist/renderer-Dp_FfvF-.mjs +401 -0
  352. package/dist/renderer-Dp_FfvF-.mjs.map +1 -0
  353. package/dist/renderer-Dt6fzgX5.mjs +756 -0
  354. package/dist/renderer-Dt6fzgX5.mjs.map +1 -0
  355. package/dist/renderer-DuplLRbp.mjs +3 -0
  356. package/dist/renderer-DvfUbZ31.mjs +3 -0
  357. package/dist/renderer-DxjVQV6f.mjs +311 -0
  358. package/dist/renderer-DxjVQV6f.mjs.map +1 -0
  359. package/dist/renderer-Fco4EmAu.mjs +23868 -0
  360. package/dist/renderer-Fco4EmAu.mjs.map +1 -0
  361. package/dist/renderer-HFfcJlmR.mjs +981 -0
  362. package/dist/renderer-HFfcJlmR.mjs.map +1 -0
  363. package/dist/renderer-I-Sw3JBB.mjs +145 -0
  364. package/dist/renderer-I-Sw3JBB.mjs.map +1 -0
  365. package/dist/renderer-OWQmmg4Z.mjs +697 -0
  366. package/dist/renderer-OWQmmg4Z.mjs.map +1 -0
  367. package/dist/renderer-Q_uUQipO.mjs +3 -0
  368. package/dist/renderer-Ryo2CEFD.mjs +586 -0
  369. package/dist/renderer-Ryo2CEFD.mjs.map +1 -0
  370. package/dist/renderer-Tp6OXWNZ.mjs +257 -0
  371. package/dist/renderer-Tp6OXWNZ.mjs.map +1 -0
  372. package/dist/renderer-UQFCgeNx.mjs +3 -0
  373. package/dist/renderer-WkVrkCVA.mjs +83 -0
  374. package/dist/renderer-WkVrkCVA.mjs.map +1 -0
  375. package/dist/renderer-XcmYTd6P.mjs +3818 -0
  376. package/dist/renderer-XcmYTd6P.mjs.map +1 -0
  377. package/dist/renderer-_uvdg48N.mjs +333 -0
  378. package/dist/renderer-_uvdg48N.mjs.map +1 -0
  379. package/dist/renderer-bZU_ndxf.mjs +8 -0
  380. package/dist/renderer-bZU_ndxf.mjs.map +1 -0
  381. package/dist/renderer-eMsnzJg9.mjs +3 -0
  382. package/dist/renderer-ho_jXJ0H.mjs +254 -0
  383. package/dist/renderer-ho_jXJ0H.mjs.map +1 -0
  384. package/dist/renderer-k2JL79kM.mjs +306 -0
  385. package/dist/renderer-k2JL79kM.mjs.map +1 -0
  386. package/dist/renderer-pHiz78e0.mjs +3 -0
  387. package/dist/renderer-pxXf9dvk.mjs +394 -0
  388. package/dist/renderer-pxXf9dvk.mjs.map +1 -0
  389. package/dist/renderer-vCFTm0oe.mjs +226 -0
  390. package/dist/renderer-vCFTm0oe.mjs.map +1 -0
  391. package/dist/renderer-vvpdx1vk.mjs +379 -0
  392. package/dist/renderer-vvpdx1vk.mjs.map +1 -0
  393. package/dist/renderer-x2s9LmVL.mjs +1121 -0
  394. package/dist/renderer-x2s9LmVL.mjs.map +1 -0
  395. package/dist/renderers-BWg16W-V-BXG_cjhM.mjs +49 -0
  396. package/dist/renderers-BWg16W-V-BXG_cjhM.mjs.map +1 -0
  397. package/dist/signals/index.d.mts +7 -0
  398. package/dist/signals/index.mjs +10 -0
  399. package/dist/signals-BwbdO3AN.mjs +224 -0
  400. package/dist/signals-BwbdO3AN.mjs.map +1 -0
  401. package/dist/signin-CZj4Oc5s.mjs +865 -0
  402. package/dist/signin-CZj4Oc5s.mjs.map +1 -0
  403. package/dist/sso-oidc-C0_31ThY.mjs +1051 -0
  404. package/dist/sso-oidc-C0_31ThY.mjs.map +1 -0
  405. package/dist/sts-DD4ggEXC.mjs +6 -0
  406. package/dist/sts-nXw8RDJI.mjs +1395 -0
  407. package/dist/sts-nXw8RDJI.mjs.map +1 -0
  408. package/package.json +173 -0
@@ -0,0 +1,729 @@
1
+ import{e as O}from"./chunk-BVF64D6H.mjs";O();var _e=`
2
+ struct BiquadUniforms {
3
+ b0 : f32,
4
+ b1 : f32,
5
+ b2 : f32,
6
+ a1 : f32,
7
+ a2 : f32,
8
+ numSamples : u32,
9
+ pad1 : f32,
10
+ pad2 : f32,
11
+ };
12
+
13
+ @group(0) @binding(0) var<uniform> u : BiquadUniforms;
14
+ @group(0) @binding(1) var<storage, read> inAudio : array<f32>;
15
+ @group(0) @binding(2) var<storage, read_write> outAudio : array<f32>;
16
+
17
+ @compute @workgroup_size(1)
18
+ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
19
+ if (gid.x != 0u) { return; }
20
+
21
+ var x1 = 0.0f;
22
+ var x2 = 0.0f;
23
+ var y1 = 0.0f;
24
+ var y2 = 0.0f;
25
+
26
+ let total = u.numSamples;
27
+ for (var i = 0u; i < total; i = i + 1u) {
28
+ let x0 = inAudio[i];
29
+ let y0 = u.b0 * x0 + u.b1 * x1 + u.b2 * x2 - u.a1 * y1 - u.a2 * y2;
30
+
31
+ x2 = x1;
32
+ x1 = x0;
33
+ y2 = y1;
34
+ y1 = y0;
35
+
36
+ outAudio[i] = y0;
37
+ }
38
+ }
39
+ `,ye=`
40
+ struct FeatureUniforms {
41
+ sampleRate : f32,
42
+ numSamples : u32,
43
+ numFrames : u32,
44
+ hopSize : u32,
45
+ windowSize : u32,
46
+ attackAlpha : f32,
47
+ releaseAlpha : f32,
48
+ sensitivity : f32,
49
+ noiseFloorDb : f32,
50
+ dynamicRangeDb : f32,
51
+ curveType : u32, // 0=linear, 1=exp, 2=log, 3=sqr, 4=smoothstep
52
+ beatThreshold : f32,
53
+ beatDecayAlpha : f32,
54
+ extractionMode : u32, // 0=rms, 1=beat, 2=bass, 3=energy, etc.
55
+ pad0 : f32,
56
+ pad1 : f32,
57
+ };
58
+
59
+ @group(0) @binding(0) var<uniform> u : FeatureUniforms;
60
+ @group(0) @binding(1) var<storage, read> rawAudio : array<f32>;
61
+ @group(0) @binding(2) var<storage, read> bassAudio : array<f32>;
62
+ @group(0) @binding(3) var<storage, read_write> outPrimary : array<f32>;
63
+ @group(0) @binding(4) var<storage, read_write> outBeat : array<f32>;
64
+ @group(0) @binding(5) var<storage, read_write> outBass : array<f32>;
65
+ @group(0) @binding(6) var<storage, read_write> outEnergy : array<f32>;
66
+ @group(0) @binding(7) var<storage, read_write> outStats : array<f32>;
67
+
68
+ fn applyCurve(v: f32, curve: u32) -> f32 {
69
+ let cv = clamp(v, 0.0f, 1.0f);
70
+ if (curve == 1u) { // Exponential
71
+ return cv * cv;
72
+ }
73
+ if (curve == 2u) { // Logarithmic
74
+ return log(1.0f + 9.0f * cv) / log(10.0f);
75
+ }
76
+ if (curve == 3u) { // Square
77
+ return cv * cv * cv;
78
+ }
79
+ if (curve == 4u) { // Smoothstep
80
+ return cv * cv * (3.0f - 2.0f * cv);
81
+ }
82
+ return cv; // Linear
83
+ }
84
+
85
+ fn scaleDbToNormalized(rms: f32) -> f32 {
86
+ let eps = 1e-6f;
87
+ let safeRms = max(rms * u.sensitivity, eps);
88
+ let db = 20.0f * log(safeRms) / log(10.0f);
89
+ let minDb = u.noiseFloorDb;
90
+ let maxDb = u.noiseFloorDb + u.dynamicRangeDb;
91
+ let norm = clamp((db - minDb) / (maxDb - minDb), 0.0f, 1.0f);
92
+ return norm;
93
+ }
94
+
95
+ @compute @workgroup_size(1)
96
+ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
97
+ if (gid.x != 0u) { return; }
98
+
99
+ var envFollower = 0.0f;
100
+ var bassFollower = 0.0f;
101
+ var prevBassEnergy = 0.0f;
102
+ var beatEnvelope = 0.0f;
103
+
104
+ let numFrames = u.numFrames;
105
+ let numSamples = u.numSamples;
106
+ let halfWin = u.windowSize / 2u;
107
+
108
+ var minEnergy = 1e6f;
109
+ var maxEnergy = -1e6f;
110
+ var minBass = 1e6f;
111
+ var maxBass = -1e6f;
112
+ var minBeat = 1e6f;
113
+ var maxBeat = -1e6f;
114
+ var minPrimary = 1e6f;
115
+ var maxPrimary = -1e6f;
116
+
117
+ for (var f = 0u; f < numFrames; f = f + 1u) {
118
+ let centerSample = f * u.hopSize;
119
+ let startSample = select(0u, centerSample - halfWin, centerSample >= halfWin);
120
+ let endSample = min(numSamples, centerSample + halfWin);
121
+
122
+ var sumSq = 0.0f;
123
+ var sumBassSq = 0.0f;
124
+ var count = 0.0f;
125
+
126
+ for (var s = startSample; s < endSample; s = s + 1u) {
127
+ let val = rawAudio[s];
128
+ let bVal = bassAudio[s];
129
+ sumSq = sumSq + val * val;
130
+ sumBassSq = sumBassSq + bVal * bVal;
131
+ count = count + 1.0f;
132
+ }
133
+
134
+ let effectiveCount = max(count, 1.0f);
135
+ let rms = sqrt(sumSq / effectiveCount);
136
+ let bassRms = sqrt(sumBassSq / effectiveCount);
137
+
138
+ let normRms = scaleDbToNormalized(rms);
139
+ let normBass = scaleDbToNormalized(bassRms);
140
+
141
+ // Ballistics envelope follower (Attack / Release)
142
+ let alpha = select(u.releaseAlpha, u.attackAlpha, normRms > envFollower);
143
+ envFollower = envFollower + alpha * (normRms - envFollower);
144
+
145
+ let bassAlpha = select(u.releaseAlpha, u.attackAlpha, normBass > bassFollower);
146
+ bassFollower = bassFollower + bassAlpha * (normBass - bassFollower);
147
+
148
+ // Spectral flux / Onset detection on bass energy
149
+ let flux = max(0.0f, bassFollower - prevBassEnergy);
150
+ prevBassEnergy = bassFollower;
151
+
152
+ // Beat pulse triggering and exponential decay
153
+ beatEnvelope = beatEnvelope * u.beatDecayAlpha;
154
+ if (flux > u.beatThreshold) {
155
+ let hit = clamp((flux - u.beatThreshold) / max(0.01f, 0.15f - u.beatThreshold), 0.6f, 1.0f);
156
+ beatEnvelope = max(beatEnvelope, hit);
157
+ }
158
+
159
+ let finalEnergy = applyCurve(envFollower, u.curveType);
160
+ let finalBass = applyCurve(bassFollower, u.curveType);
161
+ let finalBeat = applyCurve(beatEnvelope, u.curveType);
162
+
163
+ var finalPrimary = finalEnergy;
164
+ if (u.extractionMode == 1u) { // transient_beat
165
+ finalPrimary = finalBeat;
166
+ } else if (u.extractionMode == 2u || u.extractionMode == 3u) { // sub_bass or bass
167
+ finalPrimary = finalBass;
168
+ }
169
+
170
+ minEnergy = min(minEnergy, finalEnergy);
171
+ maxEnergy = max(maxEnergy, finalEnergy);
172
+ minBass = min(minBass, finalBass);
173
+ maxBass = max(maxBass, finalBass);
174
+ minBeat = min(minBeat, finalBeat);
175
+ maxBeat = max(maxBeat, finalBeat);
176
+ minPrimary = min(minPrimary, finalPrimary);
177
+ maxPrimary = max(maxPrimary, finalPrimary);
178
+
179
+ outPrimary[f] = finalPrimary;
180
+ outBeat[f] = finalBeat;
181
+ outBass[f] = finalBass;
182
+ outEnergy[f] = finalEnergy;
183
+ }
184
+
185
+ if (numFrames > 0u) {
186
+ outStats[0] = minPrimary;
187
+ outStats[1] = select(maxPrimary, minPrimary + 1.0f, maxPrimary <= minPrimary + 1e-5f);
188
+ outStats[2] = minBeat;
189
+ outStats[3] = select(maxBeat, minBeat + 1.0f, maxBeat <= minBeat + 1e-5f);
190
+ outStats[4] = minBass;
191
+ outStats[5] = select(maxBass, minBass + 1.0f, maxBass <= minBass + 1e-5f);
192
+ outStats[6] = minEnergy;
193
+ outStats[7] = select(maxEnergy, minEnergy + 1.0f, maxEnergy <= minEnergy + 1e-5f);
194
+ } else {
195
+ outStats[0] = 0.0f;
196
+ outStats[1] = 1.0f;
197
+ outStats[2] = 0.0f;
198
+ outStats[3] = 1.0f;
199
+ outStats[4] = 0.0f;
200
+ outStats[5] = 1.0f;
201
+ outStats[6] = 0.0f;
202
+ outStats[7] = 1.0f;
203
+ }
204
+ }
205
+ `,ve=`
206
+ struct TexturePackUniforms {
207
+ numFrames : u32,
208
+ texWidth : u32,
209
+ pad1 : f32,
210
+ pad2 : f32,
211
+ };
212
+
213
+ @group(0) @binding(0) var<uniform> u : TexturePackUniforms;
214
+ @group(0) @binding(1) var<storage, read> inPrimary : array<f32>;
215
+ @group(0) @binding(2) var<storage, read> inBeat : array<f32>;
216
+ @group(0) @binding(3) var<storage, read> inBass : array<f32>;
217
+ @group(0) @binding(4) var<storage, read> inEnergy : array<f32>;
218
+ @group(0) @binding(5) var outTex : texture_storage_2d<rgba16float, write>;
219
+
220
+ @compute @workgroup_size(64)
221
+ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
222
+ let x = gid.x;
223
+ if (x >= u.texWidth) { return; }
224
+
225
+ let progress = f32(x) / f32(u.texWidth - 1u);
226
+ let frameFloat = progress * f32(u.numFrames - 1u);
227
+ let f0 = u32(clamp(floor(frameFloat), 0.0f, f32(u.numFrames - 1u)));
228
+ let f1 = u32(clamp(ceil(frameFloat), 0.0f, f32(u.numFrames - 1u)));
229
+ let weight = fract(frameFloat);
230
+
231
+ let prim = mix(inPrimary[f0], inPrimary[f1], weight);
232
+ let beat = mix(inBeat[f0], inBeat[f1], weight);
233
+ let bass = mix(inBass[f0], inBass[f1], weight);
234
+ let nrg = mix(inEnergy[f0], inEnergy[f1], weight);
235
+
236
+ textureStore(outTex, vec2<i32>(i32(x), 0), vec4<f32>(prim, beat, bass, nrg));
237
+ }
238
+ `,Pe=`
239
+ struct PaceUniforms {
240
+ baseSpeed : f32,
241
+ gain : f32,
242
+ dt : f32,
243
+ numFrames : u32,
244
+ };
245
+
246
+ @group(0) @binding(0) var<uniform> u : PaceUniforms;
247
+ @group(0) @binding(1) var<storage, read> inSignal : array<f32>;
248
+ @group(0) @binding(2) var<storage, read_write> outSourceTimestamps : array<f32>;
249
+
250
+ @compute @workgroup_size(1)
251
+ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
252
+ if (gid.x != 0u) { return; }
253
+
254
+ var accumulatedTime = 0.0f;
255
+ let total = u.numFrames;
256
+
257
+ for (var f = 0u; f < total; f = f + 1u) {
258
+ let sig = inSignal[f];
259
+ let instantaneousSpeed = max(0.01f, u.baseSpeed + u.gain * sig);
260
+ accumulatedTime = accumulatedTime + instantaneousSpeed * u.dt;
261
+ outSourceTimestamps[f] = accumulatedTime;
262
+ }
263
+ }
264
+ `;function Be(f,e,a){let t=2*Math.PI*e/f,r=Math.sin(t)/(2*a),n=Math.cos(t),s=r,u=0,o=-r,p=1+r,g=-2*n,d=1-r;return{b0:s/p,b1:u/p,b2:o/p,a1:g/p,a2:d/p}}var Se=f=>{switch(f){case"exponential":return 1;case"logarithmic":return 2;case"square":return 3;case"smoothstep":return 4;default:return 0}},we=f=>{switch(f){case"transient_beat":return 1;case"sub_bass":return 2;case"bass":return 3;case"mid":return 4;case"high":return 5;case"spectral_flux":return 6;default:return 0}},Z=class f{static pipelineCache=new WeakMap;static getPipeline(e,a,t){let r=f.pipelineCache.get(e);r||(r=new Map,f.pipelineCache.set(e,r));let n=r.get(a);if(!n){let s=e.createShaderModule({label:`${a}.wgsl`,code:t});n=e.createComputePipeline({label:a,layout:"auto",compute:{module:s,entryPoint:"main"}}),r.set(a,n)}return n}static async extractFeatures(e,a,t,r,n={},s=512){let u=a.length;if(u===0||a[0].length===0)throw new Error("Empty audio buffer supplied to AudioSignalComputePipeline.");let o=a[0].length,p=o/t,g=Math.max(1,Math.ceil(p*r)),d=Math.max(1,Math.round(t/r)),i=Math.max(32,Math.round(d*2)),_=new Float32Array(o);for(let ae=0;ae<u;ae++){let xe=a[ae];for(let Q=0;Q<o;Q++)_[Q]+=xe[Q]/u}let S=e.createBuffer({size:o*4,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,label:"audio_raw_pcm_buffer"});e.queue.writeBuffer(S,0,_);let l=e.createBuffer({size:o*4,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,label:"audio_bass_filtered_buffer"}),h=e.createBuffer({size:g*4,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,label:"audio_primary_signal_buffer"}),y=e.createBuffer({size:g*4,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,label:"audio_beat_signal_buffer"}),B=e.createBuffer({size:g*4,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,label:"audio_bass_signal_buffer"}),v=e.createBuffer({size:g*4,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,label:"audio_energy_signal_buffer"}),b=f.getPipeline(e,"AudioBiquadFilterPipeline",_e),m=Be(t,120,1.2),c=new Float32Array([m.b0,m.b1,m.b2,m.a1,m.a2,0,0,0]);new Uint32Array(c.buffer)[5]=o;let x=e.createBuffer({size:c.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"audio_biquad_uniform_buffer"});e.queue.writeBuffer(x,0,c);let M=e.createBindGroup({layout:b.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:x}},{binding:1,resource:{buffer:S}},{binding:2,resource:{buffer:l}}]}),P=f.getPipeline(e,"AudioFeatureExtractionPipeline",ye),U=n.attackMs??10,A=n.releaseMs??120,$=1-Math.exp(-1/(U/1e3*r)),G=1-Math.exp(-1/(A/1e3*r)),w=n.beatDecayMs??80,F=Math.exp(-1/(w/1e3*r)),T=n.noiseFloorDb??-48,R=n.dynamicRangeDb??48,D=new ArrayBuffer(64),E=new Float32Array(D),k=new Uint32Array(D);E[0]=t,k[1]=o,k[2]=g,k[3]=d,k[4]=i,E[5]=$,E[6]=G,E[7]=n.sensitivity??1,E[8]=T,E[9]=R,k[10]=Se(n.curve),E[11]=n.beatThreshold??.08,E[12]=F,k[13]=we(n.extractionMode),E[14]=0,E[15]=0;let q=e.createBuffer({size:D.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"audio_feature_uniform_buffer"});e.queue.writeBuffer(q,0,D);let N=e.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,label:"audio_feature_stats_buffer"}),W=e.createBuffer({size:32,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST,label:"audio_feature_stats_read_buffer"}),pe=e.createBindGroup({layout:P.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:q}},{binding:1,resource:{buffer:S}},{binding:2,resource:{buffer:l}},{binding:3,resource:{buffer:h}},{binding:4,resource:{buffer:y}},{binding:5,resource:{buffer:B}},{binding:6,resource:{buffer:v}},{binding:7,resource:{buffer:N}}]}),ee=Math.max(s,128),te=e.createTexture({size:[ee,1,1],format:"rgba16float",usage:GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,label:"audio_extracted_signal_texture"}),oe=f.getPipeline(e,"AudioTexturePackPipeline",ve),le=new Uint32Array([g,ee,0,0]),re=e.createBuffer({size:le.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"audio_pack_uniform_buffer"});e.queue.writeBuffer(re,0,le);let be=e.createBindGroup({layout:oe.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:re}},{binding:1,resource:{buffer:h}},{binding:2,resource:{buffer:y}},{binding:3,resource:{buffer:B}},{binding:4,resource:{buffer:v}},{binding:5,resource:te.createView()}]}),C=e.createCommandEncoder({label:"audio_signal_extractor_encoder"}),H=C.beginComputePass({label:"audio_biquad_pass"});H.setPipeline(b),H.setBindGroup(0,M),H.dispatchWorkgroups(1),H.end();let X=C.beginComputePass({label:"audio_feature_pass"});X.setPipeline(P),X.setBindGroup(0,pe),X.dispatchWorkgroups(1),X.end(),C.copyBufferToBuffer(N,0,W,0,32);let z=e.createBuffer({size:g*4,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST,label:"audio_primary_readback"}),Y=e.createBuffer({size:g*4,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST,label:"audio_beat_readback"}),I=e.createBuffer({size:g*4,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST,label:"audio_bass_readback"}),j=e.createBuffer({size:g*4,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST,label:"audio_energy_readback"});C.copyBufferToBuffer(h,0,z,0,g*4),C.copyBufferToBuffer(y,0,Y,0,g*4),C.copyBufferToBuffer(B,0,I,0,g*4),C.copyBufferToBuffer(v,0,j,0,g*4);let J=C.beginComputePass({label:"audio_pack_pass"});J.setPipeline(oe),J.setBindGroup(0,be),J.dispatchWorkgroups(Math.ceil(ee/64)),J.end(),e.queue.submit([C.finish()]),await Promise.all([W.mapAsync(GPUMapMode.READ),z.mapAsync(GPUMapMode.READ),Y.mapAsync(GPUMapMode.READ),I.mapAsync(GPUMapMode.READ),j.mapAsync(GPUMapMode.READ)]);let V=new Float32Array(W.getMappedRange().slice(0)),de={primary:new Float32Array(z.getMappedRange().slice(0)),beat:new Float32Array(Y.getMappedRange().slice(0)),bass:new Float32Array(I.getMappedRange().slice(0)),energy:new Float32Array(j.getMappedRange().slice(0))};W.unmap(),W.destroy(),N.destroy(),z.unmap(),z.destroy(),Y.unmap(),Y.destroy(),I.unmap(),I.destroy(),j.unmap(),j.destroy();let he={primary:{min:V[0],max:V[1]},beat:{min:V[2],max:V[3]},bass:{min:V[4],max:V[5]},energy:{min:V[6],max:V[7]}};return x.destroy(),q.destroy(),re.destroy(),S.destroy(),l.destroy(),{primaryBuffer:h,beatBuffer:y,bassBuffer:B,energyBuffer:v,texture:te,textureView:te.createView(),numFrames:g,durationSec:p,stats:he,channelSamples:de}}static computePaceTimestamps(e,a,t,r,n=1,s=1){let u=e.createBuffer({size:t*4,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,label:"audio_pace_timestamps_buffer"}),o=f.getPipeline(e,"AudioPaceIntegralPipeline",Pe),p=1/r,g=new Float32Array([n,s,p,0]);new Uint32Array(g.buffer)[3]=t;let d=e.createBuffer({size:g.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"audio_pace_uniform_buffer"});e.queue.writeBuffer(d,0,g);let i=e.createBindGroup({layout:o.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:d}},{binding:1,resource:{buffer:a}},{binding:2,resource:{buffer:u}}]}),_=e.createCommandEncoder({label:"audio_pace_integral_encoder"}),S=_.beginComputePass({label:"audio_pace_pass"});return S.setPipeline(o),S.setBindGroup(0,i),S.dispatchWorkgroups(1),S.end(),e.queue.submit([_.finish()]),d.destroy(),u}};O();var Ue=`const PI: f32 = ${Math.PI}f;
265
+ const TAU: f32 = ${Math.PI*2}f;
266
+ const E: f32 = ${Math.E}f;`,$e=["t: f32","x: f32","y: f32","z: f32","i: u32","n: u32","frame: u32","color: vec4f","t_elapsed: f32","duration: f32"];function se(f,e){let a=Te(e),t=f.fnOutputType||"f32",r=f.fnParams??[],n=r.map(l=>`${l.name}: ${l.type}`),s=[...$e,...n].join(", "),u=`fn ${a}(${s}) -> ${t}`,o=f.fnBody??"",p={...f};if(!f.baseType||f.baseType==="custom"){let l=Fe(f.fnBody??"",f);l.baseType&&(p={...f,...l})}p.baseType&&p.baseType!=="custom"&&(o=Me(p));let g=o.split(`
267
+ `).map(l=>` ${l}`).join(`
268
+ `),{valid:d,validationWarning:i}=Ee(g,t),_=g;!d&&i==="Function body has no return statement."&&(t==="vec2f"?_+=`
269
+ return vec2<f32>(0.0);`:t==="vec3f"?_+=`
270
+ return vec3<f32>(0.0);`:t==="vec4f"?_+=`
271
+ return vec4<f32>(0.0);`:_+=`
272
+ return 0.0;`);let S=[Ue,"",`${u} {`,_,"}"].join(`
273
+ `);return{name:a,wgsl:S,signature:u,outputType:t,params:r,valid:d,validationWarning:i}}function Ge(f,e){return[` let ${e}_n1: f32 = 7.5625;`,` let ${e}_d1: f32 = 2.75;`,` let ${e}_r1: f32 = ${e}_n1 * (${f}) * (${f});`,` let ${e}_x2: f32 = (${f}) - 1.5 / ${e}_d1;`,` let ${e}_r2: f32 = ${e}_n1 * ${e}_x2 * ${e}_x2 + 0.75;`,` let ${e}_x3: f32 = (${f}) - 2.25 / ${e}_d1;`,` let ${e}_r3: f32 = ${e}_n1 * ${e}_x3 * ${e}_x3 + 0.9375;`,` let ${e}_x4: f32 = (${f}) - 2.625 / ${e}_d1;`,` let ${e}_r4: f32 = ${e}_n1 * ${e}_x4 * ${e}_x4 + 0.984375;`,` let ${e}_s1: f32 = select(${e}_r4, ${e}_r3, (${f}) < 2.5 / ${e}_d1);`,` let ${e}_s2: f32 = select(${e}_s1, ${e}_r2, (${f}) < 2.0 / ${e}_d1);`,` let ${e}: f32 = select(${e}_s2, ${e}_r1, (${f}) < 1.0 / ${e}_d1);`].join(`
274
+ `)}function K(f,e,a){switch(f){case"linear":return` let ${a}: f32 = ${e};`;case"smoothstep":return` let ${a}: f32 = (${e}) * (${e}) * (3.0 - 2.0 * (${e}));`;case"smootherstep":return` let ${a}: f32 = (${e}) * (${e}) * (${e}) * ((${e}) * ((${e}) * 6.0 - 15.0) + 10.0);`;case"sine":return` let ${a}: f32 = 1.0 - cos((${e}) * PI * 0.5);`;case"quad":return` let ${a}: f32 = (${e}) * (${e});`;case"cubic":return` let ${a}: f32 = (${e}) * (${e}) * (${e});`;case"quart":return` let ${a}: f32 = pow(${e}, 4.0);`;case"quint":return` let ${a}: f32 = pow(${e}, 5.0);`;case"expo":return` let ${a}: f32 = select(pow(2.0, 10.0 * (${e}) - 10.0), 0.0, (${e}) <= 0.0001);`;case"circ":return` let ${a}: f32 = 1.0 - sqrt(clamp(1.0 - (${e}) * (${e}), 0.0, 1.0));`;case"back":return[` let ${a}_c1: f32 = 1.70158;`,` let ${a}_c3: f32 = ${a}_c1 + 1.0;`,` let ${a}: f32 = ${a}_c3 * (${e}) * (${e}) * (${e}) - ${a}_c1 * (${e}) * (${e});`].join(`
275
+ `);case"elastic":return[` let ${a}_c4: f32 = (2.0 * PI) / 3.0;`,` let ${a}_raw: f32 = -pow(2.0, 10.0 * (${e}) - 10.0) * sin(((${e}) * 10.0 - 10.75) * ${a}_c4);`,` let ${a}_lo: f32 = select(${a}_raw, 0.0, (${e}) <= 0.0001);`,` let ${a}: f32 = select(${a}_lo, 1.0, (${e}) >= 0.9999);`].join(`
276
+ `);case"bounce":{let t=`${a}_bx`,r=`${a}_bo`;return[` let ${t}: f32 = 1.0 - (${e});`,Ge(t,r),` let ${a}: f32 = 1.0 - ${r};`].join(`
277
+ `)}}}function fe(f,e,a,t){if(f==="linear"||f==="smoothstep"||f==="smootherstep"||e==="in")return K(f,a,t);if(e==="out"){let s=`${t}_src`;return[K(f,`1.0 - (${a})`,s),` let ${t}: f32 = 1.0 - ${s};`].join(`
278
+ `)}let r=`${t}_in`,n=`${t}_out`;return[K(f,`(${a}) * 2.0`,r),K(f,`2.0 - (${a}) * 2.0`,n),` let ${t}: f32 = select(1.0 - ${n} * 0.5, ${r} * 0.5, (${a}) < 0.5);`].join(`
279
+ `)}function Me(f){let e=[],a=f.baseEnabled??!0,t=f.fmEnabled??!1;if(a&&t){let s=(f.fmAmplitude??1).toFixed(5),u=(f.fmFrequency??.5).toFixed(5);e.push(" // Frequency Modulation"),e.push(` let modulator = sin(t * ${u} * TAU) * ${s};`),e.push(" let t_mod = t + modulator;")}else e.push(" let t_mod = t;");if(e.push(" // Base Waveform"),!a)e.push(" var val: f32 = 0.0;");else{let s=f.baseType??"sine";s==="noise_smooth"?(e.push(" let noise_t = t_mod * u.frequency + u.phase;"),e.push(" let noise_i = floor(noise_t);"),e.push(" let noise_f = fract(noise_t);"),e.push(" let noise_u = noise_f * noise_f * (3.0 - 2.0 * noise_f);"),e.push(" let n0 = fract(sin(noise_i * 12.9898) * 43758.5453);"),e.push(" let n1 = fract(sin((noise_i + 1.0) * 12.9898) * 43758.5453);"),e.push(" let noise_val = mix(n0, n1, noise_u) * 2.0 - 1.0;")):s==="noise_white"?e.push(" let noise_val = fract(sin(t_mod * 12.9898 + u.phase) * 43758.5453) * 2.0 - 1.0;"):s==="pulse"?(e.push(" let pulse_duty = select(clamp(u.phase, 0.01, 0.99), 0.5, u.phase == 0.0);"),e.push(" let pulse_val = select(-1.0, 1.0, fract(t_mod * u.frequency) < pulse_duty);")):s==="bounce"?e.push(" let bounce_val = abs(sin(t_mod * u.frequency * PI + u.phase));"):s==="staircase"&&e.push(" let stair_val = floor(fract(t_mod * u.frequency + u.phase / TAU) * 8.0) / 7.0 * 2.0 - 1.0;");let u="";switch(s){case"sine":u="u.amplitude * sin(t_mod * u.frequency * TAU + u.phase) + u.offset";break;case"triangle":u="u.amplitude * (2.0 * abs(2.0 * fract(t_mod * u.frequency + u.phase / TAU) - 1.0) - 1.0) + u.offset";break;case"sawtooth":u="u.amplitude * (2.0 * (t_mod * u.frequency + u.phase / TAU - floor(t_mod * u.frequency + u.phase / TAU + 0.5))) + u.offset";break;case"square":u="u.amplitude * sign(sin(t_mod * u.frequency * TAU + u.phase)) + u.offset";break;case"constant":u="u.offset";break;case"noise_smooth":u="u.amplitude * noise_val + u.offset";break;case"noise_white":u="u.amplitude * noise_val + u.offset";break;case"pulse":u="u.amplitude * pulse_val + u.offset";break;case"bounce":u="u.amplitude * bounce_val + u.offset";break;case"staircase":u="u.amplitude * stair_val + u.offset";break;default:u="u.amplitude * sin(t_mod * u.frequency * TAU + u.phase) + u.offset";break}e.push(` var val: f32 = ${u};`)}let r=f.envelopeEnabled??!1,n=f.gateEnabled??!1;if(r){e.push(" // Time Envelope");let s=f.gateStartFrame??0,u=f.gateEndFrame??100;(f.envelopeUseFrame??!0)&&n?e.push(` let progress = select(0.0, clamp((f32(frame) - ${s.toFixed(1)}) / (${u.toFixed(1)} - ${s.toFixed(1)}), 0.0, 1.0), ${u}u > ${s}u);`):e.push(" let progress = select(0.0, clamp(t_elapsed / duration, 0.0, 1.0), duration > 0.0);");let p=f.envelopeFamily??"sine",g=f.envelopeMode??"in_out",d=f.envelopePattern??"ramp_up",i=f.envelopeCycles??2;if(d==="bell"||d==="loop"){if(d==="loop"){let _=Math.max(1,i).toFixed(1);e.push(` let env_loop: f32 = fract(progress * ${_});`),e.push(" let env_folded: f32 = 1.0 - abs(env_loop * 2.0 - 1.0);")}else e.push(" let env_folded: f32 = 1.0 - abs(progress * 2.0 - 1.0);");e.push(fe(p,g,"env_folded","env_eased")),e.push(" let env_factor: f32 = env_eased;")}else e.push(fe(p,g,"progress","env_eased")),e.push(d==="ramp_up"?" let env_factor: f32 = env_eased;":" let env_factor: f32 = 1.0 - env_eased;");e.push(" val = mix(u.offset - u.amplitude, val, env_factor);")}if(n){let s=f.gateStartFrame??0,u=f.gateEndFrame??100,o=f.gateIdleValue??0;e.push(" // Time Gate"),e.push(` if (frame < ${s}u || frame > ${u}u) {`),e.push(` val = ${o.toFixed(5)};`),e.push(" }")}return e.push(""),e.push(" return val;"),e.join(`
280
+ `)}var ce={fade_in:{family:"linear",mode:"in",pattern:"ramp_up"},fade_out:{family:"linear",mode:"in",pattern:"ramp_down"},ping_pong:{family:"linear",mode:"in",pattern:"bell"},expo_decay:{family:"expo",mode:"in",pattern:"ramp_down"},smooth_in:{family:"smoothstep",mode:"in",pattern:"ramp_up"},smooth_out:{family:"smoothstep",mode:"in",pattern:"ramp_down"},sine_bell:{family:"sine",mode:"in",pattern:"bell"},spring:{family:"elastic",mode:"out",pattern:"ramp_up"}};function Ae(f){return f&&f in ce?ce[f]:{family:"sine",mode:"in_out",pattern:"ramp_up"}}function Fe(f,e){let a=f.match(/\/\* SIGNAL_BUILDER_STATE:\s*([\s\S]*?)\s*\*\//);if(a)try{let t=JSON.parse(a[1]),r=!!t.envelope?.family,n=r?{family:t.envelope.family,mode:t.envelope.mode??"in",pattern:t.envelope.pattern??"ramp_up"}:Ae(t.envelope?.type);return{baseEnabled:t.base?.enabled??!0,baseType:t.base?.type??"sine",fmEnabled:t.fm?.enabled??!1,fmAmplitude:e?.fmAmplitude??t.fm?.amplitude??1,fmFrequency:e?.fmFrequency??t.fm?.frequency??.5,envelopeEnabled:t.envelope?.enabled??!1,envelopeFamily:n.family,envelopeMode:n.mode,envelopePattern:n.pattern,envelopeCycles:r?t.envelope?.cycles??2:2,envelopeUseFrame:e?.envelopeUseFrame??t.envelope?.useFrame??!0,gateEnabled:e?.gateEnabled??t.gate?.enabled??!1,gateStartFrame:e?.gateStartFrame??t.gate?.startFrame??0,gateEndFrame:e?.gateEndFrame??t.gate?.endFrame??100,gateIdleValue:e?.gateIdleValue??t.gate?.idleValue??0}}catch{}return{}}function Te(f){return`signal_${f.replace(/[^a-zA-Z0-9]/g,"_")}`}function Ee(f,e){if(!/\breturn\b/.test(f))return{valid:!1,validationWarning:"Function body has no return statement."};let t=/\breturn\s+vec(\d)f?\(/.exec(f);if(t){let r=parseInt(t[1],10);if(e==="f32")return{valid:!1,validationWarning:`Returning vec${r}f but output type is f32.`}}return{valid:!0}}O();O();function De(f){let e=new Float32Array([f]),a=new Uint32Array(e.buffer)[0],t=a>>>16&32768,r=(a>>>23&255)-127+15,n=a&8388607;return r<=0?r<-10?t:(n=(n|8388608)>>1-r,t|n+4096>>13):r>=31?t|31744:t|r<<10|n+4096>>13}function ie(f){if(typeof Float16Array<"u")return new Uint16Array(new Float16Array(f).buffer);let e=f.length,a=new Uint16Array(e);for(let t=0;t<e;t++)a[t]=De(f[t]);return a}function me(f){return Array.isArray(f)||ArrayBuffer.isView(f)&&!(f instanceof DataView)}var ue=class{deviceCache=new WeakMap;statsMap=new Map;statsListeners=new Map;setStats(e,a){this.statsMap.set(e,a);let t=this.statsListeners.get(e);if(t)for(let r of t)r(a)}getStats(e){return this.statsMap.get(e)}onStats(e,a){let t=this.statsListeners.get(e);t||(t=new Set,this.statsListeners.set(e,t)),t.add(a);let r=this.statsMap.get(e);return r&&a(r),()=>{t?.delete(a),t?.size===0&&this.statsListeners.delete(e)}}computeSignalFingerprint(e,a=0,t=new Set){if(e==null)return"";if(typeof e=="number")return`num:${e}`;if(typeof e=="string")return`str:${e}`;if(typeof e=="boolean")return`bool:${e}`;if(typeof e!="object")return"";if(t.has(e)||a>8){let d=e;return`ref:${d.nodeId||d.virtualMedia?.operation?.nodeId||"seen"}`}t.add(e);let r=e,n=r.samples??r.data?.samples,s=(typeof r.nodeId=="string"?r.nodeId:void 0)||(typeof r.virtualMedia?.operation?.nodeId=="string"?r.virtualMedia.operation?.nodeId:void 0),u;a>0&&s&&(u=this.getStats(s));let o=r.signalConfig,p=r.operation??o?.operation??r.config?.operation??r.data?.operation,g={type:r.type,op:r.op,operation:p,bValue:r.bValue??o?.bValue??r.config?.bValue??r.data?.bValue,value:r.value,inMin:r.inMin??o?.inMin,inMax:r.inMax??o?.inMax,outMin:r.outMin??o?.outMin,outMax:r.outMax??o?.outMax,clampMin:r.clampMin??o?.clampMin,clampMax:r.clampMax??o?.clampMax,exponent:r.exponent??o?.exponent,edge0:r.edge0??o?.edge0,edge1:r.edge1??o?.edge1,customWGSL:r.customWGSL||r.fnBody||r.wgsl||o?.customWGSL||o?.fnBody,amplitude:r.amplitude,frequency:r.frequency,phase:r.phase,offset:r.offset,fnParams:r.fnParams,sourceUrl:r.sourceUrl??r.url,extractionMode:r.extractionMode,channel:r.channel,nodeId:s,samplesLen:n?.length,sample0:n?.[0],sampleMid:n&&n.length>1?n[Math.floor(n.length/2)]:void 0,sampleLast:n&&n.length>2?n[n.length-1]:void 0,upstreamStats:u?`${u.min}:${u.max}`:void 0,sigA:r.signalA?this.computeSignalFingerprint(r.signalA,a+1,t):void 0,sigB:r.signalB?this.computeSignalFingerprint(r.signalB,a+1,t):void 0};return JSON.stringify(g)}getDeviceResources(e){let a=this.deviceCache.get(e);return a||(a={resources:new Map,masterAudioTextures:new Map,dummy1x1TextureView:null,dummyBuffer:null,pipelineCache:new Map,defaultSampler:null},this.deviceCache.set(e,a)),a}getSampler(e){let a=this.getDeviceResources(e);return a.defaultSampler||(a.defaultSampler=e.createSampler({magFilter:"linear",minFilter:"linear"})),a.defaultSampler}clear(e,a){if(!a)return;let t=this.deviceCache.get(a);if(!t)return;let r=`${e}:`;for(let[n,s]of t.resources.entries())n.startsWith(r)&&(s.buffer?.destroy(),s.texture?.destroy(),s.uniformBuffer?.destroy(),t.resources.delete(n));for(let[n,s]of t.masterAudioTextures.entries())n.startsWith(r)&&(s.texture.destroy(),t.masterAudioTextures.delete(n))}getDummy1x1TextureView(e){let a=this.getDeviceResources(e);if(a.dummy1x1TextureView)return a.dummy1x1TextureView;let t=e.createTexture({size:[1,1,1],format:"rgba16float",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,label:"dummy_1x1_signal_texture"});return e.queue.writeTexture({texture:t},new Uint16Array([0,0,0,15360]),{bytesPerRow:8,rowsPerImage:1},[1,1,1]),a.dummy1x1TextureView=t.createView(),a.dummy1x1TextureView}getDummyBuffer(e){let a=this.getDeviceResources(e);return a.dummyBuffer||(a.dummyBuffer=e.createBuffer({size:256,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,label:"dummy_signal_buffer"})),a.dummyBuffer}registerBuffer(e,a,t,r){let n=this.getDeviceResources(e),s=`${r??"global"}:${a}`,u=n.resources.get(s)??n.resources.get(`global:${a}`),o={...u,type:u?.texture?"combined":"1d-buffer",buffer:t,lastProcessedFrame:-1,isExternal:!0};n.resources.set(s,o),r&&n.resources.set(`global:${a}`,o)}registerTexture(e,a,t,r,n,s){let u=this.getDeviceResources(e),o=`${n??"global"}:${a}`,p=u.resources.get(o)??u.resources.get(`global:${a}`),g={...p,type:p?.buffer?"combined":"2d-texture",texture:t,textureView:r,lastProcessedFrame:-1,isExternal:!0,duration:s!==void 0?s:p?.duration};u.resources.set(o,g),n&&u.resources.set(`global:${a}`,g)}getMasterTextureView(e,a,t){let r=this.getDeviceResources(e),n=`${t??"global"}:${a}`,s=a.replace(/_(beat|bass|energy)$/,"");return r.masterAudioTextures.get(n)?.textureView??r.masterAudioTextures.get(`global:${a}`)?.textureView??r.masterAudioTextures.get(`${t??"global"}:${s}`)?.textureView??r.masterAudioTextures.get(`global:${s}`)?.textureView??r.resources.get(n)?.textureView??r.resources.get(`global:${a}`)?.textureView??r.resources.get(`${t??"global"}:${s}`)?.textureView??r.resources.get(`global:${s}`)?.textureView}getMasterTexture(e,a,t){let r=this.getDeviceResources(e),n=`${t??"global"}:${a}`,s=a.replace(/_(beat|bass|energy)$/,"");return r.masterAudioTextures.get(n)?.texture??r.masterAudioTextures.get(`global:${a}`)?.texture??r.masterAudioTextures.get(`${t??"global"}:${s}`)?.texture??r.masterAudioTextures.get(`global:${s}`)?.texture??r.resources.get(n)?.texture??r.resources.get(`global:${a}`)?.texture??r.resources.get(`${t??"global"}:${s}`)?.texture??r.resources.get(`global:${s}`)?.texture}channelSamplesMap=new Map;setChannelSamples(e,a,t){let r=`${t??"global"}:${e}`,n=e.replace(/_(beat|bass|energy)$/,"");this.channelSamplesMap.set(r,a),this.channelSamplesMap.set(`global:${e}`,a),n!==e&&(this.channelSamplesMap.set(`${t??"global"}:${n}`,a),this.channelSamplesMap.set(`global:${n}`,a))}getChannelSamples(e,a="primary",t){let r=`${t??"global"}:${e}`,n=e.replace(/_(beat|bass|energy)$/,""),s=this.channelSamplesMap.get(r)??this.channelSamplesMap.get(`global:${e}`)??this.channelSamplesMap.get(`${t??"global"}:${n}`)??this.channelSamplesMap.get(`global:${n}`);return s?s[a]??s.primary:void 0}getDuration(e,a,t){let r=this.getDeviceResources(e),n=`${t??"global"}:${a}`,s=r.resources.get(n)??r.resources.get(`global:${a}`);if(s?.duration!==void 0)return s.duration;let u=a.replace(/_(beat|bass|energy)$/,"");return(r.masterAudioTextures.get(n)??r.masterAudioTextures.get(`global:${a}`)??r.masterAudioTextures.get(`${t??"global"}:${u}`)??r.masterAudioTextures.get(`global:${u}`))?.durationSec}extractionPromises=new Map;has(e,a,t){let r=this.getDeviceResources(e),n=`${t??"global"}:${a}`,s=a.replace(/_(beat|bass|energy)$/,"");return r.resources.has(n)||r.resources.has(`global:${a}`)||r.masterAudioTextures.has(n)||r.masterAudioTextures.has(`global:${a}`)||r.masterAudioTextures.has(`${t??"global"}:${s}`)||r.masterAudioTextures.has(`global:${s}`)}async ensureAudioSourcesExtracted(e,a,t=24,r,n=new Set){if(!a||typeof a!="object"||n.has(a))return;n.add(a);let s=a;if(s.signalA&&await this.ensureAudioSourcesExtracted(e,s.signalA,t,r,n),s.signalB&&typeof s.signalB=="object"&&await this.ensureAudioSourcesExtracted(e,s.signalB,t,r,n),!!(s.extractionMode||s.op==="AudioSignalExtractor"||s.virtualMedia?.operation?.op==="AudioSignalExtractor")){let o=s.sourceUrl||s.virtualMedia?.operation?.sourceUrl;if(!o&&s.virtualMedia){let g=s.virtualMedia;o=g.operation?.sourceUrl||g.operation?.url||g.children?.[0]?.operation?.sourceUrl||g.children?.[0]?.operation?.url}let p=s.nodeId||s.virtualMedia?.operation?.nodeId;o&&p&&await this.extractFromAudioSource(e,o,s,p,t,r)}}async extractFromAudioSource(e,a,t={},r,n=24,s){let u=this.getDeviceResources(e),o=`${s??"global"}:${r}`,p=JSON.stringify({sourceUrl:a,mode:t.extractionMode,sens:t.sensitivity,att:t.attackMs,rel:t.releaseMs,smooth:t.smoothing,curve:t.curve,beatThresh:t.beatThreshold,noiseFloor:t.noiseFloorDb,dynRange:t.dynamicRangeDb,beatDecay:t.beatDecayMs,fps:n});if((u.masterAudioTextures.get(o)??u.masterAudioTextures.get(`global:${r}`))?.lastFingerprint===p)return;if(this.extractionPromises.has(o)){await this.extractionPromises.get(o);return}let d=(async()=>{try{let i=[],_=44100;if(typeof window<"u"){let b=window.AudioContext||window.webkitAudioContext;if(b){let m=a;m.startsWith("file://")&&(m=m.replace(/^file:\/\//,"")),m.startsWith("/")&&!m.startsWith("/@fs/")&&!m.startsWith("/api/")&&(m=`/@fs${m}`);let c=new b;try{let x=await fetch(m);if(!x.ok)throw new Error(`HTTP ${x.status}`);let M=await x.arrayBuffer(),P=await c.decodeAudioData(M);_=P.sampleRate;for(let U=0;U<P.numberOfChannels;U++)i.push(new Float32Array(P.getChannelData(U)))}finally{c.close()}}}else try{let b=await import("./shims/fs.mjs"),m=a.replace(/^file:\/\//,"");if(b.existsSync(m)){let c=b.readFileSync(m),x=c.readUInt16LE(22);_=c.readUInt32LE(24);let M=c.readUInt16LE(34),P=12;for(;P<c.length-8;){let $=c.toString("ascii",P,P+4),G=c.readUInt32LE(P+4);if($==="data"){P+=8;break}P+=8+G}let U=Math.max(1,Math.floor(M/8)),A=Math.floor((c.length-P)/(x*U));i=[];for(let $=0;$<x;$++)i.push(new Float32Array(A));if(M===16)for(let $=0;$<A;$++)for(let G=0;G<x;G++){let w=P+($*x+G)*2;w+2<=c.length&&(i[G][$]=c.readInt16LE(w)/32768)}else if(M===32)for(let $=0;$<A;$++)for(let G=0;G<x;G++){let w=P+($*x+G)*4;w+4<=c.length&&(i[G][$]=c.readFloatLE(w))}}}catch{}if(i.length===0||i[0].length===0)return;let l=i[0].length/_,h=await Z.extractFeatures(e,i,_,n,t,512),y=new Set;r&&y.add(r);let B=t?.nodeId;B&&y.add(B);for(let b of y){let m=b.replace(/_(beat|bass|energy)$/,""),c={texture:h.texture,textureView:h.textureView,durationSec:l,stats:h.stats.primary,lastFingerprint:p};u.masterAudioTextures.set(`${s??"global"}:${m}`,c),u.masterAudioTextures.set(`global:${m}`,c),u.masterAudioTextures.set(`${s??"global"}:${m}_beat`,{...c,stats:h.stats.beat}),u.masterAudioTextures.set(`global:${m}_beat`,{...c,stats:h.stats.beat}),u.masterAudioTextures.set(`${s??"global"}:${m}_bass`,{...c,stats:h.stats.bass}),u.masterAudioTextures.set(`global:${m}_bass`,{...c,stats:h.stats.bass}),u.masterAudioTextures.set(`${s??"global"}:${m}_energy`,{...c,stats:h.stats.energy}),u.masterAudioTextures.set(`global:${m}_energy`,{...c,stats:h.stats.energy}),b!==m&&(u.masterAudioTextures.set(`${s??"global"}:${b}`,c),u.masterAudioTextures.set(`global:${b}`,c)),this.registerBuffer(e,m,h.primaryBuffer,s),this.setStats(m,h.stats.primary),this.registerBuffer(e,`${m}_beat`,h.beatBuffer,s),this.setStats(`${m}_beat`,h.stats.beat),this.registerBuffer(e,`${m}_bass`,h.bassBuffer,s),this.setStats(`${m}_bass`,h.stats.bass),this.registerBuffer(e,`${m}_energy`,h.energyBuffer,s),this.setStats(`${m}_energy`,h.stats.energy),h.channelSamples&&this.setChannelSamples(m,h.channelSamples,s)}let v=u.resources.get(o)??u.resources.get(`global:${r}`);v&&(v.lastFingerprint=p)}catch(i){console.warn(`[SignalRegistry] Failed to extract audio signal from ${a}:`,i)}finally{this.extractionPromises.delete(o)}})();this.extractionPromises.set(o,d),await d}getOrCreate1DBuffer(e,a,t,r,n,s,u,o,p,g,d){let i=s;if(s&&!s.customWGSL&&!s.wgsl&&s.fnBody){let b=se(s,t);i={...s,customWGSL:b.wgsl,signalFnName:b.name,fnOutputType:b.outputType,outputType:b.outputType}}let _=this.getDeviceResources(e),S=`${p??"global"}:${t}`,l=_.resources.get(S)??_.resources.get(`global:${t}`),h=u*4;if(l?.isExternal&&l.buffer&&l.buffer.size===h)return l.buffer;if(!l||!l.buffer||l.buffer.size<h){l?.buffer&&!l.isExternal&&l.buffer.destroy();let b=e.createBuffer({size:h,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC,label:`signal_1d_buffer_${t}`});l={...l,type:l?.texture?"combined":"1d-buffer",buffer:b,lastProcessedFrame:-1},_.resources.set(S,l)}let y=i?.samples??i?.data?.samples,B=i?this.computeSignalFingerprint(i):"",v=g!==void 0?g:r;if(l.lastProcessedFrame===v&&l.lastFingerprint===B)return l.buffer;if(l.lastFingerprint!==B&&(l.bindGroup=void 0),l.lastProcessedFrame=v,l.lastFingerprint=B,me(y)&&y.length>0){let b=new Float32Array(u),m=y.length,c=Number(i?.fps)||24;for(let x=0;x<u;x++){let M=r+x/o,P=Math.min(m-1,Math.max(0,Math.round(M*c)));b[x]=Number(y[P])||0}e.queue.writeBuffer(l.buffer,0,b)}else if(i?.type==="generator"&&(i.customWGSL||i.fnBody)){let b=e.createCommandEncoder({label:`signal_1d_encoder_${t}`});this.dispatch1DGenerator(e,b,l,r,n,i,u,o,g,d),e.queue.submit([b.finish()])}else if(i?.type==="audio_extractor"||i?.extractionMode!==void 0){let b=this.getMasterTexture(e,t,p);if(b){let m=i.channel==="beat"||t.endsWith("_beat")?1:i.channel==="bass"||t.endsWith("_bass")?2:i.channel==="energy"||t.endsWith("_energy")?3:0,c=this.getDuration(e,t,p)??(typeof i.durationMs=="number"?i.durationMs/1e3:n),x=e.createCommandEncoder({label:`signal_1d_audio_encoder_${t}`});this.dispatch1DAudioSignal(e,x,l,b,m,r,c,u,o),e.queue.submit([x.finish()])}else{let m=Number(i?.offset??0),c=new Float32Array(u).fill(m);e.queue.writeBuffer(l.buffer,0,c)}}else if(i?.type==="signal_math"){let b=i.signalA?.nodeId??`${t}_a`,m=this.getOrCreate1DBuffer(e,a,b,r,n,i.signalA,u,o,p,g,d),c=i.signalB&&typeof i.signalB=="object"&&i.signalB.type!==void 0,x=c?i.signalB.nodeId??`${t}_b`:`${t}_b_dummy`,M=c?this.getOrCreate1DBuffer(e,a,x,r,n,i.signalB,u,o,p,g,d):this.getDummyBuffer(e),P=L(i),U=e.createCommandEncoder({label:`signal_1d_math_encoder_${t}`});this.dispatch1DMathSignal(e,U,l,m,M,!!c,P,i,r,n,u,o,g,d),e.queue.submit([U.finish()])}else if(i?.type==="gate"||i?.op==="SignalGate"||i?.signalConfig?.type==="gate"||i?.signalConfig?.op==="SignalGate"){let b=i.sourceSignal??i.signalConfig?.sourceSignal??i.signal,m=b?.nodeId??`${t}_in`,c=this.getOrCreate1DBuffer(e,a,m,r,n,b,u,o,p,g,d),x=e.createCommandEncoder({label:`signal_1d_gate_encoder_${t}`});this.dispatch1DGateSignal(e,x,l,c,i,r,n,u,o,g,d),e.queue.submit([x.finish()])}else{let b=Number(i?.offset??0),m=new Float32Array(u).fill(b);e.queue.writeBuffer(l.buffer,0,m)}return l.buffer}getOrCreate2DTextureView(e,a,t,r,n,s,u,o,p,g,d){let i=s;if(s&&!s.customWGSL&&!s.wgsl&&s.fnBody){let c=se(s,t);i={...s,customWGSL:c.wgsl,signalFnName:c.name,fnOutputType:c.outputType,outputType:c.outputType}}let _=this.getDeviceResources(e),S=`${p??"global"}:${t}`,l=_.resources.get(S)??_.resources.get(`global:${t}`),h=_.masterAudioTextures.get(S)??_.masterAudioTextures.get(`global:${t}`)??_.masterAudioTextures.get(`${p??"global"}:${t.replace(/_(beat|bass|energy)$/,"")}`)??_.masterAudioTextures.get(`global:${t.replace(/_(beat|bass|energy)$/,"")}`);if(l?.isExternal&&l.textureView&&!h)return l.textureView;let y=l?.texture?l.texture.width:Math.max(16,u>0?u:256),B=1;if(!l||!l.texture){let c=e.createTexture({size:[y,B,1],format:"rgba16float",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_DST,label:`signal_2d_texture_${t}`});l={...l,type:l?.buffer?"combined":"2d-texture",texture:c,textureView:c.createView(),lastProcessedFrame:-1},_.resources.set(S,l),p&&_.resources.set(`global:${t}`,l)}let v=i?.samples??i?.data?.samples,b=i?this.computeSignalFingerprint(i):"",m=g!==void 0?g:r;if(l.lastProcessedFrame===m&&l.lastFingerprint===b)return l.textureView;if(l.lastFingerprint!==b&&(l.bindGroup=void 0),l.lastProcessedFrame=m,l.lastFingerprint=b,h){let c=0;typeof i?.channel=="number"?c=i.channel:t.endsWith("_beat")?c=1:t.endsWith("_bass")?c=2:t.endsWith("_energy")&&(c=3);let x=e.createCommandEncoder({label:`audio_signal_2d_encoder_${t}`});return this.dispatch2DAudioSignal(e,x,l,h,c,r,n>0?n:h.durationSec,g,d),e.queue.submit([x.finish()]),l.textureView}else if(me(v)&&v.length>0){let c=new Float32Array(y*B*4),x=v.length,M=g!==void 0&&d!==void 0&&d>0?g/d:r;for(let U=0;U<y;U++){let A=y>1?U/(y-1):.5,$=M+(A-.5)*2,G=n>0?Math.min(1,Math.max(0,$/n)):.5,w=Math.min(x-1,Math.max(0,Math.round(G*(x-1)))),F=Number(v[w])||0;for(let T=0;T<B;T++){let R=(T*y+U)*4;c[R]=F,c[R+1]=F,c[R+2]=F,c[R+3]=F}}let P=ie(c);return e.queue.writeTexture({texture:l.texture},P,{bytesPerRow:y*8,rowsPerImage:B},[y,B,1]),l.textureView}else if(i&&(i.type==="signal_math"||i.op==="SignalMath"||i.operation||i.signalConfig?.operation)){let c=e.createCommandEncoder({label:`signal_math_2d_encoder_${t}`});return this.dispatch2DSignalMath(e,c,l,t,i,r,n,y,g,d,p),e.queue.submit([c.finish()]),l.textureView}else if(i&&(i.type==="gate"||i.op==="SignalGate"||i.signalConfig?.type==="gate"||i.signalConfig?.op==="SignalGate")){let c=e.createCommandEncoder({label:`signal_gate_2d_encoder_${t}`});return this.dispatch2DSignalGate(e,c,l,t,i,r,n,y,g,d,p),e.queue.submit([c.finish()]),l.textureView}else if(i&&i.type==="generator"&&(i.customWGSL||i.fnBody)){let c=e.createCommandEncoder({label:`signal_2d_encoder_${t}`});this.dispatch2DGenerator(e,c,l,r,n,i,y,B,g,d),e.queue.submit([c.finish()])}else{let c=Number(i?.offset??0),x=new Float32Array(y*B*4);for(let P=0;P<y*B;P++)x[P*4]=c,x[P*4+1]=c,x[P*4+2]=c,x[P*4+3]=1;let M=ie(x);e.queue.writeTexture({texture:l.texture},M,{bytesPerRow:y*8,rowsPerImage:B},[y,B,1])}return l.textureView}dispatch1DGenerator(e,a,t,r,n,s,u,o,p,g){let d=s.customWGSL??s.wgsl??"",i=s.signalFnName??s.name??"signal_fn",_=s.fnOutputType??s.outputType??"f32",S=this.getDeviceResources(e),l=`1d_${s.nodeId}_${d}`,h=S.pipelineCache.get(l);if(!h){let M=s.fnParams??[],P=[];for(let w of M){let F=w.defaultValue;P.push(F%1===0?`${F.toFixed(1)}f`:`${F}f`)}let U=["t","progress","0.0","0.0","idx","u.numSamples","u.frame","vec4<f32>(progress, 0.5, 0.5, 1.0)","u.t_elapsed","u.duration",...P],A=`${i}(${U.join(", ")})`;(_==="vec2f"||_==="vec3f"||_==="vec4f")&&(A=`${A}.x`);let $=`
281
+ struct GeneratorUniforms {
282
+ sampleRate : f32,
283
+ baseTime : f32,
284
+ frame : u32,
285
+ numSamples : u32,
286
+ amplitude : f32,
287
+ frequency : f32,
288
+ phase : f32,
289
+ offset : f32,
290
+ t_elapsed : f32,
291
+ duration : f32,
292
+ pad1 : f32,
293
+ pad2 : f32,
294
+ };
295
+
296
+ @group(0) @binding(0) var<uniform> u : GeneratorUniforms;
297
+ @group(0) @binding(1) var<storage, read_write> outSignal : array<f32>;
298
+
299
+ ${d}
300
+
301
+ @compute @workgroup_size(64)
302
+ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
303
+ let idx = gid.x;
304
+ if (idx >= u.numSamples) { return; }
305
+
306
+ let progress = f32(idx) / f32(u.numSamples - 1u);
307
+ let t = u.baseTime + f32(idx) / u.sampleRate;
308
+
309
+ // Evaluate custom signal
310
+ let val = ${A};
311
+ outSignal[idx] = val;
312
+ }
313
+ `,G=e.createShaderModule({label:`signal_1d_generator_${s.nodeId}.wgsl`,code:$});h=e.createComputePipeline({label:`Signal1DComputePipeline_${s.nodeId}`,layout:"auto",compute:{module:G,entryPoint:"main"}}),S.pipelineCache.set(l,h)}let y=p!==void 0&&g!==void 0&&g>0?p/g:r,B=p!==void 0?p:0,v=new ArrayBuffer(48),b=new Float32Array(v),m=new Uint32Array(v);b[0]=o,b[1]=y,m[2]=B,m[3]=u,b[4]=s.amplitude??1,b[5]=s.frequency??1,b[6]=s.phase??0,b[7]=s.offset??0,b[8]=r,b[9]=n,b[10]=0,b[11]=0,t.uniformBuffer||(t.uniformBuffer=e.createBuffer({size:v.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:`signal_1d_uniform_buffer_${s.nodeId}`})),e.queue.writeBuffer(t.uniformBuffer,0,v),t.bindGroup||(t.bindGroup=e.createBindGroup({layout:h.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:t.uniformBuffer}},{binding:1,resource:{buffer:t.buffer}}]}));let c=a.beginComputePass({label:`signal_1d_compute_pass_${s.nodeId}`});c.setPipeline(h),c.setBindGroup(0,t.bindGroup);let x=Math.ceil(u/64);c.dispatchWorkgroups(x),c.end()}dispatch1DAudioSignal(e,a,t,r,n,s,u,o,p){let g=this.getDeviceResources(e),d="audio_signal_1d",i=g.pipelineCache.get(d),_=this.getSampler(e);if(!i){let m=e.createShaderModule({code:`
314
+ struct Audio1DUniforms {
315
+ sampleRate : f32,
316
+ baseTime : f32,
317
+ duration : f32,
318
+ numSamples : u32,
319
+ channel : u32,
320
+ pad1 : f32,
321
+ pad2 : f32,
322
+ pad3 : f32,
323
+ };
324
+
325
+ @group(0) @binding(0) var<uniform> u : Audio1DUniforms;
326
+ @group(0) @binding(1) var masterTex : texture_2d<f32>;
327
+ @group(0) @binding(2) var samp : sampler;
328
+ @group(0) @binding(3) var<storage, read_write> outSignal : array<f32>;
329
+
330
+ @compute @workgroup_size(64)
331
+ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
332
+ let idx = gid.x;
333
+ if (idx >= u.numSamples) { return; }
334
+
335
+ let t = u.baseTime + f32(idx) / u.sampleRate;
336
+ var t_norm = 0.5f;
337
+ if (u.duration > 0.0f) {
338
+ t_norm = clamp(t / u.duration, 0.0f, 1.0f);
339
+ }
340
+
341
+ let s = textureSampleLevel(masterTex, samp, vec2<f32>(t_norm, 0.5f), 0.0f);
342
+ var val = s.r;
343
+ if (u.channel == 1u) {
344
+ val = s.g;
345
+ } else if (u.channel == 2u) {
346
+ val = s.b;
347
+ } else if (u.channel == 3u) {
348
+ val = s.a;
349
+ }
350
+
351
+ outSignal[idx] = val;
352
+ }
353
+ `,label:"dispatch1DAudioSignal_module"});i=e.createComputePipeline({label:"dispatch1DAudioSignal_pipeline",layout:"auto",compute:{module:m,entryPoint:"main"}}),g.pipelineCache.set(d,i)}let S=new ArrayBuffer(32),l=new Float32Array(S),h=new Uint32Array(S);l[0]=p,l[1]=s,l[2]=u>0?u:1,h[3]=o,h[4]=n;let y=e.createBuffer({size:32,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"audio_1d_uniform_buffer"});e.queue.writeBuffer(y,0,S);let B=e.createBindGroup({layout:i.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:y}},{binding:1,resource:r.createView()},{binding:2,resource:_},{binding:3,resource:{buffer:t.buffer}}]}),v=a.beginComputePass({label:"audio_1d_compute_pass"});v.setPipeline(i),v.setBindGroup(0,B),v.dispatchWorkgroups(Math.ceil(o/64)),v.end()}dispatch1DMathSignal(e,a,t,r,n,s,u,o,p,g,d,i,_,S){let l=this.getDeviceResources(e),h=o.operation??"add",y=o.customWGSL??o.wgsl??"",B=`1d_math_${h}_${s}_${y}`,v=l.pipelineCache.get(B);if(!v){let{evalExpr:U,extraFn:A}=ge(h,y),$=`
354
+ struct MathUniforms {
355
+ bValue : f32,
356
+ inMin : f32,
357
+ inMax : f32,
358
+ outMin : f32,
359
+ outMax : f32,
360
+ clampMin : f32,
361
+ clampMax : f32,
362
+ exponent : f32,
363
+ edge0 : f32,
364
+ edge1 : f32,
365
+ a_min : f32,
366
+ a_max : f32,
367
+ baseTime : f32,
368
+ duration : f32,
369
+ sampleRate: f32,
370
+ numSamples: u32,
371
+ hasB : f32,
372
+ frame : u32,
373
+ pad1 : f32,
374
+ pad2 : f32,
375
+ };
376
+
377
+ @group(0) @binding(0) var<uniform> u : MathUniforms;
378
+ @group(0) @binding(1) var<storage, read> bufA : array<f32>;
379
+ @group(0) @binding(2) var<storage, read> bufB : array<f32>;
380
+ @group(0) @binding(3) var<storage, read_write> outSignal : array<f32>;
381
+
382
+ const PI: f32 = ${Math.PI}f;
383
+ const TAU: f32 = ${Math.PI*2}f;
384
+ const E: f32 = ${Math.E}f;
385
+
386
+ ${A}
387
+
388
+ @compute @workgroup_size(64)
389
+ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
390
+ let idx = gid.x;
391
+ if (idx >= u.numSamples) { return; }
392
+
393
+ let a = bufA[idx];
394
+ var b = u.bValue;
395
+ if (u.hasB > 0.5f) {
396
+ b = bufB[idx];
397
+ }
398
+ let a_min = u.a_min;
399
+ let a_max = u.a_max;
400
+ let inMin = u.inMin;
401
+ let inMax = u.inMax;
402
+ let outMin = u.outMin;
403
+ let outMax = u.outMax;
404
+ let clampMin = u.clampMin;
405
+ let clampMax = u.clampMax;
406
+ let exponent = u.exponent;
407
+ let edge0 = u.edge0;
408
+ let edge1 = u.edge1;
409
+ let t = u.baseTime + f32(idx) / u.sampleRate;
410
+ var t_norm = 0.5f;
411
+ if (u.duration > 0.0f) {
412
+ t_norm = clamp(t / u.duration, 0.0f, 1.0f);
413
+ }
414
+ let frame = u.frame;
415
+
416
+ let val = ${U};
417
+ outSignal[idx] = val;
418
+ }
419
+ `,G=e.createShaderModule({label:`signal_1d_math_${h}.wgsl`,code:$});v=e.createComputePipeline({label:`Signal1DMathPipeline_${h}`,layout:"auto",compute:{module:G,entryPoint:"main"}}),l.pipelineCache.set(B,v)}let b=new ArrayBuffer(Math.max(80,256)),m=new Float32Array(b),c=new Uint32Array(b);m[0]=u,m[1]=Number(o.inMin)||0,m[2]=Number(o.inMax)||1,m[3]=Number(o.outMin)||0,m[4]=Number(o.outMax)||1,m[5]=Number(o.clampMin)||0,m[6]=Number(o.clampMax)||1,m[7]=Number(o.exponent)||2,m[8]=Number(o.edge0)||0,m[9]=Number(o.edge1)||1,m[10]=Number(o.aMin??o.inMin)||0,m[11]=Number(o.aMax??o.inMax)||1,m[12]=p,m[13]=g>0?g:1,m[14]=i,c[15]=d,m[16]=s?1:0,c[17]=_!==void 0?Math.max(0,Math.floor(_)):0;let x=e.createBuffer({size:Math.max(80,256),usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"math_1d_uniform_buffer"});e.queue.writeBuffer(x,0,b);let M=e.createBindGroup({layout:v.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:x}},{binding:1,resource:{buffer:r}},{binding:2,resource:{buffer:n}},{binding:3,resource:{buffer:t.buffer}}]}),P=a.beginComputePass({label:"math_1d_compute_pass"});P.setPipeline(v),P.setBindGroup(0,M),P.dispatchWorkgroups(Math.ceil(d/64)),P.end()}dispatch2DGenerator(e,a,t,r,n,s,u,o,p,g){let d=s.customWGSL??s.wgsl??"",i=s.signalFnName??s.name??"signal_fn",_=this.getDeviceResources(e),S=`2d_${s.nodeId}_${d}`,l=_.pipelineCache.get(S);if(!l){let c=s.fnParams??[],x=[];for(let F of c){let T=F.defaultValue;x.push(T%1===0?`${T.toFixed(1)}f`:`${T}f`)}let U=["u.baseTime + (in.uv.x - 0.5) * 2.0","in.uv.x","1.0 - in.uv.y","0.0","0u","1u","u.frame","vec4<f32>(in.uv.x, 1.0 - in.uv.y, 0.5, 1.0)","u.t_elapsed + (in.uv.x - 0.5) * 2.0","u.duration",...x],$=`let val = f32(${`${i}(${U.join(", ")})`}); return vec4<f32>(val, val, val, val);`,G=`
420
+ struct VSOut {
421
+ @builtin(position) pos : vec4<f32>,
422
+ @location(0) uv : vec2<f32>,
423
+ };
424
+
425
+ struct GeneratorUniforms {
426
+ baseTime : f32,
427
+ frame : u32,
428
+ amplitude : f32,
429
+ frequency : f32,
430
+ phase : f32,
431
+ offset : f32,
432
+ t_elapsed : f32,
433
+ duration : f32,
434
+ };
435
+
436
+ @group(0) @binding(0) var<uniform> u : GeneratorUniforms;
437
+
438
+ ${d}
439
+
440
+ @vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
441
+ var pos = array<vec2<f32>, 4>(
442
+ vec2<f32>(-1.0, 1.0),
443
+ vec2<f32>( 1.0, 1.0),
444
+ vec2<f32>(-1.0, -1.0),
445
+ vec2<f32>( 1.0, -1.0)
446
+ );
447
+ var uv = array<vec2<f32>, 4>(
448
+ vec2<f32>(0.0, 0.0),
449
+ vec2<f32>(1.0, 0.0),
450
+ vec2<f32>(0.0, 1.0),
451
+ vec2<f32>(1.0, 1.0)
452
+ );
453
+ return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
454
+ }
455
+
456
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
457
+ ${$}
458
+ }
459
+ `,w=e.createShaderModule({label:`signal_2d_generator_${s.nodeId}.wgsl`,code:G});l=e.createRenderPipeline({label:`Signal2DPipeline_${s.nodeId}`,layout:"auto",vertex:{module:w,entryPoint:"vs"},fragment:{module:w,entryPoint:"fs",targets:[{format:"rgba16float"}]},primitive:{topology:"triangle-strip"}}),_.pipelineCache.set(S,l)}let h=p!==void 0&&g!==void 0&&g>0?p/g:r,y=p!==void 0?p:0,B=new ArrayBuffer(32),v=new Float32Array(B),b=new Uint32Array(B);v[0]=h,b[1]=y,v[2]=s.amplitude??1,v[3]=s.frequency??1,v[4]=s.phase??0,v[5]=s.offset??0,v[6]=r,v[7]=n,(!t.uniformBuffer||t.uniformBuffer.size<256)&&(t.uniformBuffer=e.createBuffer({size:256,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:`signal_2d_uniform_buffer_${s.nodeId}`}),t.bindGroup=void 0),e.queue.writeBuffer(t.uniformBuffer,0,B),t.bindGroup||(t.bindGroup=e.createBindGroup({layout:l.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:t.uniformBuffer}}]}));let m=a.beginRenderPass({label:`signal_2d_render_pass_${s.nodeId}`,colorAttachments:[{view:t.textureView,loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});m.setPipeline(l),m.setBindGroup(0,t.bindGroup),m.draw(4),m.end()}dispatch2DAudioSignal(e,a,t,r,n,s,u,o,p){let g=this.getDeviceResources(e),d="audio_signal_2d",i=g.pipelineCache.get(d),_=this.getSampler(e);if(!i){let c=e.createShaderModule({code:`
460
+ struct VSOut {
461
+ @builtin(position) pos : vec4<f32>,
462
+ @location(0) uv : vec2<f32>,
463
+ };
464
+
465
+ struct AudioUniforms {
466
+ baseTime : f32,
467
+ duration : f32,
468
+ channel : u32,
469
+ pad : f32,
470
+ };
471
+
472
+ @group(0) @binding(0) var<uniform> u : AudioUniforms;
473
+ @group(0) @binding(1) var masterTex : texture_2d<f32>;
474
+ @group(0) @binding(2) var samp : sampler;
475
+
476
+ @vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
477
+ var pos = array<vec2<f32>, 4>(
478
+ vec2<f32>(-1.0, 1.0),
479
+ vec2<f32>( 1.0, 1.0),
480
+ vec2<f32>(-1.0, -1.0),
481
+ vec2<f32>( 1.0, -1.0)
482
+ );
483
+ var uv = array<vec2<f32>, 4>(
484
+ vec2<f32>(0.0, 0.0),
485
+ vec2<f32>(1.0, 0.0),
486
+ vec2<f32>(0.0, 1.0),
487
+ vec2<f32>(1.0, 1.0)
488
+ );
489
+ return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
490
+ }
491
+
492
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
493
+ let t = u.baseTime + (in.uv.x - 0.5) * 2.0;
494
+ var t_norm = 0.5;
495
+ if (u.duration > 0.0) {
496
+ t_norm = clamp(t / u.duration, 0.0, 1.0);
497
+ }
498
+ let s = textureSampleLevel(masterTex, samp, vec2<f32>(t_norm, 0.5), 0.0);
499
+ if (u.channel == 1u) {
500
+ return vec4<f32>(s.g, s.g, s.g, s.g);
501
+ } else if (u.channel == 2u) {
502
+ return vec4<f32>(s.b, s.b, s.b, s.b);
503
+ } else if (u.channel == 3u) {
504
+ return vec4<f32>(s.a, s.a, s.a, s.a);
505
+ }
506
+ return s;
507
+ }
508
+ `,label:"dispatch2DAudioSignal_module"});i=e.createRenderPipeline({label:"dispatch2DAudioSignal_pipeline",layout:"auto",vertex:{module:c,entryPoint:"vs"},fragment:{module:c,entryPoint:"fs",targets:[{format:"rgba16float"}]},primitive:{topology:"triangle-strip"}}),g.pipelineCache.set(d,i)}let S=o!==void 0&&p!==void 0&&p>0?o/p:s,l=u>0?u:r.durationSec??0,h=new ArrayBuffer(16),y=new Float32Array(h),B=new Uint32Array(h);y[0]=S,y[1]=l,B[2]=n,y[3]=0,(!t.uniformBuffer||t.uniformBuffer.size<256)&&(t.uniformBuffer=e.createBuffer({size:256,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"audio_signal_2d_uniform_buffer"}),t.bindGroup=void 0),e.queue.writeBuffer(t.uniformBuffer,0,h);let v=e.createBindGroup({layout:i.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:t.uniformBuffer}},{binding:1,resource:r.textureView},{binding:2,resource:_}]}),b=a.beginRenderPass({label:"audio_signal_2d_render_pass",colorAttachments:[{view:t.textureView,loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});b.setPipeline(i),b.setBindGroup(0,v),b.draw(4),b.end()}dispatch2DSignalMath(e,a,t,r,n,s,u,o,p,g,d){let i=n.signalConfig,_=n.operation??i?.operation??"remap",S=n.customWGSL??i?.customWGSL??"",l=this.getDeviceResources(e),h=`math_${r}_${_}_${S}`,y=l.pipelineCache.get(h),B=n.signalA?.nodeId||n.signalA?.virtualMedia?.operation?.nodeId,v=n.signalB&&typeof n.signalB=="object"?n.signalB.nodeId||n.signalB.virtualMedia?.operation?.nodeId:void 0,b=!!v,m=B?this.getOrCreate2DTextureView(e,a,B,s,u,n.signalA,o,1,d,p,g):this.getDummy1x1TextureView(e),c=v?this.getOrCreate2DTextureView(e,a,v,s,u,n.signalB,o,1,d,p,g):this.getDummy1x1TextureView(e),x=this.getSampler(e);if(!y){let{evalExpr:E,extraFn:k}=ge(_,S),q=`
509
+ struct VSOut {
510
+ @builtin(position) pos : vec4<f32>,
511
+ @location(0) uv : vec2<f32>,
512
+ };
513
+
514
+ struct MathUniforms {
515
+ bValue : f32,
516
+ inMin : f32,
517
+ inMax : f32,
518
+ outMin : f32,
519
+ outMax : f32,
520
+ clampMin : f32,
521
+ clampMax : f32,
522
+ exponent : f32,
523
+ edge0 : f32,
524
+ edge1 : f32,
525
+ a_min : f32,
526
+ a_max : f32,
527
+ t : f32,
528
+ t_norm : f32,
529
+ frame : u32,
530
+ hasB : f32,
531
+ };
532
+
533
+ @group(0) @binding(0) var<uniform> u : MathUniforms;
534
+ @group(0) @binding(1) var texA : texture_2d<f32>;
535
+ @group(0) @binding(2) var texB : texture_2d<f32>;
536
+ @group(0) @binding(3) var samp : sampler;
537
+
538
+ const PI: f32 = ${Math.PI}f;
539
+ const TAU: f32 = ${Math.PI*2}f;
540
+ const E: f32 = ${Math.E}f;
541
+
542
+ ${k}
543
+
544
+ @vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
545
+ var pos = array<vec2<f32>, 4>(
546
+ vec2<f32>(-1.0, 1.0),
547
+ vec2<f32>( 1.0, 1.0),
548
+ vec2<f32>(-1.0, -1.0),
549
+ vec2<f32>( 1.0, -1.0)
550
+ );
551
+ var uv = array<vec2<f32>, 4>(
552
+ vec2<f32>(0.0, 0.0),
553
+ vec2<f32>(1.0, 0.0),
554
+ vec2<f32>(0.0, 1.0),
555
+ vec2<f32>(1.0, 1.0)
556
+ );
557
+ return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
558
+ }
559
+
560
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
561
+ let a = textureSampleLevel(texA, samp, in.uv, 0.0).r;
562
+ var b = u.bValue;
563
+ if (u.hasB > 0.5) {
564
+ b = textureSampleLevel(texB, samp, in.uv, 0.0).r;
565
+ }
566
+ let a_min = u.a_min;
567
+ let a_max = u.a_max;
568
+ let inMin = u.inMin;
569
+ let inMax = u.inMax;
570
+ let outMin = u.outMin;
571
+ let outMax = u.outMax;
572
+ let clampMin = u.clampMin;
573
+ let clampMax = u.clampMax;
574
+ let exponent = u.exponent;
575
+ let edge0 = u.edge0;
576
+ let edge1 = u.edge1;
577
+ let t = u.t;
578
+ let t_norm = u.t_norm;
579
+ let frame = u.frame;
580
+
581
+ var val: f32 = ${E};
582
+ return vec4<f32>(val, val, val, val);
583
+ }
584
+ `,N=e.createShaderModule({label:`signal_math_${r}.wgsl`,code:q});y=e.createRenderPipeline({label:`SignalMathPipeline_${r}`,layout:"auto",vertex:{module:N,entryPoint:"vs"},fragment:{module:N,entryPoint:"fs",targets:[{format:"rgba16float"}]},primitive:{topology:"triangle-strip"}}),l.pipelineCache.set(h,y)}let M=B?this.getStats(B):void 0,P=M?.min??0,U=M?.max??1,A=v?this.getStats(v):void 0,$=Ce(_,P,U,n,b,A);this.setStats(r,$),n.nodeId&&n.nodeId!==r&&this.setStats(n.nodeId,$);let G=new ArrayBuffer(64),w=new Float32Array(G),F=new Uint32Array(G),T=p!==void 0&&g!==void 0&&g>0?p/g:s;w[0]=L(n),w[1]=n.inMin??i?.inMin??0,w[2]=n.inMax??i?.inMax??1,w[3]=n.outMin??i?.outMin??0,w[4]=n.outMax??i?.outMax??1,w[5]=n.clampMin??i?.clampMin??0,w[6]=n.clampMax??i?.clampMax??1,w[7]=n.exponent??i?.exponent??2,w[8]=n.edge0??i?.edge0??0,w[9]=n.edge1??i?.edge1??1,w[10]=P,w[11]=U,w[12]=T,w[13]=u>0?T/u:0,F[14]=p??0,w[15]=b?1:0,(!t.uniformBuffer||t.uniformBuffer.size<256)&&(t.uniformBuffer=e.createBuffer({size:256,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:`signal_math_uniform_${r}`}),t.bindGroup=void 0),e.queue.writeBuffer(t.uniformBuffer,0,G);let R=e.createBindGroup({layout:y.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:t.uniformBuffer}},{binding:1,resource:m},{binding:2,resource:c},{binding:3,resource:x}]}),D=a.beginRenderPass({label:`signal_math_pass_${r}`,colorAttachments:[{view:t.textureView,loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});D.setPipeline(y),D.setBindGroup(0,R),D.draw(4),D.end()}dispatch2DSignalGate(e,a,t,r,n,s,u,o,p,g,d){let i=n.signalConfig,_=Number(n.threshold??i?.threshold??.5),S=n.mode??i?.mode??"gate",l=!!(n.invert??i?.invert??!1),h=Math.max(1,Number(n.holdFrames??i?.holdFrames??4)),y=n.sourceSignal??i?.sourceSignal??n.signal,v=y?.virtualMedia?.operation,b=y?.nodeId||v?.nodeId,m=b?this.getOrCreate2DTextureView(e,a,b,s,u,y,o,1,d,p,g):this.getDummy1x1TextureView(e),c=this.getSampler(e),x=this.getDeviceResources(e),M=`gate_2d_${S}_${l}`,P=x.pipelineCache.get(M);if(!P){let T=e.createShaderModule({label:`signal_gate_${r}.wgsl`,code:`
585
+ struct VSOut {
586
+ @builtin(position) pos : vec4<f32>,
587
+ @location(0) uv : vec2<f32>,
588
+ };
589
+
590
+ struct GateUniforms {
591
+ threshold : f32,
592
+ mode : u32,
593
+ invert : f32,
594
+ holdFrames : u32,
595
+ dx : f32,
596
+ pad0 : f32,
597
+ pad1 : f32,
598
+ pad2 : f32,
599
+ };
600
+
601
+ @group(0) @binding(0) var<uniform> u : GateUniforms;
602
+ @group(0) @binding(1) var texIn : texture_2d<f32>;
603
+ @group(0) @binding(2) var samp : sampler;
604
+
605
+ @vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
606
+ var pos = array<vec2<f32>, 4>(
607
+ vec2<f32>(-1.0, 1.0),
608
+ vec2<f32>( 1.0, 1.0),
609
+ vec2<f32>(-1.0, -1.0),
610
+ vec2<f32>( 1.0, -1.0)
611
+ );
612
+ var uv = array<vec2<f32>, 4>(
613
+ vec2<f32>(0.0, 0.0),
614
+ vec2<f32>(1.0, 0.0),
615
+ vec2<f32>(0.0, 1.0),
616
+ vec2<f32>(1.0, 1.0)
617
+ );
618
+ return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
619
+ }
620
+
621
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
622
+ var high: f32 = 0.0f;
623
+
624
+ if (u.mode == 0u) {
625
+ let a = textureSampleLevel(texIn, samp, in.uv, 0.0).r;
626
+ high = select(0.0f, 1.0f, a >= u.threshold);
627
+ } else if (u.mode == 1u) {
628
+ let steps = min(u.holdFrames, 32u);
629
+ for (var i = 0u; i < steps; i = i + 1u) {
630
+ let uv_cur = in.uv.x - f32(i) * u.dx;
631
+ if (uv_cur >= 0.0f) {
632
+ let cur = textureSampleLevel(texIn, samp, vec2<f32>(uv_cur, in.uv.y), 0.0).r;
633
+ let prev = textureSampleLevel(texIn, samp, vec2<f32>(max(0.0f, uv_cur - u.dx), in.uv.y), 0.0).r;
634
+ if (cur >= u.threshold && prev < u.threshold) {
635
+ high = 1.0f;
636
+ break;
637
+ }
638
+ }
639
+ }
640
+ } else {
641
+ var count = 0u;
642
+ let max_scan = 128u;
643
+ for (var i = 0u; i < max_scan; i = i + 1u) {
644
+ let uv_cur = in.uv.x - f32(i) * u.dx;
645
+ if (uv_cur < 0.0f) { break; }
646
+ let cur = textureSampleLevel(texIn, samp, vec2<f32>(uv_cur, in.uv.y), 0.0).r;
647
+ let prev = textureSampleLevel(texIn, samp, vec2<f32>(max(0.0f, uv_cur - u.dx), in.uv.y), 0.0).r;
648
+ if (cur >= u.threshold && prev < u.threshold) {
649
+ count = count + 1u;
650
+ }
651
+ }
652
+ high = select(0.0f, 1.0f, (count % 2u) == 1u);
653
+ }
654
+
655
+ if (u.invert > 0.5f) {
656
+ high = 1.0f - high;
657
+ }
658
+ return vec4<f32>(high, high, high, 1.0f);
659
+ }
660
+ `});P=e.createRenderPipeline({label:`SignalGatePipeline_${r}`,layout:"auto",vertex:{module:T,entryPoint:"vs"},fragment:{module:T,entryPoint:"fs",targets:[{format:"rgba16float"}]},primitive:{topology:"triangle-strip"}}),x.pipelineCache.set(M,P)}let U=new ArrayBuffer(256),A=new Float32Array(U),$=new Uint32Array(U);A[0]=_,$[1]=S==="trigger"?1:S==="toggle"?2:0,A[2]=l?1:0,$[3]=h,A[4]=1/Math.max(1,o),(!t.uniformBuffer||t.uniformBuffer.size<256)&&(t.uniformBuffer=e.createBuffer({size:256,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:`signal_gate_uniform_${r}`}),t.bindGroup=void 0),e.queue.writeBuffer(t.uniformBuffer,0,U);let G=e.createBindGroup({layout:P.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:t.uniformBuffer}},{binding:1,resource:m},{binding:2,resource:c}]}),w=a.beginRenderPass({label:`signal_gate_pass_${r}`,colorAttachments:[{view:t.textureView,loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});w.setPipeline(P),w.setBindGroup(0,G),w.draw(4),w.end(),this.setStats(r,{min:0,max:1})}dispatch1DGateSignal(e,a,t,r,n,s,u,o,p,g,d){let i=this.getDeviceResources(e),_=n.signalConfig,S=Number(n.threshold??_?.threshold??.5),l=n.mode??_?.mode??"gate",h=!!(n.invert??_?.invert??!1),y=Math.max(1,Number(n.holdFrames??_?.holdFrames??4)),B=Number(n.debounceMs??_?.debounceMs??100),v=Math.max(1,Math.round(B/1e3*p)),m=Math.max(1,Math.round(y/(d??24)*p)),c=`1d_gate_${l}_${S}_${h}`,x=i.pipelineCache.get(c);if(!x){let F=e.createShaderModule({label:"signal_1d_gate.wgsl",code:`
661
+ struct Gate1DUniforms {
662
+ threshold : f32,
663
+ mode : u32,
664
+ invert : f32,
665
+ holdSamples : u32,
666
+ debounceSamples : u32,
667
+ numSamples : u32,
668
+ pad0 : f32,
669
+ pad1 : f32,
670
+ };
671
+
672
+ @group(0) @binding(0) var<uniform> u : Gate1DUniforms;
673
+ @group(0) @binding(1) var<storage, read> bufIn : array<f32>;
674
+ @group(0) @binding(2) var<storage, read_write> outSignal : array<f32>;
675
+
676
+ @compute @workgroup_size(64)
677
+ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
678
+ let idx = gid.x;
679
+ if (idx >= u.numSamples) { return; }
680
+
681
+ var high: f32 = 0.0f;
682
+ if (u.mode == 0u) {
683
+ let cur = bufIn[idx];
684
+ high = select(0.0f, 1.0f, cur >= u.threshold);
685
+ } else if (u.mode == 1u) {
686
+ let max_scan = min(idx, u.holdSamples);
687
+ for (var i = 0u; i <= max_scan; i = i + 1u) {
688
+ let cur_idx = idx - i;
689
+ let cur = bufIn[cur_idx];
690
+ var prev = 0.0f;
691
+ if (cur_idx > 0u) {
692
+ prev = bufIn[cur_idx - 1u];
693
+ }
694
+ if (cur >= u.threshold && prev < u.threshold) {
695
+ high = 1.0f;
696
+ break;
697
+ }
698
+ }
699
+ } else {
700
+ var count = 0u;
701
+ var last_trigger = 0u;
702
+ var has_triggered = false;
703
+ for (var i = 0u; i <= idx; i = i + 1u) {
704
+ let cur = bufIn[i];
705
+ var prev = 0.0f;
706
+ if (i > 0u) {
707
+ prev = bufIn[i - 1u];
708
+ }
709
+ if (cur >= u.threshold && prev < u.threshold) {
710
+ if (!has_triggered || (i - last_trigger) >= u.debounceSamples) {
711
+ count = count + 1u;
712
+ last_trigger = i;
713
+ has_triggered = true;
714
+ }
715
+ }
716
+ }
717
+ high = select(0.0f, 1.0f, (count % 2u) == 1u);
718
+ }
719
+
720
+ if (u.invert > 0.5f) {
721
+ high = 1.0f - high;
722
+ }
723
+ outSignal[idx] = high;
724
+ }
725
+ `});x=e.createComputePipeline({label:`Signal1DGatePipeline_${l}`,layout:"auto",compute:{module:F,entryPoint:"main"}}),i.pipelineCache.set(c,x)}let M=new ArrayBuffer(256),P=new Float32Array(M),U=new Uint32Array(M);P[0]=S,U[1]=l==="trigger"?1:l==="toggle"?2:0,P[2]=h?1:0,U[3]=m,U[4]=v,U[5]=o;let A=e.createBuffer({size:256,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"gate_1d_uniform"});e.queue.writeBuffer(A,0,M);let $=e.createBindGroup({layout:x.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:A}},{binding:1,resource:{buffer:r}},{binding:2,resource:{buffer:t.buffer}}]}),G=a.beginComputePass({label:"gate_1d_compute_pass"});G.setPipeline(x),G.setBindGroup(0,$),G.dispatchWorkgroups(Math.ceil(o/64)),G.end()}};function ge(f,e){switch(f){case"remap":return{evalExpr:"mix(u.outMin, u.outMax, clamp((a - u.inMin) / max(1e-5, u.inMax - u.inMin), 0.0, 1.0))",extraFn:""};case"normalize":return{evalExpr:"clamp((a - u.a_min) / max(1e-5, u.a_max - u.a_min), 0.0, 1.0)",extraFn:""};case"add":return{evalExpr:"a + b",extraFn:""};case"subtract":return{evalExpr:"a - b",extraFn:""};case"multiply":return{evalExpr:"a * b",extraFn:""};case"divide":return{evalExpr:"a / select(b, 1e-5, abs(b) < 1e-5)",extraFn:""};case"invert":return{evalExpr:"1.0 - a",extraFn:""};case"clamp":return{evalExpr:"clamp(a, u.clampMin, u.clampMax)",extraFn:""};case"power":return{evalExpr:"pow(max(0.0, a), u.exponent)",extraFn:""};case"smoothstep":return{evalExpr:"smoothstep(u.edge0, u.edge1, a)",extraFn:""};case"custom":return{extraFn:`
726
+ fn user_signal_calc(a: f32, b: f32, a_min: f32, a_max: f32, t: f32, t_norm: f32, frame: u32) -> f32 {
727
+ ${e}
728
+ }
729
+ `,evalExpr:"user_signal_calc(a, b, a_min, a_max, t, t_norm, frame)"};default:return{evalExpr:"a",extraFn:""}}}function L(f){if(typeof f.signalB=="number"&&!Number.isNaN(f.signalB))return f.signalB;if(f.signalB&&typeof f.signalB=="object"&&typeof f.signalB.value=="number"&&!Number.isNaN(f.signalB.value))return f.signalB.value;if(typeof f.bValue=="number"&&!Number.isNaN(f.bValue))return f.bValue;let e=f.signalConfig;return typeof e?.bValue=="number"&&!Number.isNaN(e.bValue)?e.bValue:1}function Ce(f,e,a,t,r,n){let s=t.signalConfig;switch(f){case"remap":{let u=Number(t.outMin??s?.outMin??0),o=Number(t.outMax??s?.outMax??1);return{min:Math.min(u,o),max:Math.max(u,o)}}case"normalize":return{min:0,max:1};case"invert":return{min:1-a,max:1-e};case"clamp":{let u=Number(t.clampMin??s?.clampMin??0),o=Number(t.clampMax??s?.clampMax??1);return{min:u,max:o}}case"power":{let u=Number(t.exponent??s?.exponent??2);return{min:Math.max(0,e)**u,max:Math.max(0,a)**u}}case"add":{if(r&&n)return{min:e+n.min,max:a+n.max};let u=r?0:L(t);return{min:e+u,max:a+u}}case"subtract":{if(r&&n)return{min:e-n.max,max:a-n.min};let u=r?0:L(t);return{min:e-u,max:a-u}}case"multiply":{if(r&&n){let o=[e*n.min,e*n.max,a*n.min,a*n.max];return{min:Math.min(...o),max:Math.max(...o)}}let u=r?1:L(t);return{min:Math.min(e*u,a*u),max:Math.max(e*u,a*u)}}case"divide":{if(r&&n){let p=Math.abs(n.min)<1e-5?1e-5:n.min,g=Math.abs(n.max)<1e-5?1e-5:n.max,d=[e/p,e/g,a/p,a/g];return{min:Math.min(...d),max:Math.max(...d)}}let u=r?1:L(t),o=Math.abs(u)<1e-5?1e-5:u;return{min:Math.min(e/o,a/o),max:Math.max(e/o,a/o)}}default:return{min:0,max:1}}}var Ye=new ue;export{Z as a,se as b,ue as c,Ye as d};