framefields 2.10.0-canary.0 → 2.12.0

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 (432) hide show
  1. package/dist/audio/index.d.mts +4 -4
  2. package/dist/audio/index.mjs +10 -10
  3. package/dist/{audio-YpBRdI7r.mjs → audio-DHLoNcxD.mjs} +31 -5
  4. package/dist/audio-DHLoNcxD.mjs.map +1 -0
  5. package/dist/audio-afTBdB3U.d.mts +62 -0
  6. package/dist/audio-afTBdB3U.d.mts.map +1 -0
  7. package/dist/cli/check-worker.mjs +43 -43
  8. package/dist/cli.mjs +174 -83
  9. package/dist/cli.mjs.map +1 -1
  10. package/dist/cloud/index.d.mts +14 -3
  11. package/dist/cloud/index.d.mts.map +1 -1
  12. package/dist/cloud/index.mjs +2 -2
  13. package/dist/{cloud-xcfV4J03.mjs → cloud-COid1Ipa.mjs} +169 -16
  14. package/dist/cloud-COid1Ipa.mjs.map +1 -0
  15. package/dist/components/index.d.mts +8 -8
  16. package/dist/components/index.mjs +42 -42
  17. package/dist/{dist-C4Vxgm0Q.mjs → dist-B-OPY7Cs.mjs} +373 -13
  18. package/dist/dist-B-OPY7Cs.mjs.map +1 -0
  19. package/dist/{dist-Cu1fZ9Uy.mjs → dist-BSqeChht.mjs} +2 -2
  20. package/dist/{dist-Cu1fZ9Uy.mjs.map → dist-BSqeChht.mjs.map} +1 -1
  21. package/dist/effects/index.d.mts +4 -4
  22. package/dist/effects/index.mjs +34 -34
  23. package/dist/{effects-DiWYouOK.mjs → effects-C8CL9cOq.mjs} +2 -2
  24. package/dist/{effects-DiWYouOK.mjs.map → effects-C8CL9cOq.mjs.map} +1 -1
  25. package/dist/fonts/index.mjs +2 -2
  26. package/dist/{fonts-BnV-GB1o.mjs → fonts-BQrDjnpV.mjs} +2 -2
  27. package/dist/{fonts-BnV-GB1o.mjs.map → fonts-BQrDjnpV.mjs.map} +1 -1
  28. package/dist/{gpu-Bw35AMwY.mjs → gpu-DHa-3Dou.mjs} +2 -2
  29. package/dist/{gpu-Bw35AMwY.mjs.map → gpu-DHa-3Dou.mjs.map} +1 -1
  30. package/dist/{index-Dyt4yS-x.d.mts → index-BNClElng.d.mts} +467 -465
  31. package/dist/index-BNClElng.d.mts.map +1 -0
  32. package/dist/{index-Bbv0VtxJ.d.mts → index-CAuNuvIg.d.mts} +3 -3
  33. package/dist/{index-Bbv0VtxJ.d.mts.map → index-CAuNuvIg.d.mts.map} +1 -1
  34. package/dist/index-COYNQ_mf.d.mts.map +1 -1
  35. package/dist/{index-CDQrdZ0J.d.mts → index-CTv9ZieD.d.mts} +2 -2
  36. package/dist/{index-CDQrdZ0J.d.mts.map → index-CTv9ZieD.d.mts.map} +1 -1
  37. package/dist/{index-h7m8QgcL.d.mts → index-Drk6HC2k.d.mts} +2 -2
  38. package/dist/{index-h7m8QgcL.d.mts.map → index-Drk6HC2k.d.mts.map} +1 -1
  39. package/dist/{index-B7WqFBZA.d.mts → index-Fliv2Z-w.d.mts} +22 -2
  40. package/dist/index-Fliv2Z-w.d.mts.map +1 -0
  41. package/dist/index.d.mts +9 -9
  42. package/dist/index.mjs +49 -49
  43. package/dist/preview/index.d.mts +1 -1
  44. package/dist/preview/index.mjs +10 -10
  45. package/dist/{preview-BW7ilNWk.mjs → preview-BUtt481A.mjs} +2 -2
  46. package/dist/{preview-BW7ilNWk.mjs.map → preview-BUtt481A.mjs.map} +1 -1
  47. package/dist/preview-engine/audio.mjs +1 -1
  48. package/dist/preview-engine/{chunk-OD4CSXZL.mjs → chunk-35XSD4QM.mjs} +1 -1
  49. package/dist/preview-engine/{chunk-V5HU6NIW.mjs → chunk-3DOIE4DV.mjs} +1 -1
  50. package/dist/preview-engine/{chunk-L2NTIWW5.mjs → chunk-3IT7LHWR.mjs} +1 -1
  51. package/dist/preview-engine/{chunk-6LBFSGCI.mjs → chunk-3MLGWUSK.mjs} +1 -1
  52. package/dist/preview-engine/{chunk-57WXGYEV.mjs → chunk-3QJ5GRBH.mjs} +1 -1
  53. package/dist/preview-engine/{chunk-6O55UROD.mjs → chunk-3QTHW2CD.mjs} +1 -1
  54. package/dist/preview-engine/{chunk-HO7FXISJ.mjs → chunk-4JNIEQS2.mjs} +1 -1
  55. package/dist/preview-engine/{chunk-JFBSNFN6.mjs → chunk-6B3NOY5W.mjs} +1 -1
  56. package/dist/preview-engine/{chunk-HPQDCC4S.mjs → chunk-6O7UDVNL.mjs} +1 -1
  57. package/dist/preview-engine/{chunk-T6L3DO3H.mjs → chunk-74J4DJQA.mjs} +1 -1
  58. package/dist/preview-engine/{chunk-JSKEVYKD.mjs → chunk-AKVRG7UU.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-4BWBX2HM.mjs → chunk-CRBOK3JT.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-JIPMF42Z.mjs → chunk-D6LM7DTJ.mjs} +2 -2
  61. package/dist/preview-engine/{chunk-HGWT3RVQ.mjs → chunk-E7BKWHOT.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-4FACCLLE.mjs → chunk-EWDJMJO5.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-6BE3IL7L.mjs → chunk-EYE3GNL5.mjs} +1 -1
  64. package/dist/preview-engine/{chunk-7A3BNAWY.mjs → chunk-EYKN2VET.mjs} +1 -1
  65. package/dist/preview-engine/chunk-FJTURGJV.mjs +107 -0
  66. package/dist/preview-engine/{chunk-5Y7SO37Q.mjs → chunk-G4ZTSLZU.mjs} +1 -1
  67. package/dist/preview-engine/{chunk-C2GX5L5S.mjs → chunk-GAMAKN5L.mjs} +1 -1
  68. package/dist/preview-engine/{chunk-VVY4PG5E.mjs → chunk-GXFYRMJZ.mjs} +25 -25
  69. package/dist/preview-engine/{chunk-RAW2I27S.mjs → chunk-HTAHYSCW.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-NTTEGJD6.mjs → chunk-ICWD36H6.mjs} +1 -1
  71. package/dist/preview-engine/{chunk-K3TJJXVC.mjs → chunk-JAUMCOOJ.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-4DSOZ5QG.mjs → chunk-KBCZKIIQ.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-WVIDORLK.mjs → chunk-KDCM7S3S.mjs} +1 -1
  74. package/dist/preview-engine/{chunk-ZGEKF34E.mjs → chunk-KIPXBOYG.mjs} +10 -10
  75. package/dist/preview-engine/{chunk-HKYENGC5.mjs → chunk-M4QVCQ3O.mjs} +1 -1
  76. package/dist/preview-engine/{chunk-4N25ZU43.mjs → chunk-NJO2BIJX.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-6SLCECHG.mjs → chunk-NTSALWFF.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-7HW7GA76.mjs → chunk-O75BFM4S.mjs} +1 -1
  79. package/dist/preview-engine/{chunk-YXCTOCQ2.mjs → chunk-ONHY4KNY.mjs} +1 -1
  80. package/dist/preview-engine/{chunk-XCQ7KN4S.mjs → chunk-QPT2Y2GZ.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-ZA5LWHRM.mjs → chunk-QXLFTCLC.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-FW2UDDUT.mjs → chunk-RGKS6YIA.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-VRJBOFFY.mjs → chunk-RN7J5TRU.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-LBP7E7SJ.mjs → chunk-RVCLMO5Q.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-K3C6GUQD.mjs → chunk-SE2C623Z.mjs} +1 -1
  86. package/dist/preview-engine/{chunk-LTR5FXGU.mjs → chunk-SFHWP65D.mjs} +1 -1
  87. package/dist/preview-engine/{chunk-ML7WO27M.mjs → chunk-TKXOSEIJ.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-4TPXZNVR.mjs → chunk-UKZVUYB6.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-IVAA5X5H.mjs → chunk-UVEDFIPN.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-FH72KTSM.mjs → chunk-VUO4K52B.mjs} +1 -1
  91. package/dist/preview-engine/{chunk-OOUDE4XL.mjs → chunk-W4XR6F5G.mjs} +1 -1
  92. package/dist/preview-engine/{chunk-RMHL4XZ3.mjs → chunk-WPYWCWWL.mjs} +1 -1
  93. package/dist/preview-engine/{chunk-CHXR5XZK.mjs → chunk-YAPGJZPI.mjs} +1 -1
  94. package/dist/preview-engine/{chunk-4RLKHFV6.mjs → chunk-YJ4DSRDY.mjs} +1 -1
  95. package/dist/preview-engine/{chunk-Y2SWIWIU.mjs → chunk-YOJKIMU5.mjs} +1 -1
  96. package/dist/preview-engine/{chunk-YS3ROS25.mjs → chunk-ZHNEZZ6A.mjs} +1 -1
  97. package/dist/preview-engine/{chunk-EKEKYGXE.mjs → chunk-ZZMI3WOT.mjs} +1 -1
  98. package/dist/preview-engine/components.mjs +1 -1
  99. package/dist/preview-engine/effects.mjs +1 -1
  100. package/dist/preview-engine/framefields.mjs +1 -1
  101. package/dist/preview-engine/player.mjs +1 -1
  102. package/dist/preview-engine/{renderers-36P2TKPC.mjs → renderers-3FZVDYRQ.mjs} +1 -1
  103. package/dist/preview-engine/renderers-3KEBYOOF.mjs +1 -0
  104. package/dist/preview-engine/{renderers-JZYHX4XI.mjs → renderers-4RPQSUUZ.mjs} +1 -1
  105. package/dist/preview-engine/renderers-5EGFXFPF.mjs +1 -0
  106. package/dist/preview-engine/renderers-5SJHYUTM.mjs +1 -0
  107. package/dist/preview-engine/renderers-66MWDUN6.mjs +1 -0
  108. package/dist/preview-engine/{renderers-CMBI4JOC.mjs → renderers-6FENMFSC.mjs} +1 -1
  109. package/dist/preview-engine/renderers-77OXJ2GY.mjs +1 -0
  110. package/dist/preview-engine/renderers-7LI4QKHO.mjs +1 -0
  111. package/dist/preview-engine/{renderers-6RRWA33X.mjs → renderers-AIZRIW2R.mjs} +1 -1
  112. package/dist/preview-engine/{renderers-UBIFSF37.mjs → renderers-BDI2BDBA.mjs} +1 -1
  113. package/dist/preview-engine/renderers-BDXCO6NR.mjs +1 -0
  114. package/dist/preview-engine/{renderers-OPRXVIGT.mjs → renderers-BUZ67FNZ.mjs} +1 -1
  115. package/dist/preview-engine/renderers-DMTGKURQ.mjs +1 -0
  116. package/dist/preview-engine/{renderers-AUYCQNSS.mjs → renderers-ECXMT5BD.mjs} +1 -1
  117. package/dist/preview-engine/{renderers-4WFRXGMR.mjs → renderers-EVEWFJ7U.mjs} +1 -1
  118. package/dist/preview-engine/renderers-F6PT2LON.mjs +1 -0
  119. package/dist/preview-engine/renderers-F7WPJXKT.mjs +1 -0
  120. package/dist/preview-engine/renderers-FIFF267S.mjs +1 -0
  121. package/dist/preview-engine/{renderers-CQIPHCIW.mjs → renderers-FQISHQEN.mjs} +1 -1
  122. package/dist/preview-engine/{renderers-YJ4PJEPG.mjs → renderers-FXAVFNUN.mjs} +1 -1
  123. package/dist/preview-engine/{renderers-4SNAK77B.mjs → renderers-GITAVRYZ.mjs} +1 -1
  124. package/dist/preview-engine/renderers-GTKRV225.mjs +1 -0
  125. package/dist/preview-engine/{renderers-RQ3JZE3L.mjs → renderers-HG6JZIZO.mjs} +1 -1
  126. package/dist/preview-engine/{renderers-OZKPOUMW.mjs → renderers-HHWMIDN3.mjs} +1 -1
  127. package/dist/preview-engine/renderers-HI3SRJVD.mjs +1 -0
  128. package/dist/preview-engine/renderers-HXEDI4BD.mjs +1 -0
  129. package/dist/preview-engine/{renderers-LF6U4MR5.mjs → renderers-I2ZOUFRU.mjs} +1 -1
  130. package/dist/preview-engine/renderers-JHFD4LHZ.mjs +1 -0
  131. package/dist/preview-engine/renderers-KGVZUFHD.mjs +1 -0
  132. package/dist/preview-engine/{renderers-G2FL3IFD.mjs → renderers-KKULMOV4.mjs} +1 -1
  133. package/dist/preview-engine/{renderers-JALV3B3A.mjs → renderers-KMVMPYY7.mjs} +1 -1
  134. package/dist/preview-engine/renderers-L6GFGHS6.mjs +1 -0
  135. package/dist/preview-engine/renderers-LN7WPG6I.mjs +1 -0
  136. package/dist/preview-engine/{renderers-37Y5LR2S.mjs → renderers-LWW4RF6D.mjs} +1 -1
  137. package/dist/preview-engine/renderers-LY57CZZB.mjs +1 -0
  138. package/dist/preview-engine/renderers-MBMJWZEW.mjs +1 -0
  139. package/dist/preview-engine/{renderers-6RYIPQ7W.mjs → renderers-MPFU74I3.mjs} +1 -1
  140. package/dist/preview-engine/{renderers-TKHQRERE.mjs → renderers-MW53LTMB.mjs} +1 -1
  141. package/dist/preview-engine/{renderers-Q5YCUPYE.mjs → renderers-PC2GOZDT.mjs} +1 -1
  142. package/dist/preview-engine/renderers-PREFONJG.mjs +1 -0
  143. package/dist/preview-engine/{renderers-WG756VF3.mjs → renderers-PSBTV2DO.mjs} +1 -1
  144. package/dist/preview-engine/{renderers-XZ3XDQIN.mjs → renderers-Q77UPEYE.mjs} +1 -1
  145. package/dist/preview-engine/renderers-QHXCFDHI.mjs +1 -0
  146. package/dist/preview-engine/renderers-R22CDFO4.mjs +1 -0
  147. package/dist/preview-engine/renderers-RDYJRNAR.mjs +1 -0
  148. package/dist/preview-engine/renderers-RENLKAA7.mjs +1 -0
  149. package/dist/preview-engine/{renderers-U4S577ON.mjs → renderers-RIPXT4AL.mjs} +1 -1
  150. package/dist/preview-engine/{renderers-ZQVKE5AO.mjs → renderers-SFVFAS3C.mjs} +1 -1
  151. package/dist/preview-engine/{renderers-5K3BSBI6.mjs → renderers-SWQVCJHB.mjs} +1 -1
  152. package/dist/preview-engine/renderers-SZVDZDY7.mjs +1 -0
  153. package/dist/preview-engine/renderers-TEKHQHCL.mjs +1 -0
  154. package/dist/preview-engine/renderers-TS32FDV7.mjs +1 -0
  155. package/dist/preview-engine/renderers-TYSLUZ53.mjs +1 -0
  156. package/dist/preview-engine/renderers-U3RLYFCN.mjs +1 -0
  157. package/dist/preview-engine/{renderers-PGZDFDSC.mjs → renderers-U4IXWMD6.mjs} +1 -1
  158. package/dist/preview-engine/renderers-V5HM6PZ2.mjs +1 -0
  159. package/dist/preview-engine/{renderers-4MW4NW6O.mjs → renderers-VUQAZ56P.mjs} +1 -1
  160. package/dist/preview-engine/renderers-W5YFMLSB.mjs +1 -0
  161. package/dist/preview-engine/renderers-XKDWUK56.mjs +1 -0
  162. package/dist/preview-engine/renderers-XKSBNCLZ.mjs +1 -0
  163. package/dist/preview-engine/renderers-XLQXVD37.mjs +1 -0
  164. package/dist/preview-engine/renderers-ZGX3A3QZ.mjs +1 -0
  165. package/dist/preview-engine/signals.mjs +1 -1
  166. package/dist/{program-BUjUTdxq.mjs → program-Cvv_nb9T.mjs} +2 -2
  167. package/dist/{program-BUjUTdxq.mjs.map → program-Cvv_nb9T.mjs.map} +1 -1
  168. package/dist/renderer/index.d.mts +1 -1
  169. package/dist/renderer/index.mjs +2 -2
  170. package/dist/renderer--RJepuOy.mjs +5 -0
  171. package/dist/{renderer-B84T5I98.mjs → renderer-4uZGSmUD.mjs} +3 -3
  172. package/dist/{renderer-B84T5I98.mjs.map → renderer-4uZGSmUD.mjs.map} +1 -1
  173. package/dist/{renderer-Bo5GwErU.mjs → renderer-5fGj_tqN.mjs} +3 -3
  174. package/dist/{renderer-Bo5GwErU.mjs.map → renderer-5fGj_tqN.mjs.map} +1 -1
  175. package/dist/{renderer-D7DlNOVi.mjs → renderer-6g1ri445.mjs} +3 -3
  176. package/dist/{renderer-D7DlNOVi.mjs.map → renderer-6g1ri445.mjs.map} +1 -1
  177. package/dist/{renderer-H4CZt3Z5.mjs → renderer-B09I95bo.mjs} +2 -2
  178. package/dist/{renderer-tcypOFaB.d.mts → renderer-B1U6YRRV.d.mts} +2 -2
  179. package/dist/{renderer-tcypOFaB.d.mts.map → renderer-B1U6YRRV.d.mts.map} +1 -1
  180. package/dist/renderer-B4NFnaty.mjs +5 -0
  181. package/dist/renderer-B6g4ts0e.mjs +5 -0
  182. package/dist/{renderer-DBfx6QX1.mjs → renderer-BBjkX0Vt.mjs} +2 -2
  183. package/dist/{renderer-BdRwbLLV.mjs → renderer-BC_Nse6h.mjs} +3 -3
  184. package/dist/{renderer-BdRwbLLV.mjs.map → renderer-BC_Nse6h.mjs.map} +1 -1
  185. package/dist/renderer-BGoAr-tl.mjs +5 -0
  186. package/dist/{renderer-CWmlfdLb.mjs → renderer-BJEexai1.mjs} +3 -3
  187. package/dist/{renderer-CWmlfdLb.mjs.map → renderer-BJEexai1.mjs.map} +1 -1
  188. package/dist/renderer-BSOdBgdE.mjs +5 -0
  189. package/dist/{renderer-muB4slsV.mjs → renderer-BSsKlcHk.mjs} +3 -3
  190. package/dist/{renderer-muB4slsV.mjs.map → renderer-BSsKlcHk.mjs.map} +1 -1
  191. package/dist/{renderer-DlbSqOJR.mjs → renderer-BTd6tFcS.mjs} +3 -3
  192. package/dist/{renderer-DlbSqOJR.mjs.map → renderer-BTd6tFcS.mjs.map} +1 -1
  193. package/dist/renderer-BU6O0fpM.mjs +5 -0
  194. package/dist/{renderer-DtCmG-tT.mjs → renderer-BXGuCnCJ.mjs} +3 -3
  195. package/dist/{renderer-DtCmG-tT.mjs.map → renderer-BXGuCnCJ.mjs.map} +1 -1
  196. package/dist/renderer-BZ97iidG.mjs +5 -0
  197. package/dist/renderer-B_Klh1VT.mjs +5 -0
  198. package/dist/renderer-BaWQM1y-.mjs +5 -0
  199. package/dist/renderer-Bc0jvAj0.mjs +5 -0
  200. package/dist/{renderer-jBKpX3Xg.mjs → renderer-Bf7Z7WT5.mjs} +2 -2
  201. package/dist/{renderer-jBKpX3Xg.mjs.map → renderer-Bf7Z7WT5.mjs.map} +1 -1
  202. package/dist/renderer-Bm077kZ6.mjs +5 -0
  203. package/dist/renderer-BtzE_e_Y.mjs +5 -0
  204. package/dist/{renderer-kFx1_MmK.mjs → renderer-BvRM3OZ6.mjs} +2 -2
  205. package/dist/{renderer-kFx1_MmK.mjs.map → renderer-BvRM3OZ6.mjs.map} +1 -1
  206. package/dist/{renderer-DAfCcnCz.mjs → renderer-BwJ0nXXu.mjs} +3 -3
  207. package/dist/{renderer-DAfCcnCz.mjs.map → renderer-BwJ0nXXu.mjs.map} +1 -1
  208. package/dist/{renderer-CO1PwItH.mjs → renderer-BwV-o_1b.mjs} +2 -2
  209. package/dist/{renderer-CO1PwItH.mjs.map → renderer-BwV-o_1b.mjs.map} +1 -1
  210. package/dist/{renderer-Bm91Xv6l.mjs → renderer-Bxiiar50.mjs} +3 -3
  211. package/dist/{renderer-Bm91Xv6l.mjs.map → renderer-Bxiiar50.mjs.map} +1 -1
  212. package/dist/{renderer-CanNjQuL.mjs → renderer-ByFPmHBC.mjs} +2 -2
  213. package/dist/{renderer-CanNjQuL.mjs.map → renderer-ByFPmHBC.mjs.map} +1 -1
  214. package/dist/{renderer-JASAZUyY.mjs → renderer-BzTj_CeK.mjs} +3 -3
  215. package/dist/{renderer-JASAZUyY.mjs.map → renderer-BzTj_CeK.mjs.map} +1 -1
  216. package/dist/renderer-C225eCAo.mjs +5 -0
  217. package/dist/{renderer-7w9PZmWJ.mjs → renderer-C2kFIZ4r.mjs} +2 -2
  218. package/dist/{renderer-7w9PZmWJ.mjs.map → renderer-C2kFIZ4r.mjs.map} +1 -1
  219. package/dist/{renderer-vpsU_4XW.mjs → renderer-C3CGYjrC.mjs} +3 -3
  220. package/dist/{renderer-vpsU_4XW.mjs.map → renderer-C3CGYjrC.mjs.map} +1 -1
  221. package/dist/{renderer-BFmVDdVs.mjs → renderer-CGpi8CDT.mjs} +3 -3
  222. package/dist/{renderer-BFmVDdVs.mjs.map → renderer-CGpi8CDT.mjs.map} +1 -1
  223. package/dist/{renderer-FFLnACY-.mjs → renderer-CInMMs5x.mjs} +3 -3
  224. package/dist/{renderer-FFLnACY-.mjs.map → renderer-CInMMs5x.mjs.map} +1 -1
  225. package/dist/{renderer-CTSvHf6g.mjs → renderer-CLTRTtQ8.mjs} +3 -3
  226. package/dist/{renderer-CTSvHf6g.mjs.map → renderer-CLTRTtQ8.mjs.map} +1 -1
  227. package/dist/renderer-CLXdR4vz.mjs +5 -0
  228. package/dist/{renderer-7c0ecb-L.mjs → renderer-CMCmljb0.mjs} +2 -2
  229. package/dist/{renderer-7c0ecb-L.mjs.map → renderer-CMCmljb0.mjs.map} +1 -1
  230. package/dist/{renderer-BnN3JH9u.mjs → renderer-CN-mCIoI.mjs} +3 -3
  231. package/dist/{renderer-BnN3JH9u.mjs.map → renderer-CN-mCIoI.mjs.map} +1 -1
  232. package/dist/{renderer-Bif8bwCq.mjs → renderer-CNpq7rL-.mjs} +2 -2
  233. package/dist/{renderer-Bif8bwCq.mjs.map → renderer-CNpq7rL-.mjs.map} +1 -1
  234. package/dist/{renderer-Chfo4G9t.mjs → renderer-CZClDMgF.mjs} +3 -3
  235. package/dist/{renderer-Chfo4G9t.mjs.map → renderer-CZClDMgF.mjs.map} +1 -1
  236. package/dist/{renderer-BvRaVByi.mjs → renderer-C_gR2H3R.mjs} +2 -2
  237. package/dist/{renderer-BvRaVByi.mjs.map → renderer-C_gR2H3R.mjs.map} +1 -1
  238. package/dist/{renderer-DJuVX3c5.d.mts → renderer-CcmxR6Fy.d.mts} +2 -2
  239. package/dist/{renderer-DJuVX3c5.d.mts.map → renderer-CcmxR6Fy.d.mts.map} +1 -1
  240. package/dist/{renderer-BT4im6c0.mjs → renderer-CiHVnhUk.mjs} +3 -3
  241. package/dist/{renderer-BT4im6c0.mjs.map → renderer-CiHVnhUk.mjs.map} +1 -1
  242. package/dist/renderer-CszM8B3C.mjs +5 -0
  243. package/dist/renderer-Ctp8ZYfk.mjs +5 -0
  244. package/dist/{renderer-BIToh0CA.mjs → renderer-CtpEzVBn.mjs} +2 -2
  245. package/dist/{renderer-BIToh0CA.mjs.map → renderer-CtpEzVBn.mjs.map} +1 -1
  246. package/dist/renderer-CxQdSp8I.mjs +5 -0
  247. package/dist/{renderer-BG_cnGbF.mjs → renderer-D3QPNBEj.mjs} +3 -3
  248. package/dist/{renderer-BG_cnGbF.mjs.map → renderer-D3QPNBEj.mjs.map} +1 -1
  249. package/dist/{renderer-CybBR8AL.mjs → renderer-D3YbHjRG.mjs} +69 -69
  250. package/dist/{renderer-CybBR8AL.mjs.map → renderer-D3YbHjRG.mjs.map} +1 -1
  251. package/dist/renderer-D4GMRtDd.mjs +6 -0
  252. package/dist/{renderer-w7mlMSC-.mjs → renderer-DEoerd-j.mjs} +3 -3
  253. package/dist/{renderer-w7mlMSC-.mjs.map → renderer-DEoerd-j.mjs.map} +1 -1
  254. package/dist/renderer-DEsGIvTZ.mjs +5 -0
  255. package/dist/{renderer-fWW0bsVl.mjs → renderer-DGXqspB9.mjs} +2 -2
  256. package/dist/renderer-DIaUQ0EP.mjs +5 -0
  257. package/dist/{renderer-Dd2XrdqA.mjs → renderer-DKFaVaRJ.mjs} +2 -2
  258. package/dist/{renderer-Dd2XrdqA.mjs.map → renderer-DKFaVaRJ.mjs.map} +1 -1
  259. package/dist/{renderer-DKptrHeL.mjs → renderer-DL3o_lG1.mjs} +3 -3
  260. package/dist/{renderer-DKptrHeL.mjs.map → renderer-DL3o_lG1.mjs.map} +1 -1
  261. package/dist/{renderer-DxkvDAA6.mjs → renderer-DLaUT6JZ.mjs} +2 -2
  262. package/dist/{renderer-DxkvDAA6.mjs.map → renderer-DLaUT6JZ.mjs.map} +1 -1
  263. package/dist/renderer-DLjqcNzQ.mjs +5 -0
  264. package/dist/renderer-DMuQZa51.mjs +5 -0
  265. package/dist/{renderer-BeJoW-nG.mjs → renderer-DO1SZ5xY.mjs} +3 -3
  266. package/dist/{renderer-BeJoW-nG.mjs.map → renderer-DO1SZ5xY.mjs.map} +1 -1
  267. package/dist/{renderer-B3WHDQeB.mjs → renderer-DO_zXwMJ.mjs} +2 -2
  268. package/dist/{renderer-B3WHDQeB.mjs.map → renderer-DO_zXwMJ.mjs.map} +1 -1
  269. package/dist/renderer-DOgi2aF2.mjs +5 -0
  270. package/dist/{renderer-CtulmkqT.mjs → renderer-DP9ScNM6.mjs} +2 -2
  271. package/dist/{renderer-CtulmkqT.mjs.map → renderer-DP9ScNM6.mjs.map} +1 -1
  272. package/dist/{renderer-CLRrcT_3.mjs → renderer-DQJHjU0L.mjs} +3 -3
  273. package/dist/{renderer-CLRrcT_3.mjs.map → renderer-DQJHjU0L.mjs.map} +1 -1
  274. package/dist/renderer-DSh7cvi4.mjs +5 -0
  275. package/dist/renderer-DV1LVBBP.mjs +5 -0
  276. package/dist/{renderer-D7lApyWZ.mjs → renderer-DX60Kr20.mjs} +2 -2
  277. package/dist/{renderer-D7lApyWZ.mjs.map → renderer-DX60Kr20.mjs.map} +1 -1
  278. package/dist/{renderer-R2kLaNuR.mjs → renderer-DZIxduEt.mjs} +2 -2
  279. package/dist/{renderer-R2kLaNuR.mjs.map → renderer-DZIxduEt.mjs.map} +1 -1
  280. package/dist/{renderer-DMtzPqYo.mjs → renderer-DaLy1dFA.mjs} +5 -5
  281. package/dist/{renderer-DMtzPqYo.mjs.map → renderer-DaLy1dFA.mjs.map} +1 -1
  282. package/dist/{renderer-1KgHl_ls.mjs → renderer-DaY04IyU.mjs} +3 -3
  283. package/dist/{renderer-1KgHl_ls.mjs.map → renderer-DaY04IyU.mjs.map} +1 -1
  284. package/dist/renderer-Dhrj2bJz.mjs +5 -0
  285. package/dist/{renderer-Dih1rtT6.mjs → renderer-Dj54y3h3.mjs} +2 -2
  286. package/dist/{renderer-Dih1rtT6.mjs.map → renderer-Dj54y3h3.mjs.map} +1 -1
  287. package/dist/renderer-DoFUu1R4.mjs +5 -0
  288. package/dist/{renderer-DkAFIpzB.mjs → renderer-Dp9FQKVP.mjs} +3 -3
  289. package/dist/{renderer-DkAFIpzB.mjs.map → renderer-Dp9FQKVP.mjs.map} +1 -1
  290. package/dist/{renderer--f8JHHyT.mjs → renderer-DrK6pyfz.mjs} +3 -3
  291. package/dist/{renderer--f8JHHyT.mjs.map → renderer-DrK6pyfz.mjs.map} +1 -1
  292. package/dist/{renderer-Ch1qZ2PT.mjs → renderer-DrL3J9ci.mjs} +2 -2
  293. package/dist/{renderer-Ch1qZ2PT.mjs.map → renderer-DrL3J9ci.mjs.map} +1 -1
  294. package/dist/renderer-DsydX3cx.mjs +5 -0
  295. package/dist/{renderer-oiDoNzhv.mjs → renderer-DwH5e3hx.mjs} +2 -2
  296. package/dist/renderer-DxVSoeYi.mjs +5 -0
  297. package/dist/{renderer-Br_aJ_b7.mjs → renderer-Dy1xQOTu.mjs} +2 -2
  298. package/dist/{renderer-Br_aJ_b7.mjs.map → renderer-Dy1xQOTu.mjs.map} +1 -1
  299. package/dist/{renderer-CDfCaqV4.mjs → renderer-FvvywNvv.mjs} +2 -2
  300. package/dist/{renderer-CDfCaqV4.mjs.map → renderer-FvvywNvv.mjs.map} +1 -1
  301. package/dist/{renderer-DjiebKHO.mjs → renderer-HXw4cJZx.mjs} +2 -2
  302. package/dist/{renderer-DjiebKHO.mjs.map → renderer-HXw4cJZx.mjs.map} +1 -1
  303. package/dist/{renderer-D_rEtJAH.mjs → renderer-HhJPFidU.mjs} +3 -3
  304. package/dist/{renderer-D_rEtJAH.mjs.map → renderer-HhJPFidU.mjs.map} +1 -1
  305. package/dist/{renderer-Dswrn-yi.mjs → renderer-IAffbHXx.mjs} +2 -2
  306. package/dist/{renderer-Dswrn-yi.mjs.map → renderer-IAffbHXx.mjs.map} +1 -1
  307. package/dist/{renderer-D1tDMuD0.mjs → renderer-LrAldCWN.mjs} +3 -3
  308. package/dist/{renderer-D1tDMuD0.mjs.map → renderer-LrAldCWN.mjs.map} +1 -1
  309. package/dist/renderer-Nc9bHb0n.mjs +5 -0
  310. package/dist/{renderer-DAug14gu.mjs → renderer-O4y02xkD.mjs} +2 -2
  311. package/dist/{renderer-DAug14gu.mjs.map → renderer-O4y02xkD.mjs.map} +1 -1
  312. package/dist/{renderer-Ck-NLzz0.mjs → renderer-PnnkUWm-.mjs} +2 -2
  313. package/dist/{renderer-Ck-NLzz0.mjs.map → renderer-PnnkUWm-.mjs.map} +1 -1
  314. package/dist/renderer-TFaSD2Db.mjs +5 -0
  315. package/dist/{renderer-CKlNHDKI.mjs → renderer-TiaHrU5z.mjs} +3 -3
  316. package/dist/{renderer-CKlNHDKI.mjs.map → renderer-TiaHrU5z.mjs.map} +1 -1
  317. package/dist/renderer-Z61ctppe.mjs +5 -0
  318. package/dist/{renderer-BTLZBD63.mjs → renderer-_KIBvES8.mjs} +3 -3
  319. package/dist/{renderer-BTLZBD63.mjs.map → renderer-_KIBvES8.mjs.map} +1 -1
  320. package/dist/renderer-awXf3sNS.mjs +5 -0
  321. package/dist/{renderer-CsRuEpR2.mjs → renderer-b0H3oDae.mjs} +2 -2
  322. package/dist/{renderer-CsRuEpR2.mjs.map → renderer-b0H3oDae.mjs.map} +1 -1
  323. package/dist/renderer-cHT28oYI.mjs +5 -0
  324. package/dist/renderer-g7Y3bFot.mjs +5 -0
  325. package/dist/{renderer-CxabOSkk.mjs → renderer-oBgCEqaM.mjs} +2 -2
  326. package/dist/{renderer-CxabOSkk.mjs.map → renderer-oBgCEqaM.mjs.map} +1 -1
  327. package/dist/{renderer-BhNZn2DU.mjs → renderer-qVJdxbXB.mjs} +3 -3
  328. package/dist/{renderer-BhNZn2DU.mjs.map → renderer-qVJdxbXB.mjs.map} +1 -1
  329. package/dist/renderer-qVv0OzVc.mjs +5 -0
  330. package/dist/{renderer-B8i4d1Rc.mjs → renderer-rKw5_EjG.mjs} +2 -2
  331. package/dist/{renderer-B8i4d1Rc.mjs.map → renderer-rKw5_EjG.mjs.map} +1 -1
  332. package/dist/{renderer-CeNAgCE2.mjs → renderer-sMFJtt_H.mjs} +2 -2
  333. package/dist/{renderer-CeNAgCE2.mjs.map → renderer-sMFJtt_H.mjs.map} +1 -1
  334. package/dist/{renderer-DrExCXnp.mjs → renderer-smP1F57W.mjs} +2 -2
  335. package/dist/{renderer-DrExCXnp.mjs.map → renderer-smP1F57W.mjs.map} +1 -1
  336. package/dist/{renderer-DxiF4O6X.mjs → renderer-snjhPaP-.mjs} +3 -3
  337. package/dist/{renderer-DxiF4O6X.mjs.map → renderer-snjhPaP-.mjs.map} +1 -1
  338. package/dist/{renderer-CwAuWLWm.mjs → renderer-t1sXDiqm.mjs} +3 -3
  339. package/dist/{renderer-CwAuWLWm.mjs.map → renderer-t1sXDiqm.mjs.map} +1 -1
  340. package/dist/{renderer-Bb_HHUQ0.mjs → renderer-tRi3KNoG.mjs} +3 -3
  341. package/dist/{renderer-Bb_HHUQ0.mjs.map → renderer-tRi3KNoG.mjs.map} +1 -1
  342. package/dist/{renderer-BSW4CGZF.mjs → renderer-uA0UCxjA.mjs} +2 -2
  343. package/dist/{renderer-BSW4CGZF.mjs.map → renderer-uA0UCxjA.mjs.map} +1 -1
  344. package/dist/{renderer-vPxMXiv8.mjs → renderer-xNOKSN3V.mjs} +3 -3
  345. package/dist/{renderer-vPxMXiv8.mjs.map → renderer-xNOKSN3V.mjs.map} +1 -1
  346. package/dist/{renderers-CP8CFWDs-OgyUiyrr.mjs → renderers-CP8CFWDs-DWRjjeUg.mjs} +2 -2
  347. package/dist/{renderers-CP8CFWDs-OgyUiyrr.mjs.map → renderers-CP8CFWDs-DWRjjeUg.mjs.map} +1 -1
  348. package/dist/signals/index.d.mts +6 -6
  349. package/dist/signals/index.mjs +4 -4
  350. package/dist/{src-C3f3zXYg.mjs → src-D7M8VTzv.mjs} +7 -7
  351. package/dist/{src-C3f3zXYg.mjs.map → src-D7M8VTzv.mjs.map} +1 -1
  352. package/package.json +59 -59
  353. package/dist/audio-1X5qNNmk.d.mts +0 -38
  354. package/dist/audio-1X5qNNmk.d.mts.map +0 -1
  355. package/dist/audio-YpBRdI7r.mjs.map +0 -1
  356. package/dist/cloud-xcfV4J03.mjs.map +0 -1
  357. package/dist/dist-C4Vxgm0Q.mjs.map +0 -1
  358. package/dist/index-B7WqFBZA.d.mts.map +0 -1
  359. package/dist/index-Dyt4yS-x.d.mts.map +0 -1
  360. package/dist/preview-engine/chunk-GTMZOMAN.mjs +0 -1
  361. package/dist/preview-engine/renderers-33PIDDZC.mjs +0 -1
  362. package/dist/preview-engine/renderers-3AZ3HY53.mjs +0 -1
  363. package/dist/preview-engine/renderers-3FGKW52B.mjs +0 -1
  364. package/dist/preview-engine/renderers-4A2FBS3Y.mjs +0 -1
  365. package/dist/preview-engine/renderers-65DU2F5W.mjs +0 -1
  366. package/dist/preview-engine/renderers-6CTPYQR6.mjs +0 -1
  367. package/dist/preview-engine/renderers-AWODRI3B.mjs +0 -1
  368. package/dist/preview-engine/renderers-BO6HHGMZ.mjs +0 -1
  369. package/dist/preview-engine/renderers-BSXYDEV7.mjs +0 -1
  370. package/dist/preview-engine/renderers-ECW2CGNU.mjs +0 -1
  371. package/dist/preview-engine/renderers-EEX22FUO.mjs +0 -1
  372. package/dist/preview-engine/renderers-GCQKGJ7W.mjs +0 -1
  373. package/dist/preview-engine/renderers-HZBXLDKG.mjs +0 -1
  374. package/dist/preview-engine/renderers-IOXNQPQK.mjs +0 -1
  375. package/dist/preview-engine/renderers-IR44E4ZZ.mjs +0 -1
  376. package/dist/preview-engine/renderers-JZZ3ODOZ.mjs +0 -1
  377. package/dist/preview-engine/renderers-K37YL3Z7.mjs +0 -1
  378. package/dist/preview-engine/renderers-KUJQV3K6.mjs +0 -1
  379. package/dist/preview-engine/renderers-KXVKLSSX.mjs +0 -1
  380. package/dist/preview-engine/renderers-N4RVFX3G.mjs +0 -1
  381. package/dist/preview-engine/renderers-NZWWEAYA.mjs +0 -1
  382. package/dist/preview-engine/renderers-P4JJEDZB.mjs +0 -1
  383. package/dist/preview-engine/renderers-Q4572F5C.mjs +0 -1
  384. package/dist/preview-engine/renderers-QAX2QWWQ.mjs +0 -1
  385. package/dist/preview-engine/renderers-SRFIEVWL.mjs +0 -1
  386. package/dist/preview-engine/renderers-SYC6WFTM.mjs +0 -1
  387. package/dist/preview-engine/renderers-UH4WN3QN.mjs +0 -1
  388. package/dist/preview-engine/renderers-V4FFCAS7.mjs +0 -1
  389. package/dist/preview-engine/renderers-VGDEOZUU.mjs +0 -1
  390. package/dist/preview-engine/renderers-VJJKBX5K.mjs +0 -1
  391. package/dist/preview-engine/renderers-VJOKVDYW.mjs +0 -1
  392. package/dist/preview-engine/renderers-VUUWZUOH.mjs +0 -1
  393. package/dist/preview-engine/renderers-WOP5GOZP.mjs +0 -1
  394. package/dist/preview-engine/renderers-Y4MGN2FR.mjs +0 -1
  395. package/dist/preview-engine/renderers-YAMYH7IK.mjs +0 -1
  396. package/dist/preview-engine/renderers-ZNLSAWW3.mjs +0 -1
  397. package/dist/renderer-6sNr6ZRJ.mjs +0 -6
  398. package/dist/renderer-BDHGxD6p.mjs +0 -5
  399. package/dist/renderer-BT9dvpk2.mjs +0 -5
  400. package/dist/renderer-BfaRh0qy.mjs +0 -5
  401. package/dist/renderer-BlwXKV7Y.mjs +0 -5
  402. package/dist/renderer-C40yZK3x.mjs +0 -5
  403. package/dist/renderer-C5MjQ7L8.mjs +0 -5
  404. package/dist/renderer-C8LjKYnS.mjs +0 -5
  405. package/dist/renderer-C9q9H_qa.mjs +0 -5
  406. package/dist/renderer-CF9ta9Rm.mjs +0 -5
  407. package/dist/renderer-CO205Gr9.mjs +0 -5
  408. package/dist/renderer-CSm8UXLP.mjs +0 -5
  409. package/dist/renderer-CSy8HRtF.mjs +0 -5
  410. package/dist/renderer-CdNRWDsA.mjs +0 -5
  411. package/dist/renderer-CkAjiGRB.mjs +0 -5
  412. package/dist/renderer-CmryuPBm.mjs +0 -5
  413. package/dist/renderer-CnEwne4L.mjs +0 -5
  414. package/dist/renderer-D4QDoqOG.mjs +0 -5
  415. package/dist/renderer-D7cS2a8z.mjs +0 -5
  416. package/dist/renderer-D85CNC-b.mjs +0 -5
  417. package/dist/renderer-DC9IoJNz.mjs +0 -5
  418. package/dist/renderer-DIDh0gFm.mjs +0 -5
  419. package/dist/renderer-DLmJ9GWE.mjs +0 -5
  420. package/dist/renderer-DM7PUWP9.mjs +0 -5
  421. package/dist/renderer-DPWFDxIO.mjs +0 -5
  422. package/dist/renderer-DUCByhAk.mjs +0 -5
  423. package/dist/renderer-DVOtnCKH.mjs +0 -5
  424. package/dist/renderer-DVrN2bW8.mjs +0 -5
  425. package/dist/renderer-DdOVwfG4.mjs +0 -5
  426. package/dist/renderer-DtCe9ouu.mjs +0 -5
  427. package/dist/renderer-Mg0kr9Fm.mjs +0 -5
  428. package/dist/renderer-T35PsSw5.mjs +0 -5
  429. package/dist/renderer-iSZ5NT-J.mjs +0 -5
  430. package/dist/renderer-nEmMjQ1a.mjs +0 -5
  431. package/dist/renderer-pG1nyfjE.mjs +0 -5
  432. package/dist/renderer-vbb9e3E3.mjs +0 -5
@@ -0,0 +1,107 @@
1
+ import{b as S}from"./chunk-A6OAPDIA.mjs";import{a as T}from"./chunk-5SLBE2FX.mjs";import{a as C,b as M}from"./chunk-GXFYRMJZ.mjs";import{l as b}from"./chunk-ULOFDFHJ.mjs";import{g as P}from"./chunk-Y4NIR77Z.mjs";P();P();var x=2048,y=8,k=2,R=.6,H=.5,K=1.25,N=.03,V=.03,_=128,$=65535,Y=`
2
+ struct PitchUniforms {
3
+ sampleRate : f32,
4
+ numSamples : u32,
5
+ numFrames : u32,
6
+ windowSize : u32,
7
+ lagMin : u32,
8
+ lagMax : u32,
9
+ gridX : u32,
10
+ fps : f32,
11
+ };
12
+
13
+ const K : u32 = ${y}u;
14
+ const WG : u32 = ${_}u;
15
+ const EMPTY : f32 = ${k}.0f;
16
+ const MERGE : f32 = ${V}f;
17
+
18
+ @group(0) @binding(0) var<uniform> u : PitchUniforms;
19
+ @group(0) @binding(1) var<storage, read> pcm : array<f32>;
20
+ @group(0) @binding(2) var<storage, read_write> candidates : array<vec2f>;
21
+
22
+ var<workgroup> yin : array<f32, ${x+1}>;
23
+
24
+ fn sampleAt(i : u32) -> f32 {
25
+ if (i >= u.numSamples) { return 0.0f; }
26
+ return pcm[i];
27
+ }
28
+
29
+ // Keeps the K deepest dips sorted by value, shallowest last. A dip within
30
+ // MERGE of an existing candidate's lag is the same broad dip: only the
31
+ // deeper of the two survives.
32
+ fn insertCandidate(lags : ptr<function, array<f32, K>>, vals : ptr<function, array<f32, K>>, lag : f32, val : f32) {
33
+ var slot = K - 1u;
34
+ for (var k = 0u; k < K; k = k + 1u) {
35
+ if ((*vals)[k] < EMPTY && abs((*lags)[k] - lag) <= MERGE * lag) {
36
+ if ((*vals)[k] <= val) { return; }
37
+ slot = k;
38
+ break;
39
+ }
40
+ }
41
+ if ((*vals)[slot] <= val) { return; }
42
+ var i = slot;
43
+ loop {
44
+ if (i == 0u || (*vals)[i - 1u] <= val) { break; }
45
+ (*vals)[i] = (*vals)[i - 1u];
46
+ (*lags)[i] = (*lags)[i - 1u];
47
+ i = i - 1u;
48
+ }
49
+ (*vals)[i] = val;
50
+ (*lags)[i] = lag;
51
+ }
52
+
53
+ @compute @workgroup_size(${_})
54
+ fn main(@builtin(workgroup_id) wid : vec3<u32>, @builtin(local_invocation_index) lid : u32) {
55
+ let frame = wid.x + wid.y * u.gridX;
56
+ if (frame >= u.numFrames) { return; }
57
+
58
+ // Center the analysed span (window + longest lag) on the frame time.
59
+ let span = u.windowSize + u.lagMax;
60
+ let center = i32(round(f32(frame) * u.sampleRate / u.fps));
61
+ let maxStart = max(i32(u.numSamples) - i32(span), 0);
62
+ let start = u32(clamp(center - i32(span / 2u), 0, maxStart));
63
+
64
+ // YIN difference function, one lag per invocation per stride.
65
+ for (var tau = lid; tau <= u.lagMax; tau = tau + WG) {
66
+ var acc = 0.0f;
67
+ for (var j = 0u; j < u.windowSize; j = j + 1u) {
68
+ let d = sampleAt(start + j) - sampleAt(start + j + tau);
69
+ acc = acc + d * d;
70
+ }
71
+ yin[tau] = acc;
72
+ }
73
+ workgroupBarrier();
74
+ if (lid != 0u) { return; }
75
+
76
+ // Cumulative mean normalized difference, in place.
77
+ var running = 0.0f;
78
+ yin[0] = 1.0f;
79
+ for (var tau = 1u; tau <= u.lagMax; tau = tau + 1u) {
80
+ running = running + yin[tau];
81
+ yin[tau] = select(1.0f, yin[tau] * f32(tau) / running, running > 0.0f);
82
+ }
83
+
84
+ var lags : array<f32, K>;
85
+ var vals : array<f32, K>;
86
+ for (var k = 0u; k < K; k = k + 1u) {
87
+ lags[k] = 0.0f;
88
+ vals[k] = EMPTY;
89
+ }
90
+ for (var tau = max(u.lagMin, 1u); tau < u.lagMax; tau = tau + 1u) {
91
+ let prev = yin[tau - 1u];
92
+ let cur = yin[tau];
93
+ let next = yin[tau + 1u];
94
+ if (cur < prev && cur <= next) {
95
+ // Parabolic interpolation of the dip for sub-sample period.
96
+ let den = prev - 2.0f * cur + next;
97
+ let offset = select(0.0f, 0.5f * (prev - next) / den, den > 0.0f);
98
+ insertCandidate(&lags, &vals, f32(tau) + offset, cur);
99
+ }
100
+ }
101
+
102
+ let base = frame * K;
103
+ for (var k = 0u; k < K; k = k + 1u) {
104
+ candidates[base + k] = vec2f(lags[k], vals[k]);
105
+ }
106
+ }
107
+ `;function W(e,a){let t=a.minHz??50,i=a.maxHz??1e3;if(!(t>0&&i>t))throw new Error(`Pitch range needs 0 < minHz < maxHz (got ${t}..${i}).`);let n=Math.ceil(e/t)+1;if(n>x)throw new Error(`minHz ${t} needs a ${n}-sample period at ${e} Hz; the limit is ${x} (minHz >= ${Math.ceil(e/(x-1))}).`);let o=Math.max(2,Math.floor(e/i)),r=a.windowMs??45;return{lagMin:o,lagMax:n,windowSize:Math.max(n,Math.round(r/1e3*e)),voicingThreshold:a.voicingThreshold??.8,octaveJumpCost:a.octaveJumpCost??8}}function j(e,a,t){let i=e>0,n=a>0;return i!==n?R:n?t*Math.abs(Math.log2(a/e)):0}function L(e,a,t,i){for(let n=0;n<y;n++){let o=e[(a+n)*2],r=e[(a+n)*2+1];if(r>=k||o<=0||o>=t)continue;let c=Math.round(t/o);if(c>=2&&Math.abs(t-c*o)<=N*t&&r<=i*K)return!0}return!1}function J(e,a,t,i,n){let o=y,r=a*o,c=a*(o+1);for(let f=0;f<o;f++){let u=e[(r+f)*2],d=e[(r+f)*2+1],l=d<k&&u>0;i[c+f]=l?u:0,n[c+f]=l?d+(L(e,r,u,d)?H:0):Number.POSITIVE_INFINITY}i[c+o]=0,n[c+o]=t}function X(e,a,t,i){let n=y+1,o=new Uint8Array(t*n),r=a.slice(0,n);for(let u=1;u<t;u++){let d=new Float64Array(n);for(let l=0;l<n;l++){let p=Number.POSITIVE_INFINITY;for(let s=0;s<n;s++){let m=r[s]+j(e[(u-1)*n+s],e[u*n+l],i);m<p&&(p=m,o[u*n+l]=s)}d[l]=p+a[u*n+l]}r=d}let c=new Uint8Array(t),f=r.indexOf(Math.min(...r));for(let u=t-1;u>=0;u--)c[u]=f,f=o[u*n+f];return c}function q(e,a){let{data:t,numFrames:i,sampleRate:n}=e,o=y,r=o+1,c=new Float64Array(i*r),f=new Float64Array(i*r);for(let s=0;s<i;s++)J(t,s,a.voicingThreshold??.8,c,f);let u=X(c,f,i,a.octaveJumpCost??8),d=new Float32Array(i),l=new Float32Array(i),p=new Float32Array(i);for(let s=0;s<i;s++){let m=u[s];c[s*r+m]!==0&&(d[s]=n/c[s*r+m],l[s]=Math.min(1,Math.max(0,1-t[(s*o+m)*2+1])),p[s]=1)}return Z(d,p),{hz:d,confidence:l,voiced:p,numFrames:i}}function Z(e,a){let t=-1;for(let i=0;i<=e.length;i++){if(i<e.length&&a[i]===0)continue;let n=t>=0?e[t]:i<e.length?e[i]:0,o=i<e.length?e[i]:n;for(let r=t+1;r<i;r++){let c=t>=0&&i<e.length?(r-t)/(i-t):0;e[r]=n+(o-n)*c}t=i}}var U=new WeakMap;function Q(e){let a=U.get(e);return a||(a=e.createComputePipeline({label:"AudioPitchCandidatesPipeline",layout:"auto",compute:{module:e.createShaderModule({label:"AudioPitchCandidatesPipeline.wgsl",code:Y}),entryPoint:"main"}}),U.set(e,a)),a}async function ee(e,a,t,i,n={}){if(a.length===0||a[0].length===0)throw new Error("Empty audio buffer supplied to the pitch tracker.");let{lagMin:o,lagMax:r,windowSize:c}=W(t,n),f=C(a),u=Math.max(1,Math.ceil(f.length/t*i)),d=Math.min(u,$),l=u*y*2*4,p=new ArrayBuffer(32),s=new Float32Array(p),m=new Uint32Array(p);s[0]=t,m[1]=f.length,m[2]=u,m[3]=c,m[4]=o,m[5]=r,m[6]=d,s[7]=i;let h=e.createBuffer({size:p.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"audio_pitch_uniforms"});e.queue.writeBuffer(h,0,p);let g=e.createBuffer({size:f.byteLength,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,label:"audio_pitch_pcm"});e.queue.writeBuffer(g,0,f);let v=e.createBuffer({size:l,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC,label:"audio_pitch_candidates"}),A=e.createBuffer({size:l,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST,label:"audio_pitch_candidates_readback"}),B=Q(e),F=e.createCommandEncoder({label:"audio_pitch_encoder"}),w=F.beginComputePass({label:"audio_pitch_candidates_pass"});w.setPipeline(B),w.setBindGroup(0,e.createBindGroup({layout:B.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:h}},{binding:1,resource:{buffer:g}},{binding:2,resource:{buffer:v}}]})),w.dispatchWorkgroups(d,Math.ceil(u/d)),w.end(),F.copyBufferToBuffer(v,0,A,0,l),e.queue.submit([F.finish()]),await A.mapAsync(GPUMapMode.READ);let O=new Float32Array(A.getMappedRange().slice(0));A.unmap();for(let z of[A,v,g,h])z.destroy();return{data:O,numFrames:u,sampleRate:t}}async function E(e,a,t,i,n={}){let o=await ee(e,a,t,i,n);return{...q(o,n),durationSec:a[0].length/t}}async function G(e,a){let t=await T(e);if(!t||t.channels.length===0)throw new Error(`Failed to decode audio source for ${a}: ${e}`);return t}var I={async extractFromChannels(e,a,t={}){let i=await S(),n=t.fps??24,o=t.targetWidth??512,r=await M.extractFeatures(i,e,a,n,t,o),c=r.channelSamples??{primary:new Float32Array(r.numFrames),beat:new Float32Array(r.numFrames),bass:new Float32Array(r.numFrames),energy:new Float32Array(r.numFrames)},f={nodeId:"audio_primary",channel:"primary",textureView:r.textureView,texture:r.texture,buffer:r.primaryBuffer,stats:r.stats.primary},u={nodeId:"audio_beat",channel:"beat",textureView:r.textureView,texture:r.texture,buffer:r.beatBuffer,stats:r.stats.beat},d={nodeId:"audio_bass",channel:"bass",textureView:r.textureView,texture:r.texture,buffer:r.bassBuffer,stats:r.stats.bass},l={nodeId:"audio_energy",channel:"energy",textureView:r.textureView,texture:r.texture,buffer:r.energyBuffer,stats:r.stats.energy},p=b(c.primary,n,f),s=b(c.beat,n,u),m=b(c.bass,n,d),h=b(c.energy,n,l);return{primary:p,beat:s,bass:m,energy:h,durationSec:r.durationSec,numFrames:r.numFrames,sampleRate:a,textureView:r.textureView,texture:r.texture,primaryBuffer:r.primaryBuffer,beatBuffer:r.beatBuffer,bassBuffer:r.bassBuffer,energyBuffer:r.energyBuffer,seekFrame(g){p.seekFrame?.(g),s.seekFrame?.(g),m.seekFrame?.(g),h.seekFrame?.(g)}}},async extract(e,a={}){let t=await G(e,"feature extraction");return I.extractFromChannels(t.channels,t.sampleRate,a)},async pitchFromChannels(e,a,t={}){let i=await S(),n=t.fps??24,o=await E(i,e,a,n,t);return{hz:b(o.hz,n),confidence:b(o.confidence,n),voiced:b(o.voiced,n),samples:{hz:o.hz,confidence:o.confidence,voiced:o.voiced},fps:n,numFrames:o.numFrames,durationSec:o.durationSec}},async pitch(e,a={}){let t=await G(e,"pitch tracking");return I.pitchFromChannels(t.channels,t.sampleRate,a)}};export{I as a};
@@ -1,4 +1,4 @@
1
- import{a as q}from"./chunk-2GA735OZ.mjs";import{b as J,c as Z}from"./chunk-3DXMWDQ3.mjs";import{a as $,d as X,e as L,g as K,h as V,k as Y,l as j,m as Q,n as w}from"./chunk-6O55UROD.mjs";import{a as r}from"./chunk-6FULVULN.mjs";import{d as E,g as H}from"./chunk-77MT33VR.mjs";import{g as l}from"./chunk-Y4NIR77Z.mjs";l();l();l();l();var I=200,be=r.enum(["Union","Intersect","Subtract","Difference","Invert","Dilate","Erode","Choke","Feather"]),ee=r.enum(["Alpha","Luminance","Red","Green","Blue"]),ke=r.enum(["WhiteWithAlpha","GrayscaleRGB","AlphaOnly","PassthroughRGB"]),Re=q().field("operation",be.default("Union"),{label:"Operation",description:"Morphological or Boolean set operation applied to input alpha masks."}).field("radius",r.number().min(0).max(I).default(0),{bindable:!0,dataTypes:["Number","Signal"],label:"Radius / Width (px)",description:"Kernel radius in pixels for Dilate, Erode, Choke, or Feather operations."}).field("threshold",r.number().multipleOf(.01).min(0).max(1).default(.5),{bindable:!0,dataTypes:["Number","Signal"],label:"Threshold",description:"Cutoff threshold level (0.0\u20131.0) for binarization step or non-linear choke."}).field("clampMin",r.number().multipleOf(.01).min(0).max(1).default(0),{bindable:!0,dataTypes:["Number","Signal"],label:"Clamp Min",description:"Minimum alpha matte cutoff limit (0.0\u20131.0)."}).field("clampMax",r.number().multipleOf(.01).min(0).max(1).default(1),{bindable:!0,dataTypes:["Number","Signal"],label:"Clamp Max",description:"Maximum alpha matte cutoff limit (0.0\u20131.0)."}).field("channelA",ee.default("Alpha"),{label:"Mask A Channel",description:"Source channel to extract mask from Mask A (Alpha, Luminance, Red, Green, Blue)."}).field("channelB",ee.default("Alpha"),{label:"Mask B Channel",description:"Source channel to extract mask from Mask B (Alpha, Luminance, Red, Green, Blue)."}).field("binarize",r.boolean().default(!1),{label:"Binarize",description:"When enabled, outputs crisp 1-bit binary matte based on threshold."}).field("invertResult",r.boolean().default(!1),{label:"Invert Result",description:"Inverts final matte output."}).field("outputFormat",ke.default("WhiteWithAlpha"),{label:"Output Format",description:"WhiteWithAlpha (rgba(1,1,1,a)), GrayscaleRGB (rgba(a,a,a,1)), AlphaOnly (rgba(0,0,0,a)), PassthroughRGB (Mask A RGB with new alpha)."}).build(),Le=Re.schema,Ve=r.union([J,Z]);l();var Ae={Union:0,Intersect:1,Subtract:2,Difference:3,Invert:4,Dilate:5,Erode:6,Choke:7,Feather:8},ae={Alpha:0,Luminance:1,Red:2,Green:3,Blue:4},ye={WhiteWithAlpha:0,GrayscaleRGB:1,AlphaOnly:2,PassthroughRGB:3},Be=`
1
+ import{a as q}from"./chunk-2GA735OZ.mjs";import{b as J,c as Z}from"./chunk-3DXMWDQ3.mjs";import{a as $,d as X,e as L,g as K,h as V,k as Y,l as j,m as Q,n as w}from"./chunk-3QTHW2CD.mjs";import{a as r}from"./chunk-6FULVULN.mjs";import{d as E,g as H}from"./chunk-77MT33VR.mjs";import{g as l}from"./chunk-Y4NIR77Z.mjs";l();l();l();l();var I=200,be=r.enum(["Union","Intersect","Subtract","Difference","Invert","Dilate","Erode","Choke","Feather"]),ee=r.enum(["Alpha","Luminance","Red","Green","Blue"]),ke=r.enum(["WhiteWithAlpha","GrayscaleRGB","AlphaOnly","PassthroughRGB"]),Re=q().field("operation",be.default("Union"),{label:"Operation",description:"Morphological or Boolean set operation applied to input alpha masks."}).field("radius",r.number().min(0).max(I).default(0),{bindable:!0,dataTypes:["Number","Signal"],label:"Radius / Width (px)",description:"Kernel radius in pixels for Dilate, Erode, Choke, or Feather operations."}).field("threshold",r.number().multipleOf(.01).min(0).max(1).default(.5),{bindable:!0,dataTypes:["Number","Signal"],label:"Threshold",description:"Cutoff threshold level (0.0\u20131.0) for binarization step or non-linear choke."}).field("clampMin",r.number().multipleOf(.01).min(0).max(1).default(0),{bindable:!0,dataTypes:["Number","Signal"],label:"Clamp Min",description:"Minimum alpha matte cutoff limit (0.0\u20131.0)."}).field("clampMax",r.number().multipleOf(.01).min(0).max(1).default(1),{bindable:!0,dataTypes:["Number","Signal"],label:"Clamp Max",description:"Maximum alpha matte cutoff limit (0.0\u20131.0)."}).field("channelA",ee.default("Alpha"),{label:"Mask A Channel",description:"Source channel to extract mask from Mask A (Alpha, Luminance, Red, Green, Blue)."}).field("channelB",ee.default("Alpha"),{label:"Mask B Channel",description:"Source channel to extract mask from Mask B (Alpha, Luminance, Red, Green, Blue)."}).field("binarize",r.boolean().default(!1),{label:"Binarize",description:"When enabled, outputs crisp 1-bit binary matte based on threshold."}).field("invertResult",r.boolean().default(!1),{label:"Invert Result",description:"Inverts final matte output."}).field("outputFormat",ke.default("WhiteWithAlpha"),{label:"Output Format",description:"WhiteWithAlpha (rgba(1,1,1,a)), GrayscaleRGB (rgba(a,a,a,1)), AlphaOnly (rgba(0,0,0,a)), PassthroughRGB (Mask A RGB with new alpha)."}).build(),Le=Re.schema,Ve=r.union([J,Z]);l();var Ae={Union:0,Intersect:1,Subtract:2,Difference:3,Invert:4,Dilate:5,Erode:6,Choke:7,Feather:8},ae={Alpha:0,Luminance:1,Red:2,Green:3,Blue:4},ye={WhiteWithAlpha:0,GrayscaleRGB:1,AlphaOnly:2,PassthroughRGB:3},Be=`
2
2
  struct MaskMathUniforms {
3
3
  dirX : f32,
4
4
  dirY : f32,
@@ -1,4 +1,4 @@
1
- import{a as R,c as P,d as h,g as D,h as U,k as w,n as B}from"./chunk-6O55UROD.mjs";import{g as F}from"./chunk-77MT33VR.mjs";import{g as y}from"./chunk-Y4NIR77Z.mjs";y();y();var N=`
1
+ import{a as R,c as P,d as h,g as D,h as U,k as w,n as B}from"./chunk-3QTHW2CD.mjs";import{g as F}from"./chunk-77MT33VR.mjs";import{g as y}from"./chunk-Y4NIR77Z.mjs";y();y();var N=`
2
2
  struct FlipUniforms {
3
3
  flipH : f32,
4
4
  flipV : f32,
@@ -1,4 +1,4 @@
1
- import{g as O}from"./chunk-Y4NIR77Z.mjs";O();var _e=`
1
+ import{g as O}from"./chunk-Y4NIR77Z.mjs";O();var de=`
2
2
  struct BiquadUniforms {
3
3
  b0 : f32,
4
4
  b1 : f32,
@@ -36,7 +36,7 @@ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
36
36
  outAudio[i] = y0;
37
37
  }
38
38
  }
39
- `,ye=`
39
+ `,he=`
40
40
  struct FeatureUniforms {
41
41
  sampleRate : f32,
42
42
  numSamples : u32,
@@ -202,7 +202,7 @@ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
202
202
  outStats[7] = 1.0f;
203
203
  }
204
204
  }
205
- `,ve=`
205
+ `,xe=`
206
206
  struct TexturePackUniforms {
207
207
  numFrames : u32,
208
208
  texWidth : u32,
@@ -235,7 +235,7 @@ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
235
235
 
236
236
  textureStore(outTex, vec2<i32>(i32(x), 0), vec4<f32>(prim, beat, bass, nrg));
237
237
  }
238
- `,Pe=`
238
+ `,_e=`
239
239
  struct PaceUniforms {
240
240
  baseSpeed : f32,
241
241
  gain : f32,
@@ -261,23 +261,23 @@ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
261
261
  outSourceTimestamps[f] = accumulatedTime;
262
262
  }
263
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;
264
+ `;function ye(l){let e=new Float32Array(l[0]?.length??0);for(let a of l)for(let t=0;t<e.length;t++)e[t]+=a[t]/l.length;return e}function ve(l,e,a){let t=2*Math.PI*e/l,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 Pe=l=>{switch(l){case"exponential":return 1;case"logarithmic":return 2;case"square":return 3;case"smoothstep":return 4;default:return 0}},Be=l=>{switch(l){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}},Q=class l{static pipelineCache=new WeakMap;static getPipeline(e,a,t){let r=l.pipelineCache.get(e);r||(r=new Map,l.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){if(a.length===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)),_=ye(a),S=e.createBuffer({size:o*4,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,label:"audio_raw_pcm_buffer"});e.queue.writeBuffer(S,0,_);let f=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=l.getPipeline(e,"AudioBiquadFilterPipeline",de),m=ve(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:f}}]}),P=l.getPipeline(e,"AudioFeatureExtractionPipeline",he),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]=Pe(n.curve),E[11]=n.beatThreshold??.08,E[12]=F,k[13]=Be(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"}),me=e.createBindGroup({layout:P.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:q}},{binding:1,resource:{buffer:S}},{binding:2,resource:{buffer:f}},{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}}]}),Z=Math.max(s,128),ee=e.createTexture({size:[Z,1,1],format:"rgba16float",usage:GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,label:"audio_extracted_signal_texture"}),ie=l.getPipeline(e,"AudioTexturePackPipeline",xe),ue=new Uint32Array([g,Z,0,0]),te=e.createBuffer({size:ue.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"audio_pack_uniform_buffer"});e.queue.writeBuffer(te,0,ue);let ge=e.createBindGroup({layout:ie.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:te}},{binding:1,resource:{buffer:h}},{binding:2,resource:{buffer:y}},{binding:3,resource:{buffer:B}},{binding:4,resource:{buffer:v}},{binding:5,resource:ee.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,me),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(ie),J.setBindGroup(0,ge),J.dispatchWorkgroups(Math.ceil(Z/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)),pe={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 be={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(),te.destroy(),S.destroy(),f.destroy(),{primaryBuffer:h,beatBuffer:y,bassBuffer:B,energyBuffer:v,texture:ee,textureView:ee.createView(),numFrames:g,durationSec:p,stats:be,channelSamples:pe}}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=l.getPipeline(e,"AudioPaceIntegralPipeline",_e),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 Se=`const PI: f32 = ${Math.PI}f;
265
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"?_+=`
266
+ const E: f32 = ${Math.E}f;`,we=["t: f32","x: f32","y: f32","z: f32","i: u32","n: u32","frame: u32","color: vec4f","t_elapsed: f32","duration: f32"];function ae(l,e){let a=Ae(e),t=l.fnOutputType||"f32",r=l.fnParams??[],n=r.map(f=>`${f.name}: ${f.type}`),s=[...we,...n].join(", "),u=`fn ${a}(${s}) -> ${t}`,o=l.fnBody??"",p={...l};if(!l.baseType||l.baseType==="custom"){let f=Me(l.fnBody??"",l);f.baseType&&(p={...l,...f})}p.baseType&&p.baseType!=="custom"&&(o=$e(p));let g=o.split(`
267
+ `).map(f=>` ${f}`).join(`
268
+ `),{valid:d,validationWarning:i}=Fe(g,t),_=g;!d&&i==="Function body has no return statement."&&(t==="vec2f"?_+=`
269
269
  return vec2<f32>(0.0);`:t==="vec3f"?_+=`
270
270
  return vec3<f32>(0.0);`:t==="vec4f"?_+=`
271
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(`
272
+ return 0.0;`);let S=[Se,"",`${u} {`,_,"}"].join(`
273
+ `);return{name:a,wgsl:S,signature:u,outputType:t,params:r,valid:d,validationWarning:i}}function Ue(l,e){return[` let ${e}_n1: f32 = 7.5625;`,` let ${e}_d1: f32 = 2.75;`,` let ${e}_r1: f32 = ${e}_n1 * (${l}) * (${l});`,` let ${e}_x2: f32 = (${l}) - 1.5 / ${e}_d1;`,` let ${e}_r2: f32 = ${e}_n1 * ${e}_x2 * ${e}_x2 + 0.75;`,` let ${e}_x3: f32 = (${l}) - 2.25 / ${e}_d1;`,` let ${e}_r3: f32 = ${e}_n1 * ${e}_x3 * ${e}_x3 + 0.9375;`,` let ${e}_x4: f32 = (${l}) - 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, (${l}) < 2.5 / ${e}_d1);`,` let ${e}_s2: f32 = select(${e}_s1, ${e}_r2, (${l}) < 2.0 / ${e}_d1);`,` let ${e}: f32 = select(${e}_s2, ${e}_r1, (${l}) < 1.0 / ${e}_d1);`].join(`
274
+ `)}function K(l,e,a){switch(l){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
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 $=`
276
+ `);case"bounce":{let t=`${a}_bx`,r=`${a}_bo`;return[` let ${t}: f32 = 1.0 - (${e});`,Ue(t,r),` let ${a}: f32 = 1.0 - ${r};`].join(`
277
+ `)}}}function oe(l,e,a,t){if(l==="linear"||l==="smoothstep"||l==="smootherstep"||e==="in")return K(l,a,t);if(e==="out"){let s=`${t}_src`;return[K(l,`1.0 - (${a})`,s),` let ${t}: f32 = 1.0 - ${s};`].join(`
278
+ `)}let r=`${t}_in`,n=`${t}_out`;return[K(l,`(${a}) * 2.0`,r),K(l,`2.0 - (${a}) * 2.0`,n),` let ${t}: f32 = select(1.0 - ${n} * 0.5, ${r} * 0.5, (${a}) < 0.5);`].join(`
279
+ `)}function $e(l){let e=[],a=l.baseEnabled??!0,t=l.fmEnabled??!1;if(a&&t){let s=(l.fmAmplitude??1).toFixed(5),u=(l.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=l.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=l.envelopeEnabled??!1,n=l.gateEnabled??!1;if(r){e.push(" // Time Envelope");let s=l.gateStartFrame??0,u=l.gateEndFrame??100;(l.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=l.envelopeFamily??"sine",g=l.envelopeMode??"in_out",d=l.envelopePattern??"ramp_up",i=l.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(oe(p,g,"env_folded","env_eased")),e.push(" let env_factor: f32 = env_eased;")}else e.push(oe(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=l.gateStartFrame??0,u=l.gateEndFrame??100,o=l.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 le={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 Ge(l){return l&&l in le?le[l]:{family:"sine",mode:"in_out",pattern:"ramp_up"}}function Me(l,e){let a=l.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"}:Ge(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 Ae(l){return`signal_${l.replace(/[^a-zA-Z0-9]/g,"_")}`}function Fe(l,e){if(!/\breturn\b/.test(l))return{valid:!1,validationWarning:"Function body has no return statement."};let t=/\breturn\s+vec(\d)f?\(/.exec(l);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 Te(l){let e=new Float32Array([l]),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 ne(l){if(typeof Float16Array<"u")return new Uint16Array(new Float16Array(l).buffer);let e=l.length,a=new Uint16Array(e);for(let t=0;t<e;t++)a[t]=Te(l[t]);return a}function fe(l){return Array.isArray(l)||ArrayBuffer.isView(l)&&!(l instanceof DataView)}var se=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 f=i[0].length/_,h=await Q.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:f,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=ae(s,t);i={...s,customWGSL:b.wgsl,signalFnName:b.name,fnOutputType:b.outputType,outputType:b.outputType}}let _=this.getDeviceResources(e),S=`${p??"global"}:${t}`,f=_.resources.get(S)??_.resources.get(`global:${t}`),h=u*4;if(f?.isExternal&&f.buffer&&f.buffer.size===h)return f.buffer;if(!f||!f.buffer||f.buffer.size<h){f?.buffer&&!f.isExternal&&f.buffer.destroy();let b=e.createBuffer({size:h,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC,label:`signal_1d_buffer_${t}`});f={...f,type:f?.texture?"combined":"1d-buffer",buffer:b,lastProcessedFrame:-1},_.resources.set(S,f)}let y=i?.samples??i?.data?.samples,B=i?this.computeSignalFingerprint(i):"",v=g!==void 0?g:r;if(f.lastProcessedFrame===v&&f.lastFingerprint===B)return f.buffer;if(f.lastFingerprint!==B&&(f.bindGroup=void 0),f.lastProcessedFrame=v,f.lastFingerprint=B,fe(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(f.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,f,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,f,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(f.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,f,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,f,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(f.buffer,0,m)}return f.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=ae(s,t);i={...s,customWGSL:c.wgsl,signalFnName:c.name,fnOutputType:c.outputType,outputType:c.outputType}}let _=this.getDeviceResources(e),S=`${p??"global"}:${t}`,f=_.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(f?.isExternal&&f.textureView&&!h)return f.textureView;let y=f?.texture?f.texture.width:Math.max(16,u>0?u:256),B=1;if(!f||!f.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}`});f={...f,type:f?.buffer?"combined":"2d-texture",texture:c,textureView:c.createView(),lastProcessedFrame:-1},_.resources.set(S,f),p&&_.resources.set(`global:${t}`,f)}let v=i?.samples??i?.data?.samples,b=i?this.computeSignalFingerprint(i):"",m=g!==void 0?g:r;if(f.lastProcessedFrame===m&&f.lastFingerprint===b)return f.textureView;if(f.lastFingerprint!==b&&(f.bindGroup=void 0),f.lastProcessedFrame=m,f.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,f,h,c,r,n>0?n:h.durationSec,g,d),e.queue.submit([x.finish()]),f.textureView}else if(fe(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=ne(c);return e.queue.writeTexture({texture:f.texture},P,{bytesPerRow:y*8,rowsPerImage:B},[y,B,1]),f.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,f,t,i,r,n,y,g,d,p),e.queue.submit([c.finish()]),f.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,f,t,i,r,n,y,g,d,p),e.queue.submit([c.finish()]),f.textureView}else if(i&&i.type==="generator"&&(i.customWGSL||i.fnBody)){let c=e.createCommandEncoder({label:`signal_2d_encoder_${t}`});this.dispatch2DGenerator(e,c,f,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=ne(x);e.queue.writeTexture({texture:f.texture},M,{bytesPerRow:y*8,rowsPerImage:B},[y,B,1])}return f.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),f=`1d_${s.nodeId}_${d}`,h=S.pipelineCache.get(f);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
281
  struct GeneratorUniforms {
282
282
  sampleRate : f32,
283
283
  baseTime : f32,
@@ -310,7 +310,7 @@ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
310
310
  let val = ${A};
311
311
  outSignal[idx] = val;
312
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:`
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(f,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
314
  struct Audio1DUniforms {
315
315
  sampleRate : f32,
316
316
  baseTime : f32,
@@ -350,7 +350,7 @@ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
350
350
 
351
351
  outSignal[idx] = val;
352
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),$=`
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),f=new Float32Array(S),h=new Uint32Array(S);f[0]=p,f[1]=s,f[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 f=this.getDeviceResources(e),h=o.operation??"add",y=o.customWGSL??o.wgsl??"",B=`1d_math_${h}_${s}_${y}`,v=f.pipelineCache.get(B);if(!v){let{evalExpr:U,extraFn:A}=ce(h,y),$=`
354
354
  struct MathUniforms {
355
355
  bValue : f32,
356
356
  inMin : f32,
@@ -416,7 +416,7 @@ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
416
416
  let val = ${U};
417
417
  outSignal[idx] = val;
418
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=`
419
+ `,G=e.createShaderModule({label:`signal_1d_math_${h}.wgsl`,code:$});v=e.createComputePipeline({label:`Signal1DMathPipeline_${h}`,layout:"auto",compute:{module:G,entryPoint:"main"}}),f.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}`,f=_.pipelineCache.get(S);if(!f){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
420
  struct VSOut {
421
421
  @builtin(position) pos : vec4<f32>,
422
422
  @location(0) uv : vec2<f32>,
@@ -456,7 +456,7 @@ ${d}
456
456
  @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
457
457
  ${$}
458
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:`
459
+ `,w=e.createShaderModule({label:`signal_2d_generator_${s.nodeId}.wgsl`,code:G});f=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,f)}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:f.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(f),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
460
  struct VSOut {
461
461
  @builtin(position) pos : vec4<f32>,
462
462
  @location(0) uv : vec2<f32>,
@@ -505,7 +505,7 @@ struct AudioUniforms {
505
505
  }
506
506
  return s;
507
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=`
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,f=u>0?u:r.durationSec??0,h=new ArrayBuffer(16),y=new Float32Array(h),B=new Uint32Array(h);y[0]=S,y[1]=f,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??"",f=this.getDeviceResources(e),h=`math_${r}_${_}_${S}`,y=f.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}=ce(_,S),q=`
509
509
  struct VSOut {
510
510
  @builtin(position) pos : vec4<f32>,
511
511
  @location(0) uv : vec2<f32>,
@@ -581,7 +581,7 @@ ${k}
581
581
  var val: f32 = ${E};
582
582
  return vec4<f32>(val, val, val, val);
583
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:`
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"}}),f.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,$=Ee(_,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",f=!!(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}_${f}`,P=x.pipelineCache.get(M);if(!P){let T=e.createShaderModule({label:`signal_gate_${r}.wgsl`,code:`
585
585
  struct VSOut {
586
586
  @builtin(position) pos : vec4<f32>,
587
587
  @location(0) uv : vec2<f32>,
@@ -657,7 +657,7 @@ struct GateUniforms {
657
657
  }
658
658
  return vec4<f32>(high, high, high, 1.0f);
659
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:`
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]=f?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),f=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_${f}_${S}_${h}`,x=i.pipelineCache.get(c);if(!x){let F=e.createShaderModule({label:"signal_1d_gate.wgsl",code:`
661
661
  struct Gate1DUniforms {
662
662
  threshold : f32,
663
663
  mode : u32,
@@ -722,8 +722,8 @@ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
722
722
  }
723
723
  outSignal[idx] = high;
724
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:`
725
+ `});x=e.createComputePipeline({label:`Signal1DGatePipeline_${f}`,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]=f==="trigger"?1:f==="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 ce(l,e){switch(l){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
726
  fn user_signal_calc(a: f32, b: f32, a_min: f32, a_max: f32, t: f32, t_norm: f32, frame: u32) -> f32 {
727
727
  ${e}
728
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};
729
+ `,evalExpr:"user_signal_calc(a, b, a_min, a_max, t, t_norm, frame)"};default:return{evalExpr:"a",extraFn:""}}}function L(l){if(typeof l.signalB=="number"&&!Number.isNaN(l.signalB))return l.signalB;if(l.signalB&&typeof l.signalB=="object"&&typeof l.signalB.value=="number"&&!Number.isNaN(l.signalB.value))return l.signalB.value;if(typeof l.bValue=="number"&&!Number.isNaN(l.bValue))return l.bValue;let e=l.signalConfig;return typeof e?.bValue=="number"&&!Number.isNaN(e.bValue)?e.bValue:1}function Ee(l,e,a,t,r,n){let s=t.signalConfig;switch(l){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 We=new se;export{ye as a,Q as b,ae as c,se as d,We as e};
@@ -1,4 +1,4 @@
1
- import{a as c}from"./chunk-K3C6GUQD.mjs";import{f as n,g as p}from"./chunk-77MT33VR.mjs";import{c as f,e as m}from"./chunk-ULOFDFHJ.mjs";import{g as t}from"./chunk-Y4NIR77Z.mjs";t();t();var k=["delayTime","feedback","wet","dry"],P=()=>`
1
+ import{a as c}from"./chunk-SE2C623Z.mjs";import{f as n,g as p}from"./chunk-77MT33VR.mjs";import{c as f,e as m}from"./chunk-ULOFDFHJ.mjs";import{g as t}from"./chunk-Y4NIR77Z.mjs";t();t();var k=["delayTime","feedback","wet","dry"],P=()=>`
2
2
  struct Uniforms {
3
3
  sampleRate : f32,
4
4
  delaySec : f32,
@@ -1,4 +1,4 @@
1
- import{a as Y}from"./chunk-2GA735OZ.mjs";import{b as $,c as K}from"./chunk-3DXMWDQ3.mjs";import{a as H,d as M,e as W,g as F,h as O,k as X,l as z,m as E,n as R}from"./chunk-6O55UROD.mjs";import{a as c}from"./chunk-6FULVULN.mjs";import{d as V,g as B}from"./chunk-77MT33VR.mjs";import{g as n}from"./chunk-Y4NIR77Z.mjs";n();n();n();var L=50,_=500,G=255,pe=Y().field("amount",c.number().min(0).max(_).default(100),{bindable:!0,dataTypes:["Number","Signal"],label:"Amount Signal",description:"Sharpening intensity percentage (0\u2013500%)."}).field("radius",c.number().min(.1).max(L).default(1.5),{bindable:!0,dataTypes:["Number","Signal"],label:"Radius Signal",description:"The Gaussian blur radius in pixels used to detect edge contrast."}).field("threshold",c.number().int().min(0).max(G).default(3),{bindable:!0,dataTypes:["Number","Signal"],label:"Threshold Signal",description:"Minimum tonal level difference (0\u2013255) required before sharpening is applied to avoid amplifying noise."}).build(),he=pe.schema,Se=c.union([$,K]);var ce=`
1
+ import{a as Y}from"./chunk-2GA735OZ.mjs";import{b as $,c as K}from"./chunk-3DXMWDQ3.mjs";import{a as H,d as M,e as W,g as F,h as O,k as X,l as z,m as E,n as R}from"./chunk-3QTHW2CD.mjs";import{a as c}from"./chunk-6FULVULN.mjs";import{d as V,g as B}from"./chunk-77MT33VR.mjs";import{g as n}from"./chunk-Y4NIR77Z.mjs";n();n();n();var L=50,_=500,G=255,pe=Y().field("amount",c.number().min(0).max(_).default(100),{bindable:!0,dataTypes:["Number","Signal"],label:"Amount Signal",description:"Sharpening intensity percentage (0\u2013500%)."}).field("radius",c.number().min(.1).max(L).default(1.5),{bindable:!0,dataTypes:["Number","Signal"],label:"Radius Signal",description:"The Gaussian blur radius in pixels used to detect edge contrast."}).field("threshold",c.number().int().min(0).max(G).default(3),{bindable:!0,dataTypes:["Number","Signal"],label:"Threshold Signal",description:"Minimum tonal level difference (0\u2013255) required before sharpening is applied to avoid amplifying noise."}).build(),he=pe.schema,Se=c.union([$,K]);var ce=`
2
2
  struct UnsharpMaskUniforms {
3
3
  dirX : f32,
4
4
  dirY : f32,