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.
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-YpBRdI7r.mjs → audio-DHLoNcxD.mjs} +31 -5
- package/dist/audio-DHLoNcxD.mjs.map +1 -0
- package/dist/audio-afTBdB3U.d.mts +62 -0
- package/dist/audio-afTBdB3U.d.mts.map +1 -0
- package/dist/cli/check-worker.mjs +43 -43
- package/dist/cli.mjs +174 -83
- package/dist/cli.mjs.map +1 -1
- package/dist/cloud/index.d.mts +14 -3
- package/dist/cloud/index.d.mts.map +1 -1
- package/dist/cloud/index.mjs +2 -2
- package/dist/{cloud-xcfV4J03.mjs → cloud-COid1Ipa.mjs} +169 -16
- package/dist/cloud-COid1Ipa.mjs.map +1 -0
- package/dist/components/index.d.mts +8 -8
- package/dist/components/index.mjs +42 -42
- package/dist/{dist-C4Vxgm0Q.mjs → dist-B-OPY7Cs.mjs} +373 -13
- package/dist/dist-B-OPY7Cs.mjs.map +1 -0
- package/dist/{dist-Cu1fZ9Uy.mjs → dist-BSqeChht.mjs} +2 -2
- package/dist/{dist-Cu1fZ9Uy.mjs.map → dist-BSqeChht.mjs.map} +1 -1
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +34 -34
- package/dist/{effects-DiWYouOK.mjs → effects-C8CL9cOq.mjs} +2 -2
- package/dist/{effects-DiWYouOK.mjs.map → effects-C8CL9cOq.mjs.map} +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-BnV-GB1o.mjs → fonts-BQrDjnpV.mjs} +2 -2
- package/dist/{fonts-BnV-GB1o.mjs.map → fonts-BQrDjnpV.mjs.map} +1 -1
- package/dist/{gpu-Bw35AMwY.mjs → gpu-DHa-3Dou.mjs} +2 -2
- package/dist/{gpu-Bw35AMwY.mjs.map → gpu-DHa-3Dou.mjs.map} +1 -1
- package/dist/{index-Dyt4yS-x.d.mts → index-BNClElng.d.mts} +467 -465
- package/dist/index-BNClElng.d.mts.map +1 -0
- package/dist/{index-Bbv0VtxJ.d.mts → index-CAuNuvIg.d.mts} +3 -3
- package/dist/{index-Bbv0VtxJ.d.mts.map → index-CAuNuvIg.d.mts.map} +1 -1
- package/dist/index-COYNQ_mf.d.mts.map +1 -1
- package/dist/{index-CDQrdZ0J.d.mts → index-CTv9ZieD.d.mts} +2 -2
- package/dist/{index-CDQrdZ0J.d.mts.map → index-CTv9ZieD.d.mts.map} +1 -1
- package/dist/{index-h7m8QgcL.d.mts → index-Drk6HC2k.d.mts} +2 -2
- package/dist/{index-h7m8QgcL.d.mts.map → index-Drk6HC2k.d.mts.map} +1 -1
- package/dist/{index-B7WqFBZA.d.mts → index-Fliv2Z-w.d.mts} +22 -2
- package/dist/index-Fliv2Z-w.d.mts.map +1 -0
- package/dist/index.d.mts +9 -9
- package/dist/index.mjs +49 -49
- package/dist/preview/index.d.mts +1 -1
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-BW7ilNWk.mjs → preview-BUtt481A.mjs} +2 -2
- package/dist/{preview-BW7ilNWk.mjs.map → preview-BUtt481A.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-OD4CSXZL.mjs → chunk-35XSD4QM.mjs} +1 -1
- package/dist/preview-engine/{chunk-V5HU6NIW.mjs → chunk-3DOIE4DV.mjs} +1 -1
- package/dist/preview-engine/{chunk-L2NTIWW5.mjs → chunk-3IT7LHWR.mjs} +1 -1
- package/dist/preview-engine/{chunk-6LBFSGCI.mjs → chunk-3MLGWUSK.mjs} +1 -1
- package/dist/preview-engine/{chunk-57WXGYEV.mjs → chunk-3QJ5GRBH.mjs} +1 -1
- package/dist/preview-engine/{chunk-6O55UROD.mjs → chunk-3QTHW2CD.mjs} +1 -1
- package/dist/preview-engine/{chunk-HO7FXISJ.mjs → chunk-4JNIEQS2.mjs} +1 -1
- package/dist/preview-engine/{chunk-JFBSNFN6.mjs → chunk-6B3NOY5W.mjs} +1 -1
- package/dist/preview-engine/{chunk-HPQDCC4S.mjs → chunk-6O7UDVNL.mjs} +1 -1
- package/dist/preview-engine/{chunk-T6L3DO3H.mjs → chunk-74J4DJQA.mjs} +1 -1
- package/dist/preview-engine/{chunk-JSKEVYKD.mjs → chunk-AKVRG7UU.mjs} +1 -1
- package/dist/preview-engine/{chunk-4BWBX2HM.mjs → chunk-CRBOK3JT.mjs} +1 -1
- package/dist/preview-engine/{chunk-JIPMF42Z.mjs → chunk-D6LM7DTJ.mjs} +2 -2
- package/dist/preview-engine/{chunk-HGWT3RVQ.mjs → chunk-E7BKWHOT.mjs} +1 -1
- package/dist/preview-engine/{chunk-4FACCLLE.mjs → chunk-EWDJMJO5.mjs} +1 -1
- package/dist/preview-engine/{chunk-6BE3IL7L.mjs → chunk-EYE3GNL5.mjs} +1 -1
- package/dist/preview-engine/{chunk-7A3BNAWY.mjs → chunk-EYKN2VET.mjs} +1 -1
- package/dist/preview-engine/chunk-FJTURGJV.mjs +107 -0
- package/dist/preview-engine/{chunk-5Y7SO37Q.mjs → chunk-G4ZTSLZU.mjs} +1 -1
- package/dist/preview-engine/{chunk-C2GX5L5S.mjs → chunk-GAMAKN5L.mjs} +1 -1
- package/dist/preview-engine/{chunk-VVY4PG5E.mjs → chunk-GXFYRMJZ.mjs} +25 -25
- package/dist/preview-engine/{chunk-RAW2I27S.mjs → chunk-HTAHYSCW.mjs} +1 -1
- package/dist/preview-engine/{chunk-NTTEGJD6.mjs → chunk-ICWD36H6.mjs} +1 -1
- package/dist/preview-engine/{chunk-K3TJJXVC.mjs → chunk-JAUMCOOJ.mjs} +1 -1
- package/dist/preview-engine/{chunk-4DSOZ5QG.mjs → chunk-KBCZKIIQ.mjs} +1 -1
- package/dist/preview-engine/{chunk-WVIDORLK.mjs → chunk-KDCM7S3S.mjs} +1 -1
- package/dist/preview-engine/{chunk-ZGEKF34E.mjs → chunk-KIPXBOYG.mjs} +10 -10
- package/dist/preview-engine/{chunk-HKYENGC5.mjs → chunk-M4QVCQ3O.mjs} +1 -1
- package/dist/preview-engine/{chunk-4N25ZU43.mjs → chunk-NJO2BIJX.mjs} +1 -1
- package/dist/preview-engine/{chunk-6SLCECHG.mjs → chunk-NTSALWFF.mjs} +1 -1
- package/dist/preview-engine/{chunk-7HW7GA76.mjs → chunk-O75BFM4S.mjs} +1 -1
- package/dist/preview-engine/{chunk-YXCTOCQ2.mjs → chunk-ONHY4KNY.mjs} +1 -1
- package/dist/preview-engine/{chunk-XCQ7KN4S.mjs → chunk-QPT2Y2GZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-ZA5LWHRM.mjs → chunk-QXLFTCLC.mjs} +1 -1
- package/dist/preview-engine/{chunk-FW2UDDUT.mjs → chunk-RGKS6YIA.mjs} +1 -1
- package/dist/preview-engine/{chunk-VRJBOFFY.mjs → chunk-RN7J5TRU.mjs} +1 -1
- package/dist/preview-engine/{chunk-LBP7E7SJ.mjs → chunk-RVCLMO5Q.mjs} +1 -1
- package/dist/preview-engine/{chunk-K3C6GUQD.mjs → chunk-SE2C623Z.mjs} +1 -1
- package/dist/preview-engine/{chunk-LTR5FXGU.mjs → chunk-SFHWP65D.mjs} +1 -1
- package/dist/preview-engine/{chunk-ML7WO27M.mjs → chunk-TKXOSEIJ.mjs} +1 -1
- package/dist/preview-engine/{chunk-4TPXZNVR.mjs → chunk-UKZVUYB6.mjs} +1 -1
- package/dist/preview-engine/{chunk-IVAA5X5H.mjs → chunk-UVEDFIPN.mjs} +1 -1
- package/dist/preview-engine/{chunk-FH72KTSM.mjs → chunk-VUO4K52B.mjs} +1 -1
- package/dist/preview-engine/{chunk-OOUDE4XL.mjs → chunk-W4XR6F5G.mjs} +1 -1
- package/dist/preview-engine/{chunk-RMHL4XZ3.mjs → chunk-WPYWCWWL.mjs} +1 -1
- package/dist/preview-engine/{chunk-CHXR5XZK.mjs → chunk-YAPGJZPI.mjs} +1 -1
- package/dist/preview-engine/{chunk-4RLKHFV6.mjs → chunk-YJ4DSRDY.mjs} +1 -1
- package/dist/preview-engine/{chunk-Y2SWIWIU.mjs → chunk-YOJKIMU5.mjs} +1 -1
- package/dist/preview-engine/{chunk-YS3ROS25.mjs → chunk-ZHNEZZ6A.mjs} +1 -1
- package/dist/preview-engine/{chunk-EKEKYGXE.mjs → chunk-ZZMI3WOT.mjs} +1 -1
- package/dist/preview-engine/components.mjs +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +1 -1
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/{renderers-36P2TKPC.mjs → renderers-3FZVDYRQ.mjs} +1 -1
- package/dist/preview-engine/renderers-3KEBYOOF.mjs +1 -0
- package/dist/preview-engine/{renderers-JZYHX4XI.mjs → renderers-4RPQSUUZ.mjs} +1 -1
- package/dist/preview-engine/renderers-5EGFXFPF.mjs +1 -0
- package/dist/preview-engine/renderers-5SJHYUTM.mjs +1 -0
- package/dist/preview-engine/renderers-66MWDUN6.mjs +1 -0
- package/dist/preview-engine/{renderers-CMBI4JOC.mjs → renderers-6FENMFSC.mjs} +1 -1
- package/dist/preview-engine/renderers-77OXJ2GY.mjs +1 -0
- package/dist/preview-engine/renderers-7LI4QKHO.mjs +1 -0
- package/dist/preview-engine/{renderers-6RRWA33X.mjs → renderers-AIZRIW2R.mjs} +1 -1
- package/dist/preview-engine/{renderers-UBIFSF37.mjs → renderers-BDI2BDBA.mjs} +1 -1
- package/dist/preview-engine/renderers-BDXCO6NR.mjs +1 -0
- package/dist/preview-engine/{renderers-OPRXVIGT.mjs → renderers-BUZ67FNZ.mjs} +1 -1
- package/dist/preview-engine/renderers-DMTGKURQ.mjs +1 -0
- package/dist/preview-engine/{renderers-AUYCQNSS.mjs → renderers-ECXMT5BD.mjs} +1 -1
- package/dist/preview-engine/{renderers-4WFRXGMR.mjs → renderers-EVEWFJ7U.mjs} +1 -1
- package/dist/preview-engine/renderers-F6PT2LON.mjs +1 -0
- package/dist/preview-engine/renderers-F7WPJXKT.mjs +1 -0
- package/dist/preview-engine/renderers-FIFF267S.mjs +1 -0
- package/dist/preview-engine/{renderers-CQIPHCIW.mjs → renderers-FQISHQEN.mjs} +1 -1
- package/dist/preview-engine/{renderers-YJ4PJEPG.mjs → renderers-FXAVFNUN.mjs} +1 -1
- package/dist/preview-engine/{renderers-4SNAK77B.mjs → renderers-GITAVRYZ.mjs} +1 -1
- package/dist/preview-engine/renderers-GTKRV225.mjs +1 -0
- package/dist/preview-engine/{renderers-RQ3JZE3L.mjs → renderers-HG6JZIZO.mjs} +1 -1
- package/dist/preview-engine/{renderers-OZKPOUMW.mjs → renderers-HHWMIDN3.mjs} +1 -1
- package/dist/preview-engine/renderers-HI3SRJVD.mjs +1 -0
- package/dist/preview-engine/renderers-HXEDI4BD.mjs +1 -0
- package/dist/preview-engine/{renderers-LF6U4MR5.mjs → renderers-I2ZOUFRU.mjs} +1 -1
- package/dist/preview-engine/renderers-JHFD4LHZ.mjs +1 -0
- package/dist/preview-engine/renderers-KGVZUFHD.mjs +1 -0
- package/dist/preview-engine/{renderers-G2FL3IFD.mjs → renderers-KKULMOV4.mjs} +1 -1
- package/dist/preview-engine/{renderers-JALV3B3A.mjs → renderers-KMVMPYY7.mjs} +1 -1
- package/dist/preview-engine/renderers-L6GFGHS6.mjs +1 -0
- package/dist/preview-engine/renderers-LN7WPG6I.mjs +1 -0
- package/dist/preview-engine/{renderers-37Y5LR2S.mjs → renderers-LWW4RF6D.mjs} +1 -1
- package/dist/preview-engine/renderers-LY57CZZB.mjs +1 -0
- package/dist/preview-engine/renderers-MBMJWZEW.mjs +1 -0
- package/dist/preview-engine/{renderers-6RYIPQ7W.mjs → renderers-MPFU74I3.mjs} +1 -1
- package/dist/preview-engine/{renderers-TKHQRERE.mjs → renderers-MW53LTMB.mjs} +1 -1
- package/dist/preview-engine/{renderers-Q5YCUPYE.mjs → renderers-PC2GOZDT.mjs} +1 -1
- package/dist/preview-engine/renderers-PREFONJG.mjs +1 -0
- package/dist/preview-engine/{renderers-WG756VF3.mjs → renderers-PSBTV2DO.mjs} +1 -1
- package/dist/preview-engine/{renderers-XZ3XDQIN.mjs → renderers-Q77UPEYE.mjs} +1 -1
- package/dist/preview-engine/renderers-QHXCFDHI.mjs +1 -0
- package/dist/preview-engine/renderers-R22CDFO4.mjs +1 -0
- package/dist/preview-engine/renderers-RDYJRNAR.mjs +1 -0
- package/dist/preview-engine/renderers-RENLKAA7.mjs +1 -0
- package/dist/preview-engine/{renderers-U4S577ON.mjs → renderers-RIPXT4AL.mjs} +1 -1
- package/dist/preview-engine/{renderers-ZQVKE5AO.mjs → renderers-SFVFAS3C.mjs} +1 -1
- package/dist/preview-engine/{renderers-5K3BSBI6.mjs → renderers-SWQVCJHB.mjs} +1 -1
- package/dist/preview-engine/renderers-SZVDZDY7.mjs +1 -0
- package/dist/preview-engine/renderers-TEKHQHCL.mjs +1 -0
- package/dist/preview-engine/renderers-TS32FDV7.mjs +1 -0
- package/dist/preview-engine/renderers-TYSLUZ53.mjs +1 -0
- package/dist/preview-engine/renderers-U3RLYFCN.mjs +1 -0
- package/dist/preview-engine/{renderers-PGZDFDSC.mjs → renderers-U4IXWMD6.mjs} +1 -1
- package/dist/preview-engine/renderers-V5HM6PZ2.mjs +1 -0
- package/dist/preview-engine/{renderers-4MW4NW6O.mjs → renderers-VUQAZ56P.mjs} +1 -1
- package/dist/preview-engine/renderers-W5YFMLSB.mjs +1 -0
- package/dist/preview-engine/renderers-XKDWUK56.mjs +1 -0
- package/dist/preview-engine/renderers-XKSBNCLZ.mjs +1 -0
- package/dist/preview-engine/renderers-XLQXVD37.mjs +1 -0
- package/dist/preview-engine/renderers-ZGX3A3QZ.mjs +1 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{program-BUjUTdxq.mjs → program-Cvv_nb9T.mjs} +2 -2
- package/dist/{program-BUjUTdxq.mjs.map → program-Cvv_nb9T.mjs.map} +1 -1
- package/dist/renderer/index.d.mts +1 -1
- package/dist/renderer/index.mjs +2 -2
- package/dist/renderer--RJepuOy.mjs +5 -0
- package/dist/{renderer-B84T5I98.mjs → renderer-4uZGSmUD.mjs} +3 -3
- package/dist/{renderer-B84T5I98.mjs.map → renderer-4uZGSmUD.mjs.map} +1 -1
- package/dist/{renderer-Bo5GwErU.mjs → renderer-5fGj_tqN.mjs} +3 -3
- package/dist/{renderer-Bo5GwErU.mjs.map → renderer-5fGj_tqN.mjs.map} +1 -1
- package/dist/{renderer-D7DlNOVi.mjs → renderer-6g1ri445.mjs} +3 -3
- package/dist/{renderer-D7DlNOVi.mjs.map → renderer-6g1ri445.mjs.map} +1 -1
- package/dist/{renderer-H4CZt3Z5.mjs → renderer-B09I95bo.mjs} +2 -2
- package/dist/{renderer-tcypOFaB.d.mts → renderer-B1U6YRRV.d.mts} +2 -2
- package/dist/{renderer-tcypOFaB.d.mts.map → renderer-B1U6YRRV.d.mts.map} +1 -1
- package/dist/renderer-B4NFnaty.mjs +5 -0
- package/dist/renderer-B6g4ts0e.mjs +5 -0
- package/dist/{renderer-DBfx6QX1.mjs → renderer-BBjkX0Vt.mjs} +2 -2
- package/dist/{renderer-BdRwbLLV.mjs → renderer-BC_Nse6h.mjs} +3 -3
- package/dist/{renderer-BdRwbLLV.mjs.map → renderer-BC_Nse6h.mjs.map} +1 -1
- package/dist/renderer-BGoAr-tl.mjs +5 -0
- package/dist/{renderer-CWmlfdLb.mjs → renderer-BJEexai1.mjs} +3 -3
- package/dist/{renderer-CWmlfdLb.mjs.map → renderer-BJEexai1.mjs.map} +1 -1
- package/dist/renderer-BSOdBgdE.mjs +5 -0
- package/dist/{renderer-muB4slsV.mjs → renderer-BSsKlcHk.mjs} +3 -3
- package/dist/{renderer-muB4slsV.mjs.map → renderer-BSsKlcHk.mjs.map} +1 -1
- package/dist/{renderer-DlbSqOJR.mjs → renderer-BTd6tFcS.mjs} +3 -3
- package/dist/{renderer-DlbSqOJR.mjs.map → renderer-BTd6tFcS.mjs.map} +1 -1
- package/dist/renderer-BU6O0fpM.mjs +5 -0
- package/dist/{renderer-DtCmG-tT.mjs → renderer-BXGuCnCJ.mjs} +3 -3
- package/dist/{renderer-DtCmG-tT.mjs.map → renderer-BXGuCnCJ.mjs.map} +1 -1
- package/dist/renderer-BZ97iidG.mjs +5 -0
- package/dist/renderer-B_Klh1VT.mjs +5 -0
- package/dist/renderer-BaWQM1y-.mjs +5 -0
- package/dist/renderer-Bc0jvAj0.mjs +5 -0
- package/dist/{renderer-jBKpX3Xg.mjs → renderer-Bf7Z7WT5.mjs} +2 -2
- package/dist/{renderer-jBKpX3Xg.mjs.map → renderer-Bf7Z7WT5.mjs.map} +1 -1
- package/dist/renderer-Bm077kZ6.mjs +5 -0
- package/dist/renderer-BtzE_e_Y.mjs +5 -0
- package/dist/{renderer-kFx1_MmK.mjs → renderer-BvRM3OZ6.mjs} +2 -2
- package/dist/{renderer-kFx1_MmK.mjs.map → renderer-BvRM3OZ6.mjs.map} +1 -1
- package/dist/{renderer-DAfCcnCz.mjs → renderer-BwJ0nXXu.mjs} +3 -3
- package/dist/{renderer-DAfCcnCz.mjs.map → renderer-BwJ0nXXu.mjs.map} +1 -1
- package/dist/{renderer-CO1PwItH.mjs → renderer-BwV-o_1b.mjs} +2 -2
- package/dist/{renderer-CO1PwItH.mjs.map → renderer-BwV-o_1b.mjs.map} +1 -1
- package/dist/{renderer-Bm91Xv6l.mjs → renderer-Bxiiar50.mjs} +3 -3
- package/dist/{renderer-Bm91Xv6l.mjs.map → renderer-Bxiiar50.mjs.map} +1 -1
- package/dist/{renderer-CanNjQuL.mjs → renderer-ByFPmHBC.mjs} +2 -2
- package/dist/{renderer-CanNjQuL.mjs.map → renderer-ByFPmHBC.mjs.map} +1 -1
- package/dist/{renderer-JASAZUyY.mjs → renderer-BzTj_CeK.mjs} +3 -3
- package/dist/{renderer-JASAZUyY.mjs.map → renderer-BzTj_CeK.mjs.map} +1 -1
- package/dist/renderer-C225eCAo.mjs +5 -0
- package/dist/{renderer-7w9PZmWJ.mjs → renderer-C2kFIZ4r.mjs} +2 -2
- package/dist/{renderer-7w9PZmWJ.mjs.map → renderer-C2kFIZ4r.mjs.map} +1 -1
- package/dist/{renderer-vpsU_4XW.mjs → renderer-C3CGYjrC.mjs} +3 -3
- package/dist/{renderer-vpsU_4XW.mjs.map → renderer-C3CGYjrC.mjs.map} +1 -1
- package/dist/{renderer-BFmVDdVs.mjs → renderer-CGpi8CDT.mjs} +3 -3
- package/dist/{renderer-BFmVDdVs.mjs.map → renderer-CGpi8CDT.mjs.map} +1 -1
- package/dist/{renderer-FFLnACY-.mjs → renderer-CInMMs5x.mjs} +3 -3
- package/dist/{renderer-FFLnACY-.mjs.map → renderer-CInMMs5x.mjs.map} +1 -1
- package/dist/{renderer-CTSvHf6g.mjs → renderer-CLTRTtQ8.mjs} +3 -3
- package/dist/{renderer-CTSvHf6g.mjs.map → renderer-CLTRTtQ8.mjs.map} +1 -1
- package/dist/renderer-CLXdR4vz.mjs +5 -0
- package/dist/{renderer-7c0ecb-L.mjs → renderer-CMCmljb0.mjs} +2 -2
- package/dist/{renderer-7c0ecb-L.mjs.map → renderer-CMCmljb0.mjs.map} +1 -1
- package/dist/{renderer-BnN3JH9u.mjs → renderer-CN-mCIoI.mjs} +3 -3
- package/dist/{renderer-BnN3JH9u.mjs.map → renderer-CN-mCIoI.mjs.map} +1 -1
- package/dist/{renderer-Bif8bwCq.mjs → renderer-CNpq7rL-.mjs} +2 -2
- package/dist/{renderer-Bif8bwCq.mjs.map → renderer-CNpq7rL-.mjs.map} +1 -1
- package/dist/{renderer-Chfo4G9t.mjs → renderer-CZClDMgF.mjs} +3 -3
- package/dist/{renderer-Chfo4G9t.mjs.map → renderer-CZClDMgF.mjs.map} +1 -1
- package/dist/{renderer-BvRaVByi.mjs → renderer-C_gR2H3R.mjs} +2 -2
- package/dist/{renderer-BvRaVByi.mjs.map → renderer-C_gR2H3R.mjs.map} +1 -1
- package/dist/{renderer-DJuVX3c5.d.mts → renderer-CcmxR6Fy.d.mts} +2 -2
- package/dist/{renderer-DJuVX3c5.d.mts.map → renderer-CcmxR6Fy.d.mts.map} +1 -1
- package/dist/{renderer-BT4im6c0.mjs → renderer-CiHVnhUk.mjs} +3 -3
- package/dist/{renderer-BT4im6c0.mjs.map → renderer-CiHVnhUk.mjs.map} +1 -1
- package/dist/renderer-CszM8B3C.mjs +5 -0
- package/dist/renderer-Ctp8ZYfk.mjs +5 -0
- package/dist/{renderer-BIToh0CA.mjs → renderer-CtpEzVBn.mjs} +2 -2
- package/dist/{renderer-BIToh0CA.mjs.map → renderer-CtpEzVBn.mjs.map} +1 -1
- package/dist/renderer-CxQdSp8I.mjs +5 -0
- package/dist/{renderer-BG_cnGbF.mjs → renderer-D3QPNBEj.mjs} +3 -3
- package/dist/{renderer-BG_cnGbF.mjs.map → renderer-D3QPNBEj.mjs.map} +1 -1
- package/dist/{renderer-CybBR8AL.mjs → renderer-D3YbHjRG.mjs} +69 -69
- package/dist/{renderer-CybBR8AL.mjs.map → renderer-D3YbHjRG.mjs.map} +1 -1
- package/dist/renderer-D4GMRtDd.mjs +6 -0
- package/dist/{renderer-w7mlMSC-.mjs → renderer-DEoerd-j.mjs} +3 -3
- package/dist/{renderer-w7mlMSC-.mjs.map → renderer-DEoerd-j.mjs.map} +1 -1
- package/dist/renderer-DEsGIvTZ.mjs +5 -0
- package/dist/{renderer-fWW0bsVl.mjs → renderer-DGXqspB9.mjs} +2 -2
- package/dist/renderer-DIaUQ0EP.mjs +5 -0
- package/dist/{renderer-Dd2XrdqA.mjs → renderer-DKFaVaRJ.mjs} +2 -2
- package/dist/{renderer-Dd2XrdqA.mjs.map → renderer-DKFaVaRJ.mjs.map} +1 -1
- package/dist/{renderer-DKptrHeL.mjs → renderer-DL3o_lG1.mjs} +3 -3
- package/dist/{renderer-DKptrHeL.mjs.map → renderer-DL3o_lG1.mjs.map} +1 -1
- package/dist/{renderer-DxkvDAA6.mjs → renderer-DLaUT6JZ.mjs} +2 -2
- package/dist/{renderer-DxkvDAA6.mjs.map → renderer-DLaUT6JZ.mjs.map} +1 -1
- package/dist/renderer-DLjqcNzQ.mjs +5 -0
- package/dist/renderer-DMuQZa51.mjs +5 -0
- package/dist/{renderer-BeJoW-nG.mjs → renderer-DO1SZ5xY.mjs} +3 -3
- package/dist/{renderer-BeJoW-nG.mjs.map → renderer-DO1SZ5xY.mjs.map} +1 -1
- package/dist/{renderer-B3WHDQeB.mjs → renderer-DO_zXwMJ.mjs} +2 -2
- package/dist/{renderer-B3WHDQeB.mjs.map → renderer-DO_zXwMJ.mjs.map} +1 -1
- package/dist/renderer-DOgi2aF2.mjs +5 -0
- package/dist/{renderer-CtulmkqT.mjs → renderer-DP9ScNM6.mjs} +2 -2
- package/dist/{renderer-CtulmkqT.mjs.map → renderer-DP9ScNM6.mjs.map} +1 -1
- package/dist/{renderer-CLRrcT_3.mjs → renderer-DQJHjU0L.mjs} +3 -3
- package/dist/{renderer-CLRrcT_3.mjs.map → renderer-DQJHjU0L.mjs.map} +1 -1
- package/dist/renderer-DSh7cvi4.mjs +5 -0
- package/dist/renderer-DV1LVBBP.mjs +5 -0
- package/dist/{renderer-D7lApyWZ.mjs → renderer-DX60Kr20.mjs} +2 -2
- package/dist/{renderer-D7lApyWZ.mjs.map → renderer-DX60Kr20.mjs.map} +1 -1
- package/dist/{renderer-R2kLaNuR.mjs → renderer-DZIxduEt.mjs} +2 -2
- package/dist/{renderer-R2kLaNuR.mjs.map → renderer-DZIxduEt.mjs.map} +1 -1
- package/dist/{renderer-DMtzPqYo.mjs → renderer-DaLy1dFA.mjs} +5 -5
- package/dist/{renderer-DMtzPqYo.mjs.map → renderer-DaLy1dFA.mjs.map} +1 -1
- package/dist/{renderer-1KgHl_ls.mjs → renderer-DaY04IyU.mjs} +3 -3
- package/dist/{renderer-1KgHl_ls.mjs.map → renderer-DaY04IyU.mjs.map} +1 -1
- package/dist/renderer-Dhrj2bJz.mjs +5 -0
- package/dist/{renderer-Dih1rtT6.mjs → renderer-Dj54y3h3.mjs} +2 -2
- package/dist/{renderer-Dih1rtT6.mjs.map → renderer-Dj54y3h3.mjs.map} +1 -1
- package/dist/renderer-DoFUu1R4.mjs +5 -0
- package/dist/{renderer-DkAFIpzB.mjs → renderer-Dp9FQKVP.mjs} +3 -3
- package/dist/{renderer-DkAFIpzB.mjs.map → renderer-Dp9FQKVP.mjs.map} +1 -1
- package/dist/{renderer--f8JHHyT.mjs → renderer-DrK6pyfz.mjs} +3 -3
- package/dist/{renderer--f8JHHyT.mjs.map → renderer-DrK6pyfz.mjs.map} +1 -1
- package/dist/{renderer-Ch1qZ2PT.mjs → renderer-DrL3J9ci.mjs} +2 -2
- package/dist/{renderer-Ch1qZ2PT.mjs.map → renderer-DrL3J9ci.mjs.map} +1 -1
- package/dist/renderer-DsydX3cx.mjs +5 -0
- package/dist/{renderer-oiDoNzhv.mjs → renderer-DwH5e3hx.mjs} +2 -2
- package/dist/renderer-DxVSoeYi.mjs +5 -0
- package/dist/{renderer-Br_aJ_b7.mjs → renderer-Dy1xQOTu.mjs} +2 -2
- package/dist/{renderer-Br_aJ_b7.mjs.map → renderer-Dy1xQOTu.mjs.map} +1 -1
- package/dist/{renderer-CDfCaqV4.mjs → renderer-FvvywNvv.mjs} +2 -2
- package/dist/{renderer-CDfCaqV4.mjs.map → renderer-FvvywNvv.mjs.map} +1 -1
- package/dist/{renderer-DjiebKHO.mjs → renderer-HXw4cJZx.mjs} +2 -2
- package/dist/{renderer-DjiebKHO.mjs.map → renderer-HXw4cJZx.mjs.map} +1 -1
- package/dist/{renderer-D_rEtJAH.mjs → renderer-HhJPFidU.mjs} +3 -3
- package/dist/{renderer-D_rEtJAH.mjs.map → renderer-HhJPFidU.mjs.map} +1 -1
- package/dist/{renderer-Dswrn-yi.mjs → renderer-IAffbHXx.mjs} +2 -2
- package/dist/{renderer-Dswrn-yi.mjs.map → renderer-IAffbHXx.mjs.map} +1 -1
- package/dist/{renderer-D1tDMuD0.mjs → renderer-LrAldCWN.mjs} +3 -3
- package/dist/{renderer-D1tDMuD0.mjs.map → renderer-LrAldCWN.mjs.map} +1 -1
- package/dist/renderer-Nc9bHb0n.mjs +5 -0
- package/dist/{renderer-DAug14gu.mjs → renderer-O4y02xkD.mjs} +2 -2
- package/dist/{renderer-DAug14gu.mjs.map → renderer-O4y02xkD.mjs.map} +1 -1
- package/dist/{renderer-Ck-NLzz0.mjs → renderer-PnnkUWm-.mjs} +2 -2
- package/dist/{renderer-Ck-NLzz0.mjs.map → renderer-PnnkUWm-.mjs.map} +1 -1
- package/dist/renderer-TFaSD2Db.mjs +5 -0
- package/dist/{renderer-CKlNHDKI.mjs → renderer-TiaHrU5z.mjs} +3 -3
- package/dist/{renderer-CKlNHDKI.mjs.map → renderer-TiaHrU5z.mjs.map} +1 -1
- package/dist/renderer-Z61ctppe.mjs +5 -0
- package/dist/{renderer-BTLZBD63.mjs → renderer-_KIBvES8.mjs} +3 -3
- package/dist/{renderer-BTLZBD63.mjs.map → renderer-_KIBvES8.mjs.map} +1 -1
- package/dist/renderer-awXf3sNS.mjs +5 -0
- package/dist/{renderer-CsRuEpR2.mjs → renderer-b0H3oDae.mjs} +2 -2
- package/dist/{renderer-CsRuEpR2.mjs.map → renderer-b0H3oDae.mjs.map} +1 -1
- package/dist/renderer-cHT28oYI.mjs +5 -0
- package/dist/renderer-g7Y3bFot.mjs +5 -0
- package/dist/{renderer-CxabOSkk.mjs → renderer-oBgCEqaM.mjs} +2 -2
- package/dist/{renderer-CxabOSkk.mjs.map → renderer-oBgCEqaM.mjs.map} +1 -1
- package/dist/{renderer-BhNZn2DU.mjs → renderer-qVJdxbXB.mjs} +3 -3
- package/dist/{renderer-BhNZn2DU.mjs.map → renderer-qVJdxbXB.mjs.map} +1 -1
- package/dist/renderer-qVv0OzVc.mjs +5 -0
- package/dist/{renderer-B8i4d1Rc.mjs → renderer-rKw5_EjG.mjs} +2 -2
- package/dist/{renderer-B8i4d1Rc.mjs.map → renderer-rKw5_EjG.mjs.map} +1 -1
- package/dist/{renderer-CeNAgCE2.mjs → renderer-sMFJtt_H.mjs} +2 -2
- package/dist/{renderer-CeNAgCE2.mjs.map → renderer-sMFJtt_H.mjs.map} +1 -1
- package/dist/{renderer-DrExCXnp.mjs → renderer-smP1F57W.mjs} +2 -2
- package/dist/{renderer-DrExCXnp.mjs.map → renderer-smP1F57W.mjs.map} +1 -1
- package/dist/{renderer-DxiF4O6X.mjs → renderer-snjhPaP-.mjs} +3 -3
- package/dist/{renderer-DxiF4O6X.mjs.map → renderer-snjhPaP-.mjs.map} +1 -1
- package/dist/{renderer-CwAuWLWm.mjs → renderer-t1sXDiqm.mjs} +3 -3
- package/dist/{renderer-CwAuWLWm.mjs.map → renderer-t1sXDiqm.mjs.map} +1 -1
- package/dist/{renderer-Bb_HHUQ0.mjs → renderer-tRi3KNoG.mjs} +3 -3
- package/dist/{renderer-Bb_HHUQ0.mjs.map → renderer-tRi3KNoG.mjs.map} +1 -1
- package/dist/{renderer-BSW4CGZF.mjs → renderer-uA0UCxjA.mjs} +2 -2
- package/dist/{renderer-BSW4CGZF.mjs.map → renderer-uA0UCxjA.mjs.map} +1 -1
- package/dist/{renderer-vPxMXiv8.mjs → renderer-xNOKSN3V.mjs} +3 -3
- package/dist/{renderer-vPxMXiv8.mjs.map → renderer-xNOKSN3V.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-OgyUiyrr.mjs → renderers-CP8CFWDs-DWRjjeUg.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-OgyUiyrr.mjs.map → renderers-CP8CFWDs-DWRjjeUg.mjs.map} +1 -1
- package/dist/signals/index.d.mts +6 -6
- package/dist/signals/index.mjs +4 -4
- package/dist/{src-C3f3zXYg.mjs → src-D7M8VTzv.mjs} +7 -7
- package/dist/{src-C3f3zXYg.mjs.map → src-D7M8VTzv.mjs.map} +1 -1
- package/package.json +59 -59
- package/dist/audio-1X5qNNmk.d.mts +0 -38
- package/dist/audio-1X5qNNmk.d.mts.map +0 -1
- package/dist/audio-YpBRdI7r.mjs.map +0 -1
- package/dist/cloud-xcfV4J03.mjs.map +0 -1
- package/dist/dist-C4Vxgm0Q.mjs.map +0 -1
- package/dist/index-B7WqFBZA.d.mts.map +0 -1
- package/dist/index-Dyt4yS-x.d.mts.map +0 -1
- package/dist/preview-engine/chunk-GTMZOMAN.mjs +0 -1
- package/dist/preview-engine/renderers-33PIDDZC.mjs +0 -1
- package/dist/preview-engine/renderers-3AZ3HY53.mjs +0 -1
- package/dist/preview-engine/renderers-3FGKW52B.mjs +0 -1
- package/dist/preview-engine/renderers-4A2FBS3Y.mjs +0 -1
- package/dist/preview-engine/renderers-65DU2F5W.mjs +0 -1
- package/dist/preview-engine/renderers-6CTPYQR6.mjs +0 -1
- package/dist/preview-engine/renderers-AWODRI3B.mjs +0 -1
- package/dist/preview-engine/renderers-BO6HHGMZ.mjs +0 -1
- package/dist/preview-engine/renderers-BSXYDEV7.mjs +0 -1
- package/dist/preview-engine/renderers-ECW2CGNU.mjs +0 -1
- package/dist/preview-engine/renderers-EEX22FUO.mjs +0 -1
- package/dist/preview-engine/renderers-GCQKGJ7W.mjs +0 -1
- package/dist/preview-engine/renderers-HZBXLDKG.mjs +0 -1
- package/dist/preview-engine/renderers-IOXNQPQK.mjs +0 -1
- package/dist/preview-engine/renderers-IR44E4ZZ.mjs +0 -1
- package/dist/preview-engine/renderers-JZZ3ODOZ.mjs +0 -1
- package/dist/preview-engine/renderers-K37YL3Z7.mjs +0 -1
- package/dist/preview-engine/renderers-KUJQV3K6.mjs +0 -1
- package/dist/preview-engine/renderers-KXVKLSSX.mjs +0 -1
- package/dist/preview-engine/renderers-N4RVFX3G.mjs +0 -1
- package/dist/preview-engine/renderers-NZWWEAYA.mjs +0 -1
- package/dist/preview-engine/renderers-P4JJEDZB.mjs +0 -1
- package/dist/preview-engine/renderers-Q4572F5C.mjs +0 -1
- package/dist/preview-engine/renderers-QAX2QWWQ.mjs +0 -1
- package/dist/preview-engine/renderers-SRFIEVWL.mjs +0 -1
- package/dist/preview-engine/renderers-SYC6WFTM.mjs +0 -1
- package/dist/preview-engine/renderers-UH4WN3QN.mjs +0 -1
- package/dist/preview-engine/renderers-V4FFCAS7.mjs +0 -1
- package/dist/preview-engine/renderers-VGDEOZUU.mjs +0 -1
- package/dist/preview-engine/renderers-VJJKBX5K.mjs +0 -1
- package/dist/preview-engine/renderers-VJOKVDYW.mjs +0 -1
- package/dist/preview-engine/renderers-VUUWZUOH.mjs +0 -1
- package/dist/preview-engine/renderers-WOP5GOZP.mjs +0 -1
- package/dist/preview-engine/renderers-Y4MGN2FR.mjs +0 -1
- package/dist/preview-engine/renderers-YAMYH7IK.mjs +0 -1
- package/dist/preview-engine/renderers-ZNLSAWW3.mjs +0 -1
- package/dist/renderer-6sNr6ZRJ.mjs +0 -6
- package/dist/renderer-BDHGxD6p.mjs +0 -5
- package/dist/renderer-BT9dvpk2.mjs +0 -5
- package/dist/renderer-BfaRh0qy.mjs +0 -5
- package/dist/renderer-BlwXKV7Y.mjs +0 -5
- package/dist/renderer-C40yZK3x.mjs +0 -5
- package/dist/renderer-C5MjQ7L8.mjs +0 -5
- package/dist/renderer-C8LjKYnS.mjs +0 -5
- package/dist/renderer-C9q9H_qa.mjs +0 -5
- package/dist/renderer-CF9ta9Rm.mjs +0 -5
- package/dist/renderer-CO205Gr9.mjs +0 -5
- package/dist/renderer-CSm8UXLP.mjs +0 -5
- package/dist/renderer-CSy8HRtF.mjs +0 -5
- package/dist/renderer-CdNRWDsA.mjs +0 -5
- package/dist/renderer-CkAjiGRB.mjs +0 -5
- package/dist/renderer-CmryuPBm.mjs +0 -5
- package/dist/renderer-CnEwne4L.mjs +0 -5
- package/dist/renderer-D4QDoqOG.mjs +0 -5
- package/dist/renderer-D7cS2a8z.mjs +0 -5
- package/dist/renderer-D85CNC-b.mjs +0 -5
- package/dist/renderer-DC9IoJNz.mjs +0 -5
- package/dist/renderer-DIDh0gFm.mjs +0 -5
- package/dist/renderer-DLmJ9GWE.mjs +0 -5
- package/dist/renderer-DM7PUWP9.mjs +0 -5
- package/dist/renderer-DPWFDxIO.mjs +0 -5
- package/dist/renderer-DUCByhAk.mjs +0 -5
- package/dist/renderer-DVOtnCKH.mjs +0 -5
- package/dist/renderer-DVrN2bW8.mjs +0 -5
- package/dist/renderer-DdOVwfG4.mjs +0 -5
- package/dist/renderer-DtCe9ouu.mjs +0 -5
- package/dist/renderer-Mg0kr9Fm.mjs +0 -5
- package/dist/renderer-T35PsSw5.mjs +0 -5
- package/dist/renderer-iSZ5NT-J.mjs +0 -5
- package/dist/renderer-nEmMjQ1a.mjs +0 -5
- package/dist/renderer-pG1nyfjE.mjs +0 -5
- 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-
|
|
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-
|
|
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
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
|
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
|
|
267
|
-
`).map(
|
|
268
|
-
`),{valid:d,validationWarning:i}=
|
|
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=[
|
|
273
|
-
`);return{name:a,wgsl:S,signature:u,outputType:t,params:r,valid:d,validationWarning:i}}function
|
|
274
|
-
`)}function K(
|
|
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});`,
|
|
277
|
-
`)}}}function
|
|
278
|
-
`)}let r=`${t}_in`,n=`${t}_out`;return[K(
|
|
279
|
-
`)}function
|
|
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(
|
|
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),
|
|
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"}}),
|
|
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});
|
|
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,
|
|
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"}}),
|
|
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]=
|
|
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_${
|
|
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(
|
|
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-
|
|
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-
|
|
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,
|