framefields 2.12.0 → 2.13.1
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/README.md +9 -4
- package/dist/audio/index.d.mts +6 -5
- package/dist/audio/index.mjs +13 -13
- package/dist/{audio-afTBdB3U.d.mts → audio-C4B9p_yq.d.mts} +3 -4
- package/dist/audio-C4B9p_yq.d.mts.map +1 -0
- package/dist/{audio-DHLoNcxD.mjs → audio-DIvi6hTD.mjs} +4 -4
- package/dist/{audio-DHLoNcxD.mjs.map → audio-DIvi6hTD.mjs.map} +1 -1
- package/dist/{audio-KHBadECb.mjs → audio-DS9Jg2ls.mjs} +1 -1
- package/dist/{audio-KHBadECb.mjs.map → audio-DS9Jg2ls.mjs.map} +1 -1
- package/dist/{check-result-Culfu7Nx.mjs → check-result-DZWx73V8.mjs} +1 -1
- package/dist/{check-result-Culfu7Nx.mjs.map → check-result-DZWx73V8.mjs.map} +1 -1
- package/dist/cli/check-worker.mjs +51 -51
- package/dist/cli/check-worker.mjs.map +1 -1
- package/dist/cli/local-worker.d.mts +28 -0
- package/dist/cli/local-worker.d.mts.map +1 -0
- package/dist/cli/local-worker.mjs +83 -0
- package/dist/cli/local-worker.mjs.map +1 -0
- package/dist/cli.mjs +229 -54
- package/dist/cli.mjs.map +1 -1
- package/dist/cloud/index.d.mts +2 -0
- package/dist/cloud/index.d.mts.map +1 -1
- package/dist/cloud/index.mjs +1 -1
- package/dist/{cloud-COid1Ipa.mjs → cloud-Cj1TIme8.mjs} +306 -7
- package/dist/cloud-Cj1TIme8.mjs.map +1 -0
- package/dist/components/index.d.mts +15 -14
- package/dist/components/index.mjs +47 -47
- package/dist/{dist-CySGkG54.mjs → dist-BSKAbyea.mjs} +2 -2
- package/dist/{dist-CySGkG54.mjs.map → dist-BSKAbyea.mjs.map} +1 -1
- package/dist/{dist-BwtxciN4.mjs → dist-B_rSWeOz.mjs} +1 -1
- package/dist/{dist-Bf2_efYP.mjs → dist-C8XSqfTx.mjs} +1 -1
- package/dist/{dist-Bf2_efYP.mjs.map → dist-C8XSqfTx.mjs.map} +1 -1
- package/dist/{dist-BSqeChht.mjs → dist-CCrYOkcc.mjs} +145 -84
- package/dist/dist-CCrYOkcc.mjs.map +1 -0
- package/dist/dist-CiTgmfUw.mjs +502 -0
- package/dist/dist-CiTgmfUw.mjs.map +1 -0
- package/dist/{dist-BIE8fvlv.mjs → dist-DgZpN6IK.mjs} +1 -1
- package/dist/{dist-BIE8fvlv.mjs.map → dist-DgZpN6IK.mjs.map} +1 -1
- package/dist/{dist-B-OPY7Cs.mjs → dist-DtPPPsZV.mjs} +356 -145
- package/dist/dist-DtPPPsZV.mjs.map +1 -0
- package/dist/{dist-2_lT3Dwc.mjs → dist-Kbf-JTry.mjs} +2 -2
- package/dist/{dist-2_lT3Dwc.mjs.map → dist-Kbf-JTry.mjs.map} +1 -1
- package/dist/effects/index.d.mts +6 -6
- package/dist/effects/index.mjs +36 -36
- package/dist/{effects-C8CL9cOq.mjs → effects-B-L3rLs6.mjs} +3 -3
- package/dist/{effects-C8CL9cOq.mjs.map → effects-B-L3rLs6.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +3 -3
- package/dist/{fonts-BQrDjnpV.mjs → fonts-k5ll8NTE.mjs} +2 -2
- package/dist/{fonts-BQrDjnpV.mjs.map → fonts-k5ll8NTE.mjs.map} +1 -1
- package/dist/{gpu-DHa-3Dou.mjs → gpu-D2HT3KcE.mjs} +2 -2
- package/dist/{gpu-DHa-3Dou.mjs.map → gpu-D2HT3KcE.mjs.map} +1 -1
- package/dist/{index-CTv9ZieD.d.mts → index-B08eSpaI.d.mts} +3 -30
- package/dist/index-B08eSpaI.d.mts.map +1 -0
- package/dist/index-BFTtXosj.d.mts +63 -0
- package/dist/index-BFTtXosj.d.mts.map +1 -0
- package/dist/{index-Drk6HC2k.d.mts → index-BGlaws7-.d.mts} +3 -3
- package/dist/{index-Drk6HC2k.d.mts.map → index-BGlaws7-.d.mts.map} +1 -1
- package/dist/{index-CAuNuvIg.d.mts → index-ByhlTwxh.d.mts} +5 -5
- package/dist/{index-CAuNuvIg.d.mts.map → index-ByhlTwxh.d.mts.map} +1 -1
- package/dist/{index-Fliv2Z-w.d.mts → index-C2yaponf.d.mts} +132 -7
- package/dist/index-C2yaponf.d.mts.map +1 -0
- package/dist/{index-BW0Q1ygn.d.mts → index-C5sgRLlG.d.mts} +1 -1
- package/dist/{index-BW0Q1ygn.d.mts.map → index-C5sgRLlG.d.mts.map} +1 -1
- package/dist/{index-CdCrae-I.d.mts → index-CnZhBlob.d.mts} +2 -2
- package/dist/index-CnZhBlob.d.mts.map +1 -0
- package/dist/{index-BNClElng.d.mts → index-CtKUQ2VG.d.mts} +281 -283
- package/dist/index-CtKUQ2VG.d.mts.map +1 -0
- package/dist/{index-WwuuX8ZJ.d.mts → index-DBh3WphX.d.mts} +2 -2
- package/dist/{index-WwuuX8ZJ.d.mts.map → index-DBh3WphX.d.mts.map} +1 -1
- package/dist/{index-gOVtTm-P.d.mts → index-DQ1U3HC3.d.mts} +14 -6
- package/dist/index-DQ1U3HC3.d.mts.map +1 -0
- package/dist/{index-COYNQ_mf.d.mts → index-a6JrbAK0.d.mts} +1 -1
- package/dist/{index-COYNQ_mf.d.mts.map → index-a6JrbAK0.d.mts.map} +1 -1
- package/dist/{index-DQa7mhzq.d.mts → index-rtCXNxGO.d.mts} +2 -2
- package/dist/{index-DQa7mhzq.d.mts.map → index-rtCXNxGO.d.mts.map} +1 -1
- package/dist/index.d.mts +16 -15
- package/dist/index.mjs +58 -58
- package/dist/preview/index.d.mts +5 -4
- package/dist/preview/index.mjs +12 -12
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-FJTURGJV.mjs → chunk-3C2XT64C.mjs} +1 -1
- package/dist/preview-engine/chunk-52X7SURQ.mjs +494 -0
- package/dist/preview-engine/{chunk-4JNIEQS2.mjs → chunk-5ZS46EFB.mjs} +1 -1
- package/dist/preview-engine/{chunk-KBCZKIIQ.mjs → chunk-CYM75INB.mjs} +1 -1
- package/dist/preview-engine/chunk-FZ4RD7HV.mjs +1 -0
- package/dist/preview-engine/chunk-LZNHGH56.mjs +5 -0
- package/dist/preview-engine/{chunk-RGKS6YIA.mjs → chunk-N2VISDTG.mjs} +1 -1
- package/dist/preview-engine/chunk-N3XTDAL6.mjs +2227 -0
- package/dist/preview-engine/{chunk-O75BFM4S.mjs → chunk-NVXFEDJS.mjs} +1 -1
- package/dist/preview-engine/chunk-OBIJIQCZ.mjs +1 -0
- package/dist/preview-engine/{chunk-VUO4K52B.mjs → chunk-PD2HKW2S.mjs} +1 -1
- package/dist/preview-engine/{chunk-HTAHYSCW.mjs → chunk-R4H52Q7S.mjs} +1 -1
- package/dist/preview-engine/{chunk-6O7UDVNL.mjs → chunk-RYSV44B4.mjs} +1 -1
- package/dist/preview-engine/{chunk-TKXOSEIJ.mjs → chunk-SV3ZNZQU.mjs} +1 -1
- package/dist/preview-engine/{chunk-JAUMCOOJ.mjs → chunk-UBY2UYEL.mjs} +1 -1
- package/dist/preview-engine/{chunk-32WC4FRR.mjs → chunk-UE7Y65C3.mjs} +3 -3
- package/dist/preview-engine/{chunk-M4QVCQ3O.mjs → chunk-VMXJZ4KQ.mjs} +1 -1
- package/dist/preview-engine/{chunk-EYKN2VET.mjs → chunk-XCPRRMMW.mjs} +31 -31
- 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 +5 -5
- package/dist/preview-engine/{renderers-L6GFGHS6.mjs → renderers-AFTUFMQQ.mjs} +1 -1
- package/dist/preview-engine/renderers-DU7KPFVV.mjs +1 -1
- package/dist/preview-engine/{renderers-PREFONJG.mjs → renderers-EPSF5CSQ.mjs} +1 -1
- package/dist/preview-engine/{renderers-R22CDFO4.mjs → renderers-OJWWIVNW.mjs} +1 -1
- package/dist/preview-engine/{renderers-TS32FDV7.mjs → renderers-RHMRWX46.mjs} +1 -1
- package/dist/preview-engine/renderers-VEHYARKY.mjs +1 -0
- package/dist/preview-engine/renderers-VRXAG3FR.mjs +1 -0
- package/dist/preview-engine/renderers-ZHSOWEMQ.mjs +1 -0
- package/dist/preview-engine/renderers-ZMDRNYSS.mjs +1 -0
- package/dist/preview-engine/renderers-ZMMQ7S2A.mjs +228 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/preview-engine/{src-GPF7RIBU.mjs → src-YXNX4MLK.mjs} +1 -1
- package/dist/{preview-BUtt481A.mjs → preview-lHH8Tv4j.mjs} +323 -35
- package/dist/preview-lHH8Tv4j.mjs.map +1 -0
- package/dist/{program-Cvv_nb9T.mjs → program-BfiB9ttP.mjs} +17 -4
- package/dist/program-BfiB9ttP.mjs.map +1 -0
- package/dist/renderer/index.d.mts +4 -3
- package/dist/renderer/index.mjs +3 -3
- package/dist/renderer-0rLmztAv.mjs +5 -0
- package/dist/{renderer-D3QPNBEj.mjs → renderer-4nsuReW2.mjs} +5 -5
- package/dist/{renderer-D3QPNBEj.mjs.map → renderer-4nsuReW2.mjs.map} +1 -1
- package/dist/{renderer-DO1SZ5xY.mjs → renderer-7xQmXXMH.mjs} +5 -5
- package/dist/{renderer-DO1SZ5xY.mjs.map → renderer-7xQmXXMH.mjs.map} +1 -1
- package/dist/renderer-B0pjOXFY.mjs +5 -0
- package/dist/{renderer-BSsKlcHk.mjs → renderer-B10HDC13.mjs} +5 -5
- package/dist/{renderer-BSsKlcHk.mjs.map → renderer-B10HDC13.mjs.map} +1 -1
- package/dist/{renderer-DaY04IyU.mjs → renderer-B2IUPjhw.mjs} +5 -5
- package/dist/{renderer-DaY04IyU.mjs.map → renderer-B2IUPjhw.mjs.map} +1 -1
- package/dist/{renderer-O4y02xkD.mjs → renderer-B3_GddgJ.mjs} +4 -4
- package/dist/{renderer-O4y02xkD.mjs.map → renderer-B3_GddgJ.mjs.map} +1 -1
- package/dist/{renderer-DQJHjU0L.mjs → renderer-B3un4Pdi.mjs} +5 -5
- package/dist/{renderer-DQJHjU0L.mjs.map → renderer-B3un4Pdi.mjs.map} +1 -1
- package/dist/{renderer-PnnkUWm-.mjs → renderer-B6bK9rXm.mjs} +4 -4
- package/dist/{renderer-PnnkUWm-.mjs.map → renderer-B6bK9rXm.mjs.map} +1 -1
- package/dist/renderer-B7J13reL.mjs +5 -0
- package/dist/{renderer-HXw4cJZx.mjs → renderer-BEhZiOT4.mjs} +3 -3
- package/dist/{renderer-HXw4cJZx.mjs.map → renderer-BEhZiOT4.mjs.map} +1 -1
- package/dist/{renderer-xNOKSN3V.mjs → renderer-BEuXJY-C.mjs} +5 -5
- package/dist/{renderer-xNOKSN3V.mjs.map → renderer-BEuXJY-C.mjs.map} +1 -1
- package/dist/{renderer-IAffbHXx.mjs → renderer-BGchUBW_.mjs} +4 -4
- package/dist/{renderer-IAffbHXx.mjs.map → renderer-BGchUBW_.mjs.map} +1 -1
- package/dist/{renderer-CZClDMgF.mjs → renderer-BIKkxw_Z.mjs} +5 -5
- package/dist/{renderer-CZClDMgF.mjs.map → renderer-BIKkxw_Z.mjs.map} +1 -1
- package/dist/{renderer-BvRM3OZ6.mjs → renderer-BM19iK8v.mjs} +3 -3
- package/dist/{renderer-BvRM3OZ6.mjs.map → renderer-BM19iK8v.mjs.map} +1 -1
- package/dist/{renderer-CtpEzVBn.mjs → renderer-BOlHW3Mi.mjs} +3 -3
- package/dist/{renderer-CtpEzVBn.mjs.map → renderer-BOlHW3Mi.mjs.map} +1 -1
- package/dist/renderer-BPGIKGgl.mjs +5 -0
- package/dist/{renderer-4uZGSmUD.mjs → renderer-BTwuM9u-.mjs} +5 -5
- package/dist/{renderer-4uZGSmUD.mjs.map → renderer-BTwuM9u-.mjs.map} +1 -1
- package/dist/{renderer-DO_zXwMJ.mjs → renderer-BZMh2io2.mjs} +5 -5
- package/dist/{renderer-DO_zXwMJ.mjs.map → renderer-BZMh2io2.mjs.map} +1 -1
- package/dist/{renderer-rKw5_EjG.mjs → renderer-BZX932Lj.mjs} +4 -4
- package/dist/{renderer-rKw5_EjG.mjs.map → renderer-BZX932Lj.mjs.map} +1 -1
- package/dist/{renderer-5fGj_tqN.mjs → renderer-BhcTYhaP.mjs} +6 -6
- package/dist/{renderer-5fGj_tqN.mjs.map → renderer-BhcTYhaP.mjs.map} +1 -1
- package/dist/{renderer-DL3o_lG1.mjs → renderer-BmyFfvVA.mjs} +5 -5
- package/dist/{renderer-DL3o_lG1.mjs.map → renderer-BmyFfvVA.mjs.map} +1 -1
- package/dist/{renderer-DX60Kr20.mjs → renderer-BrEeUw7T.mjs} +3 -3
- package/dist/{renderer-DX60Kr20.mjs.map → renderer-BrEeUw7T.mjs.map} +1 -1
- package/dist/{renderer-Bf7Z7WT5.mjs → renderer-BsrKj6Td.mjs} +4 -4
- package/dist/{renderer-Bf7Z7WT5.mjs.map → renderer-BsrKj6Td.mjs.map} +1 -1
- package/dist/{renderer-BOg8i8eF.mjs → renderer-BuvKGwk3.mjs} +1 -1
- package/dist/{renderer-BOg8i8eF.mjs.map → renderer-BuvKGwk3.mjs.map} +1 -1
- package/dist/renderer-Bv-Artj1.mjs +5 -0
- package/dist/{renderer-_KIBvES8.mjs → renderer-BvBqTAtk.mjs} +5 -5
- package/dist/{renderer-_KIBvES8.mjs.map → renderer-BvBqTAtk.mjs.map} +1 -1
- package/dist/renderer-BvLjbhcL.mjs +5 -0
- package/dist/{renderer-BC_Nse6h.mjs → renderer-Bw-_GZVw.mjs} +4 -4
- package/dist/{renderer-BC_Nse6h.mjs.map → renderer-Bw-_GZVw.mjs.map} +1 -1
- package/dist/{renderer-CLTRTtQ8.mjs → renderer-Bw0O--gW.mjs} +5 -5
- package/dist/{renderer-CLTRTtQ8.mjs.map → renderer-Bw0O--gW.mjs.map} +1 -1
- package/dist/renderer-By6awWaf.mjs +5 -0
- package/dist/{renderer-DsPLMzy1.mjs → renderer-C-3qhk5x.mjs} +2 -2
- package/dist/{renderer-DsPLMzy1.mjs.map → renderer-C-3qhk5x.mjs.map} +1 -1
- package/dist/renderer-C0rvsz7m.mjs +5 -0
- package/dist/{renderer-DP9ScNM6.mjs → renderer-C4hd6Cqi.mjs} +3 -3
- package/dist/{renderer-DP9ScNM6.mjs.map → renderer-C4hd6Cqi.mjs.map} +1 -1
- package/dist/{renderer-B09I95bo.mjs → renderer-C64_B8It.mjs} +3 -3
- package/dist/{renderer-DrL3J9ci.mjs → renderer-C98XwEIr.mjs} +4 -4
- package/dist/{renderer-DrL3J9ci.mjs.map → renderer-C98XwEIr.mjs.map} +1 -1
- package/dist/{renderer-6g1ri445.mjs → renderer-CC22Djgi.mjs} +5 -5
- package/dist/{renderer-6g1ri445.mjs.map → renderer-CC22Djgi.mjs.map} +1 -1
- package/dist/renderer-CDgud_HB.mjs +5 -0
- package/dist/renderer-CDiRF3bG.mjs +6 -0
- package/dist/{renderer-FvvywNvv.mjs → renderer-CHCRcCKw.mjs} +3 -3
- package/dist/{renderer-FvvywNvv.mjs.map → renderer-CHCRcCKw.mjs.map} +1 -1
- package/dist/renderer-CIIEQd4B.mjs +5 -0
- package/dist/renderer-CJblwOA9.mjs +5 -0
- package/dist/renderer-CNMOXtXE.mjs +5 -0
- package/dist/{renderer-D3YbHjRG.mjs → renderer-CO4NGvAh.mjs} +95 -80
- package/dist/renderer-CO4NGvAh.mjs.map +1 -0
- package/dist/{renderer-ByFPmHBC.mjs → renderer-CO9vE3sd.mjs} +4 -4
- package/dist/{renderer-ByFPmHBC.mjs.map → renderer-CO9vE3sd.mjs.map} +1 -1
- package/dist/renderer-COeSeNGg.mjs +5 -0
- package/dist/{renderer-CN-mCIoI.mjs → renderer-CQ4h8n7p.mjs} +5 -5
- package/dist/{renderer-CN-mCIoI.mjs.map → renderer-CQ4h8n7p.mjs.map} +1 -1
- package/dist/{renderer-DEoerd-j.mjs → renderer-CRhEGqW4.mjs} +4 -4
- package/dist/{renderer-DEoerd-j.mjs.map → renderer-CRhEGqW4.mjs.map} +1 -1
- package/dist/{renderer-CiHVnhUk.mjs → renderer-CSu_vYPn.mjs} +5 -5
- package/dist/{renderer-CiHVnhUk.mjs.map → renderer-CSu_vYPn.mjs.map} +1 -1
- package/dist/{renderer-BJEexai1.mjs → renderer-CU6WT5jW.mjs} +5 -5
- package/dist/{renderer-BJEexai1.mjs.map → renderer-CU6WT5jW.mjs.map} +1 -1
- package/dist/renderer-CUfElmtZ.mjs +5 -0
- package/dist/{renderer-BwJ0nXXu.mjs → renderer-CXrnzihz.mjs} +5 -5
- package/dist/{renderer-BwJ0nXXu.mjs.map → renderer-CXrnzihz.mjs.map} +1 -1
- package/dist/renderer-CYh2lFoJ.mjs +5 -0
- package/dist/renderer-CYtVZYMH.mjs +5 -0
- package/dist/{renderer-BwV-o_1b.mjs → renderer-CdXBRdFf.mjs} +4 -4
- package/dist/{renderer-BwV-o_1b.mjs.map → renderer-CdXBRdFf.mjs.map} +1 -1
- package/dist/{renderer-DrK6pyfz.mjs → renderer-Cfx_FCSf.mjs} +5 -5
- package/dist/{renderer-DrK6pyfz.mjs.map → renderer-Cfx_FCSf.mjs.map} +1 -1
- package/dist/renderer-CjxZlkjb.mjs +5 -0
- package/dist/{renderer-CInMMs5x.mjs → renderer-CkTehyRX.mjs} +6 -6
- package/dist/{renderer-CInMMs5x.mjs.map → renderer-CkTehyRX.mjs.map} +1 -1
- package/dist/{renderer-DGXqspB9.mjs → renderer-CldjJmRR.mjs} +3 -3
- package/dist/{renderer-HhJPFidU.mjs → renderer-CoC64eam.mjs} +5 -5
- package/dist/{renderer-HhJPFidU.mjs.map → renderer-CoC64eam.mjs.map} +1 -1
- package/dist/renderer-Cpd6TvTC.mjs +5 -0
- package/dist/{renderer-DLaUT6JZ.mjs → renderer-Cv9CKKWG.mjs} +4 -4
- package/dist/{renderer-DLaUT6JZ.mjs.map → renderer-Cv9CKKWG.mjs.map} +1 -1
- package/dist/renderer-CzgcZXKH.mjs +3 -0
- package/dist/{renderer-DCMoBppL.mjs → renderer-D-GWBoVT.mjs} +3 -3
- package/dist/{renderer-DCMoBppL.mjs.map → renderer-D-GWBoVT.mjs.map} +1 -1
- package/dist/{renderer-C3CGYjrC.mjs → renderer-D-mX1EVA.mjs} +5 -5
- package/dist/{renderer-C3CGYjrC.mjs.map → renderer-D-mX1EVA.mjs.map} +1 -1
- package/dist/{renderer-C2kFIZ4r.mjs → renderer-D0h1hTOo.mjs} +4 -4
- package/dist/{renderer-C2kFIZ4r.mjs.map → renderer-D0h1hTOo.mjs.map} +1 -1
- package/dist/{renderer-C_gR2H3R.mjs → renderer-D0xM67cK.mjs} +3 -3
- package/dist/{renderer-C_gR2H3R.mjs.map → renderer-D0xM67cK.mjs.map} +1 -1
- package/dist/renderer-D3ziOPhX.mjs +5 -0
- package/dist/renderer-D5yp74NL.mjs +3 -0
- package/dist/{renderer-BTd6tFcS.mjs → renderer-DCrKEVjb.mjs} +5 -5
- package/dist/{renderer-BTd6tFcS.mjs.map → renderer-DCrKEVjb.mjs.map} +1 -1
- package/dist/{renderer-Dak_wVh9.mjs → renderer-DGOMfyh8.mjs} +2 -2
- package/dist/{renderer-Dak_wVh9.mjs.map → renderer-DGOMfyh8.mjs.map} +1 -1
- package/dist/renderer-DKJOon6y.d.mts +1 -0
- package/dist/renderer-DL-phtL5.mjs +5 -0
- package/dist/{renderer-uA0UCxjA.mjs → renderer-DNynPM6X.mjs} +4 -4
- package/dist/{renderer-uA0UCxjA.mjs.map → renderer-DNynPM6X.mjs.map} +1 -1
- package/dist/renderer-DSnmYnHg.mjs +5 -0
- package/dist/renderer-DUGfsT-E.mjs +5 -0
- package/dist/renderer-DW5af9x1.mjs +5 -0
- package/dist/{renderer-CMCmljb0.mjs → renderer-DWYmJSrl.mjs} +3 -3
- package/dist/{renderer-CMCmljb0.mjs.map → renderer-DWYmJSrl.mjs.map} +1 -1
- package/dist/renderer-DYMrol1t.mjs +5 -0
- package/dist/{renderer-CGpi8CDT.mjs → renderer-DYeNNc_G.mjs} +4 -4
- package/dist/{renderer-CGpi8CDT.mjs.map → renderer-DYeNNc_G.mjs.map} +1 -1
- package/dist/{renderer-DKFaVaRJ.mjs → renderer-DYlx7VHo.mjs} +4 -4
- package/dist/{renderer-DKFaVaRJ.mjs.map → renderer-DYlx7VHo.mjs.map} +1 -1
- package/dist/{renderer-DZIxduEt.mjs → renderer-D_m6Qbsi.mjs} +3 -3
- package/dist/{renderer-DZIxduEt.mjs.map → renderer-D_m6Qbsi.mjs.map} +1 -1
- package/dist/renderer-DekeUHaz.mjs +5 -0
- package/dist/{renderer-snjhPaP-.mjs → renderer-DhGZ41hQ.mjs} +4 -4
- package/dist/{renderer-snjhPaP-.mjs.map → renderer-DhGZ41hQ.mjs.map} +1 -1
- package/dist/{renderer-BXGuCnCJ.mjs → renderer-DiZkZ0Pr.mjs} +4 -4
- package/dist/{renderer-BXGuCnCJ.mjs.map → renderer-DiZkZ0Pr.mjs.map} +1 -1
- package/dist/{renderer-BBjkX0Vt.mjs → renderer-Dm57W73p.mjs} +3 -3
- package/dist/renderer-Dt5uyJdZ.mjs +5 -0
- package/dist/{renderer-DwH5e3hx.mjs → renderer-DtFZbE1j.mjs} +3 -3
- package/dist/{renderer-Bxiiar50.mjs → renderer-DvHi_wXE.mjs} +4 -4
- package/dist/{renderer-Bxiiar50.mjs.map → renderer-DvHi_wXE.mjs.map} +1 -1
- package/dist/{renderer-DaLy1dFA.mjs → renderer-Dv_iRIyx.mjs} +21 -21
- package/dist/renderer-Dv_iRIyx.mjs.map +1 -0
- package/dist/renderer-DwLQAnaK.mjs +5 -0
- package/dist/{renderer-qVJdxbXB.mjs → renderer-DzON3wDZ.mjs} +4 -4
- package/dist/{renderer-qVJdxbXB.mjs.map → renderer-DzON3wDZ.mjs.map} +1 -1
- package/dist/{renderer-Dj54y3h3.mjs → renderer-GIlQ9lZq.mjs} +3 -3
- package/dist/{renderer-Dj54y3h3.mjs.map → renderer-GIlQ9lZq.mjs.map} +1 -1
- package/dist/{renderer-b0H3oDae.mjs → renderer-HKv5cBdp.mjs} +3 -3
- package/dist/{renderer-b0H3oDae.mjs.map → renderer-HKv5cBdp.mjs.map} +1 -1
- package/dist/renderer-IXQP2CWM.mjs +5 -0
- package/dist/renderer-K-Pkw63O.mjs +5 -0
- package/dist/renderer-MPw2KH9P.mjs +5 -0
- package/dist/{renderer-t1sXDiqm.mjs → renderer-QbSrnPZU.mjs} +3 -3
- package/dist/{renderer-t1sXDiqm.mjs.map → renderer-QbSrnPZU.mjs.map} +1 -1
- package/dist/renderer-RPu8RMav.mjs +5 -0
- package/dist/{renderer-Dp9FQKVP.mjs → renderer-TfeohPxt.mjs} +5 -5
- package/dist/{renderer-Dp9FQKVP.mjs.map → renderer-TfeohPxt.mjs.map} +1 -1
- package/dist/{renderer-BzTj_CeK.mjs → renderer-Y1kjtOto.mjs} +4 -4
- package/dist/{renderer-BzTj_CeK.mjs.map → renderer-Y1kjtOto.mjs.map} +1 -1
- package/dist/{renderer-LrAldCWN.mjs → renderer-YONlI6W-.mjs} +5 -5
- package/dist/{renderer-LrAldCWN.mjs.map → renderer-YONlI6W-.mjs.map} +1 -1
- package/dist/{renderer-tRi3KNoG.mjs → renderer-_J9JcCMR.mjs} +5 -5
- package/dist/{renderer-tRi3KNoG.mjs.map → renderer-_J9JcCMR.mjs.map} +1 -1
- package/dist/renderer-dCqxd5N2.mjs +5 -0
- package/dist/{renderer-CcmxR6Fy.d.mts → renderer-fG8Jy8Rx.d.mts} +2 -2
- package/dist/{renderer-CcmxR6Fy.d.mts.map → renderer-fG8Jy8Rx.d.mts.map} +1 -1
- package/dist/renderer-lhjmE-Fp.mjs +5 -0
- package/dist/{renderer-TiaHrU5z.mjs → renderer-mDBoz0zT.mjs} +5 -5
- package/dist/{renderer-TiaHrU5z.mjs.map → renderer-mDBoz0zT.mjs.map} +1 -1
- package/dist/{renderer-smP1F57W.mjs → renderer-pn52dzZz.mjs} +4 -4
- package/dist/{renderer-smP1F57W.mjs.map → renderer-pn52dzZz.mjs.map} +1 -1
- package/dist/renderer-u9cmBuvM.mjs +5 -0
- package/dist/{renderer-CNpq7rL-.mjs → renderer-uER8kn7f.mjs} +3 -3
- package/dist/{renderer-CNpq7rL-.mjs.map → renderer-uER8kn7f.mjs.map} +1 -1
- package/dist/{renderer-sMFJtt_H.mjs → renderer-uzU6dsdR.mjs} +3 -3
- package/dist/{renderer-sMFJtt_H.mjs.map → renderer-uzU6dsdR.mjs.map} +1 -1
- package/dist/renderer-vH12jcpz.mjs +5 -0
- package/dist/{renderer-oBgCEqaM.mjs → renderer-yNWYqvvq.mjs} +4 -4
- package/dist/{renderer-oBgCEqaM.mjs.map → renderer-yNWYqvvq.mjs.map} +1 -1
- package/dist/{renderer-Dy1xQOTu.mjs → renderer-zLi2qFGT.mjs} +4 -4
- package/dist/{renderer-Dy1xQOTu.mjs.map → renderer-zLi2qFGT.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-DWRjjeUg.mjs → renderers-CP8CFWDs-BufiCyn7.mjs} +4 -4
- package/dist/{renderers-CP8CFWDs-DWRjjeUg.mjs.map → renderers-CP8CFWDs-BufiCyn7.mjs.map} +1 -1
- package/dist/sam/index.d.mts +3 -3
- package/dist/sam/index.mjs +1 -1
- package/dist/signals/index.d.mts +7 -7
- package/dist/signals/index.mjs +8 -8
- package/dist/{signals-BfJ1aqpT.mjs → signals-tiho_9fp.mjs} +4 -4
- package/dist/{signals-BfJ1aqpT.mjs.map → signals-tiho_9fp.mjs.map} +1 -1
- package/dist/{src-BU6vm9sP-DFJ3phW0.mjs → src-BU6vm9sP-DdTHmCr4.mjs} +3 -3
- package/dist/{src-BU6vm9sP-DFJ3phW0.mjs.map → src-BU6vm9sP-DdTHmCr4.mjs.map} +1 -1
- package/dist/{src-D7M8VTzv.mjs → src-DrP7fGJX.mjs} +41 -16
- package/dist/{src-D7M8VTzv.mjs.map → src-DrP7fGJX.mjs.map} +1 -1
- package/dist/storage/index.d.mts +206 -0
- package/dist/storage/index.d.mts.map +1 -0
- package/dist/storage/index.mjs +3 -0
- package/package.json +67 -59
- package/dist/audio-afTBdB3U.d.mts.map +0 -1
- package/dist/cloud-COid1Ipa.mjs.map +0 -1
- package/dist/dist-B-OPY7Cs.mjs.map +0 -1
- package/dist/dist-BSqeChht.mjs.map +0 -1
- package/dist/index-BNClElng.d.mts.map +0 -1
- package/dist/index-CTv9ZieD.d.mts.map +0 -1
- package/dist/index-CdCrae-I.d.mts.map +0 -1
- package/dist/index-Fliv2Z-w.d.mts.map +0 -1
- package/dist/index-gOVtTm-P.d.mts.map +0 -1
- package/dist/preview-BUtt481A.mjs.map +0 -1
- package/dist/preview-engine/chunk-5SLBE2FX.mjs +0 -1
- package/dist/preview-engine/chunk-74J4DJQA.mjs +0 -1
- package/dist/preview-engine/chunk-KIPXBOYG.mjs +0 -1974
- package/dist/preview-engine/chunk-P4Y3PMJF.mjs +0 -1
- package/dist/preview-engine/chunk-SE2C623Z.mjs +0 -5
- package/dist/preview-engine/chunk-UKZVUYB6.mjs +0 -483
- package/dist/preview-engine/renderers-PSBTV2DO.mjs +0 -228
- package/dist/preview-engine/renderers-TEKHQHCL.mjs +0 -1
- package/dist/preview-engine/renderers-U3RLYFCN.mjs +0 -1
- package/dist/preview-engine/renderers-V5HM6PZ2.mjs +0 -1
- package/dist/preview-engine/renderers-ZGX3A3QZ.mjs +0 -1
- package/dist/program-Cvv_nb9T.mjs.map +0 -1
- package/dist/renderer--RJepuOy.mjs +0 -5
- package/dist/renderer-B1U6YRRV.d.mts +0 -117
- package/dist/renderer-B1U6YRRV.d.mts.map +0 -1
- package/dist/renderer-B4NFnaty.mjs +0 -5
- package/dist/renderer-B6g4ts0e.mjs +0 -5
- package/dist/renderer-BGoAr-tl.mjs +0 -5
- package/dist/renderer-BSOdBgdE.mjs +0 -5
- package/dist/renderer-BU6O0fpM.mjs +0 -5
- package/dist/renderer-BZ97iidG.mjs +0 -5
- package/dist/renderer-B_Klh1VT.mjs +0 -5
- package/dist/renderer-BaWQM1y-.mjs +0 -5
- package/dist/renderer-Bc0jvAj0.mjs +0 -5
- package/dist/renderer-Bd-NuU3M.mjs +0 -3
- package/dist/renderer-Bm077kZ6.mjs +0 -5
- package/dist/renderer-BtzE_e_Y.mjs +0 -5
- package/dist/renderer-C225eCAo.mjs +0 -5
- package/dist/renderer-CC4fhNup.mjs +0 -3
- package/dist/renderer-CLXdR4vz.mjs +0 -5
- package/dist/renderer-CszM8B3C.mjs +0 -5
- package/dist/renderer-Ctp8ZYfk.mjs +0 -5
- package/dist/renderer-CxQdSp8I.mjs +0 -5
- package/dist/renderer-D3YbHjRG.mjs.map +0 -1
- package/dist/renderer-D4GMRtDd.mjs +0 -6
- package/dist/renderer-DEsGIvTZ.mjs +0 -5
- package/dist/renderer-DIaUQ0EP.mjs +0 -5
- package/dist/renderer-DLjqcNzQ.mjs +0 -5
- package/dist/renderer-DMuQZa51.mjs +0 -5
- package/dist/renderer-DOgi2aF2.mjs +0 -5
- package/dist/renderer-DSh7cvi4.mjs +0 -5
- package/dist/renderer-DV1LVBBP.mjs +0 -5
- package/dist/renderer-DaLy1dFA.mjs.map +0 -1
- package/dist/renderer-Dhrj2bJz.mjs +0 -5
- package/dist/renderer-DoFUu1R4.mjs +0 -5
- package/dist/renderer-DsydX3cx.mjs +0 -5
- package/dist/renderer-DxVSoeYi.mjs +0 -5
- package/dist/renderer-Nc9bHb0n.mjs +0 -5
- package/dist/renderer-TFaSD2Db.mjs +0 -5
- package/dist/renderer-Z61ctppe.mjs +0 -5
- package/dist/renderer-awXf3sNS.mjs +0 -5
- package/dist/renderer-cHT28oYI.mjs +0 -5
- package/dist/renderer-g7Y3bFot.mjs +0 -5
- package/dist/renderer-qVv0OzVc.mjs +0 -5
- /package/dist/{chunk-W71TSjRM.mjs → chunk-DOL2i2sR.mjs} +0 -0
- /package/dist/{renderer-B6rZUBwE.mjs → renderer-Co2YqWX0.mjs} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Bt as getMediaType, It as getActiveMediaMetadata, Rn as updateClockSignals, Xt as isSignal, bn as resolveMediaMimeType, en as mediaSourceIsHold, p as DEFAULT_DURATION_MS, rn as mediaSourceTime, tn as mediaSourceRange } from "./dist-
|
|
2
|
-
import { f as webgpuRegistry, t as audioRegistry } from "./renderer-
|
|
3
|
-
import { A as emojiGraphemes,
|
|
1
|
+
import { Bt as getMediaType, It as getActiveMediaMetadata, Rn as updateClockSignals, Xt as isSignal, bn as resolveMediaMimeType, en as mediaSourceIsHold, p as DEFAULT_DURATION_MS, rn as mediaSourceTime, tn as mediaSourceRange } from "./dist-C8XSqfTx.mjs";
|
|
2
|
+
import { f as webgpuRegistry, t as audioRegistry } from "./renderer-BuvKGwk3.mjs";
|
|
3
|
+
import { A as emojiGraphemes, C as drawGifNode, D as drawSignalNode, E as drawParagraphNode, Hn as signalRegistry, I as getRegisteredFontSource, O as drawSvgNode, P as getHeadlessFontPath, S as drawCaptionNode, T as drawLottieNode, ft as GetFontAssetUrl, g as WebGPUAudioProcessor, k as drawVideoNode, m as SlugGeometry, nt as resolveInputUrl, ot as shaderStore, p as SlugFontCache, pt as resolveMediaSourceUrl, tt as registerHeadlessFont, w as drawImageNode, z as inputStore } from "./dist-DtPPPsZV.mjs";
|
|
4
4
|
import { AudioSampleSink } from "mediabunny";
|
|
5
5
|
|
|
6
6
|
//#region ../renderers/dist/index.mjs
|
|
@@ -1082,42 +1082,54 @@ async function decodeAudioSource(url) {
|
|
|
1082
1082
|
*/
|
|
1083
1083
|
const DECODE_PREROLL_SEC = .5;
|
|
1084
1084
|
/**
|
|
1085
|
+
* A source this runtime can't decode at all (a codec WebCodecs lacks, in a
|
|
1086
|
+
* worker without AudioContext). Thrown, not mixed as silence, so the caller
|
|
1087
|
+
* can mix where it can be decoded.
|
|
1088
|
+
*/
|
|
1089
|
+
var AudioDecodeUnavailable = class extends Error {
|
|
1090
|
+
name = "AudioDecodeUnavailable";
|
|
1091
|
+
};
|
|
1092
|
+
/**
|
|
1093
|
+
* The browser's whole-file decoder, for codecs WebCodecs can't decode
|
|
1094
|
+
* (mediabunny reads byte ranges and decodes with WebCodecs first).
|
|
1095
|
+
*/
|
|
1096
|
+
async function decodeWithAudioContext(url) {
|
|
1097
|
+
const AudioContextClass = window.AudioContext || window.webkitAudioContext;
|
|
1098
|
+
if (!AudioContextClass) throw new AudioDecodeUnavailable(`No decoder here for ${url}: WebCodecs can't decode it and there is no AudioContext (a worker).`);
|
|
1099
|
+
const audioCtx = new AudioContextClass();
|
|
1100
|
+
try {
|
|
1101
|
+
const response = await fetch(resolveInputUrl(url, false));
|
|
1102
|
+
mediaLogger.debug(`[AudioExtractor] Fetch response status for ${url}: ${response.status} (${response.statusText})`);
|
|
1103
|
+
if (!response.ok) throw new Error(`Failed to fetch audio source: ${response.statusText}`);
|
|
1104
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
1105
|
+
mediaLogger.debug(`[AudioExtractor] Fetched ${arrayBuffer.byteLength} bytes. Decoding audio data...`);
|
|
1106
|
+
const audioBuffer = await audioCtx.decodeAudioData(arrayBuffer);
|
|
1107
|
+
mediaLogger.debug(`[AudioExtractor] Decoded successfully: ${audioBuffer.numberOfChannels} channels, sampleRate: ${audioBuffer.sampleRate}, duration: ${audioBuffer.duration}s`);
|
|
1108
|
+
const channels = [];
|
|
1109
|
+
for (let c = 0; c < audioBuffer.numberOfChannels; c++) channels.push(new Float32Array(audioBuffer.getChannelData(c)));
|
|
1110
|
+
return {
|
|
1111
|
+
channels,
|
|
1112
|
+
sampleRate: audioBuffer.sampleRate,
|
|
1113
|
+
startIndex: 0,
|
|
1114
|
+
validFromSec: 0,
|
|
1115
|
+
validToSec: Number.POSITIVE_INFINITY
|
|
1116
|
+
};
|
|
1117
|
+
} finally {
|
|
1118
|
+
audioCtx.close();
|
|
1119
|
+
mediaLogger.debug(`[AudioExtractor] AudioContext closed for ${url}`);
|
|
1120
|
+
}
|
|
1121
|
+
}
|
|
1122
|
+
/**
|
|
1085
1123
|
* Decodes [range.startSec, range.endSec) of a source (the whole file without
|
|
1086
1124
|
* a range), so a short clip from a long file decodes only what it plays.
|
|
1087
1125
|
*/
|
|
1088
1126
|
async function decodeAudioRange(url, range) {
|
|
1089
1127
|
mediaLogger.debug(`[AudioExtractor] decodeAudioSource started for url: ${url}`);
|
|
1090
1128
|
try {
|
|
1091
|
-
|
|
1092
|
-
mediaLogger.debug(`[AudioExtractor] Browser detected. Fetching arrayBuffer for ${url}...`);
|
|
1093
|
-
const AudioContextClass = window.AudioContext || window.webkitAudioContext;
|
|
1094
|
-
if (!AudioContextClass) throw new Error("AudioContext is not supported in this browser");
|
|
1095
|
-
const audioCtx = new AudioContextClass();
|
|
1096
|
-
try {
|
|
1097
|
-
const response = await fetch(url);
|
|
1098
|
-
mediaLogger.debug(`[AudioExtractor] Fetch response status for ${url}: ${response.status} (${response.statusText})`);
|
|
1099
|
-
if (!response.ok) throw new Error(`Failed to fetch audio source: ${response.statusText}`);
|
|
1100
|
-
const arrayBuffer = await response.arrayBuffer();
|
|
1101
|
-
mediaLogger.debug(`[AudioExtractor] Fetched ${arrayBuffer.byteLength} bytes. Decoding audio data...`);
|
|
1102
|
-
const audioBuffer = await audioCtx.decodeAudioData(arrayBuffer);
|
|
1103
|
-
mediaLogger.debug(`[AudioExtractor] Decoded successfully: ${audioBuffer.numberOfChannels} channels, sampleRate: ${audioBuffer.sampleRate}, duration: ${audioBuffer.duration}s`);
|
|
1104
|
-
const channels = [];
|
|
1105
|
-
for (let c = 0; c < audioBuffer.numberOfChannels; c++) channels.push(new Float32Array(audioBuffer.getChannelData(c)));
|
|
1106
|
-
return {
|
|
1107
|
-
channels,
|
|
1108
|
-
sampleRate: audioBuffer.sampleRate,
|
|
1109
|
-
startIndex: 0,
|
|
1110
|
-
validFromSec: 0,
|
|
1111
|
-
validToSec: Number.POSITIVE_INFINITY
|
|
1112
|
-
};
|
|
1113
|
-
} finally {
|
|
1114
|
-
audioCtx.close();
|
|
1115
|
-
mediaLogger.debug(`[AudioExtractor] AudioContext closed for ${url}`);
|
|
1116
|
-
}
|
|
1117
|
-
}
|
|
1129
|
+
const isBrowser = !(typeof process !== "undefined" && process.versions?.node);
|
|
1118
1130
|
let inputAcquired = false;
|
|
1119
1131
|
try {
|
|
1120
|
-
mediaLogger.debug(`[AudioExtractor]
|
|
1132
|
+
mediaLogger.debug(`[AudioExtractor] Acquiring from inputStore for ${url}...`);
|
|
1121
1133
|
const input = await inputStore.acquire(url);
|
|
1122
1134
|
inputAcquired = true;
|
|
1123
1135
|
mediaLogger.debug(`[AudioExtractor] inputStore acquired. Retrieving primary audio track...`);
|
|
@@ -1208,6 +1220,7 @@ async function decodeAudioRange(url, range) {
|
|
|
1208
1220
|
};
|
|
1209
1221
|
} catch (err) {
|
|
1210
1222
|
if (err instanceof Error && err.message.includes("Cannot open local media file")) throw err;
|
|
1223
|
+
if (isBrowser) return decodeWithAudioContext(url);
|
|
1211
1224
|
if (typeof process !== "undefined" && process.versions?.node) try {
|
|
1212
1225
|
const { execFileSync } = await import("node:child_process");
|
|
1213
1226
|
const ffStartIndex = range ? Math.round(Math.max(0, range.startSec) * 48e3) : 0;
|
|
@@ -1253,7 +1266,7 @@ async function decodeAudioRange(url, range) {
|
|
|
1253
1266
|
if (inputAcquired) inputStore.release(url);
|
|
1254
1267
|
}
|
|
1255
1268
|
} catch (err) {
|
|
1256
|
-
if (err instanceof Error && err.message.includes("Cannot open local media file")) throw err;
|
|
1269
|
+
if (err instanceof AudioDecodeUnavailable || err instanceof Error && err.message.includes("Cannot open local media file")) throw err;
|
|
1257
1270
|
mediaLogger.error({ err }, `[AudioExtractor] Failed to decode source ${url}`);
|
|
1258
1271
|
return null;
|
|
1259
1272
|
}
|
|
@@ -1278,13 +1291,13 @@ async function resampleMappedPCM(input, sourceRate, outputRate, length, inputSta
|
|
|
1278
1291
|
* `trimOffsetSamples` is a whole-file index; `inputStartIndex` is the
|
|
1279
1292
|
* whole-file index of `inputChannel[0]` when it holds only a range.
|
|
1280
1293
|
*/
|
|
1281
|
-
async function resampleAndStretchPCM(inputChannel, sourceSampleRate, targetSampleRate, speed, outputLength, trimOffsetSamples, inputStartIndex = 0) {
|
|
1294
|
+
async function resampleAndStretchPCM(inputChannel, sourceSampleRate, targetSampleRate, speed, outputLength, trimOffsetSamples, inputStartIndex = 0, firstOutputSample = 0) {
|
|
1282
1295
|
const output = new Float32Array(outputLength);
|
|
1283
1296
|
const factor = sourceSampleRate / targetSampleRate * speed;
|
|
1284
1297
|
const YIELD_INTERVAL = 1e5;
|
|
1285
1298
|
for (let i = 0; i < outputLength; i++) {
|
|
1286
1299
|
if (i > 0 && i % YIELD_INTERVAL === 0) await yieldToMain();
|
|
1287
|
-
const srcIndex = trimOffsetSamples + i * factor - inputStartIndex;
|
|
1300
|
+
const srcIndex = trimOffsetSamples + (firstOutputSample + i) * factor - inputStartIndex;
|
|
1288
1301
|
const indexFloor = Math.floor(srcIndex);
|
|
1289
1302
|
const indexCeil = Math.ceil(srcIndex);
|
|
1290
1303
|
if (indexFloor < 0) {
|
|
@@ -1304,6 +1317,19 @@ const RANGE_MARGIN_SEC = .05;
|
|
|
1304
1317
|
/** Processors that only scale what is already there, so silence stays silence. */
|
|
1305
1318
|
const GAIN_ONLY_PROCESSORS = new Set(["Compositor", "CompositorLayer"]);
|
|
1306
1319
|
/** Adds `src` into `dest` starting at `destStart` (which may be negative). */
|
|
1320
|
+
/**
|
|
1321
|
+
* Which of a layer's gain props (`volume`, `muted`) it keys. Those the mix
|
|
1322
|
+
* leaves to the layer's audio processor, which reads them per sample; the
|
|
1323
|
+
* rest are applied as constants. Shared so both sides agree on the split.
|
|
1324
|
+
*/
|
|
1325
|
+
function keyedGain(operation) {
|
|
1326
|
+
const tracks = operation?.animation?.tracks ?? [];
|
|
1327
|
+
const keys = (prop) => tracks.some((t) => t.prop === prop && (t.keyframes?.length ?? 0) > 0);
|
|
1328
|
+
return {
|
|
1329
|
+
volume: keys("volume"),
|
|
1330
|
+
muted: keys("muted")
|
|
1331
|
+
};
|
|
1332
|
+
}
|
|
1307
1333
|
function addInto(dest, src, destStart) {
|
|
1308
1334
|
const from = Math.max(0, -destStart);
|
|
1309
1335
|
const to = Math.min(src.length, dest.length - destStart);
|
|
@@ -1339,6 +1365,22 @@ var MixBus = class {
|
|
|
1339
1365
|
for (let c = 0; c < 2; c++) addInto(dest[c], src[c], start);
|
|
1340
1366
|
}
|
|
1341
1367
|
};
|
|
1368
|
+
/**
|
|
1369
|
+
* The master stage, in place: `gain` (the automatic ceiling: a mix whose
|
|
1370
|
+
* summed tracks exceed -0.5 dB, 0.95, is scaled down smoothly), then soft
|
|
1371
|
+
* limiting and non-finite sanitation (transparent saturation instead of
|
|
1372
|
+
* harsh square-wave clipping).
|
|
1373
|
+
*/
|
|
1374
|
+
function applyMaster(channels, gain) {
|
|
1375
|
+
for (const channel of channels) for (let i = 0; i < channel.length; i++) {
|
|
1376
|
+
const v = (channel[i] ?? 0) * gain;
|
|
1377
|
+
channel[i] = Number.isFinite(v) ? Math.tanh(v) : 0;
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1380
|
+
/** The master stage's gain for a mix whose loudest sample is `peak`. */
|
|
1381
|
+
function masterGain(peak) {
|
|
1382
|
+
return peak > .95 ? .92 / peak : 1;
|
|
1383
|
+
}
|
|
1342
1384
|
/** A clip's file name for progress, without paths or signed-URL queries. */
|
|
1343
1385
|
function sourceLabel(url) {
|
|
1344
1386
|
if (url.startsWith("data:")) return "inline audio";
|
|
@@ -1359,10 +1401,19 @@ function decodeURIComponentSafe(s) {
|
|
|
1359
1401
|
async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device, renderId, options = {}) {
|
|
1360
1402
|
mediaLogger.debug(`[AudioExtractor] mixAudioTracks started. FPS: ${fps}, targetSampleRate: ${targetSampleRate}`);
|
|
1361
1403
|
await waitForDelayRender();
|
|
1404
|
+
if (device && !options.continue) WebGPUAudioProcessor.resetState(renderId ?? "global", device);
|
|
1362
1405
|
shaderStore.registerSignalsFromComposition(renderId, virtualMedia);
|
|
1363
1406
|
const durationMs = getActiveMediaMetadata(virtualMedia)?.durationMs || 1e3;
|
|
1364
1407
|
const totalDurationSec = durationMs / 1e3;
|
|
1365
1408
|
const totalTargetSamples = Math.ceil(totalDurationSec * targetSampleRate);
|
|
1409
|
+
const winStart = options.window ? Math.max(0, Math.round(options.window.startSec * targetSampleRate)) : 0;
|
|
1410
|
+
const winEnd = options.window ? Math.min(totalTargetSamples, Math.round(options.window.endSec * targetSampleRate)) : Number.POSITIVE_INFINITY;
|
|
1411
|
+
const outputSamples = options.window ? Math.max(0, winEnd - winStart) : totalTargetSamples;
|
|
1412
|
+
/** The part [lo, hi) of a node's local samples that the window covers. */
|
|
1413
|
+
const visible = (absStart, length) => ({
|
|
1414
|
+
lo: Math.max(0, winStart - absStart),
|
|
1415
|
+
hi: Math.min(length, winEnd - absStart)
|
|
1416
|
+
});
|
|
1366
1417
|
mediaLogger.debug(`[AudioExtractor] Composition total duration: ${durationMs}ms (${totalDurationSec}s). Total mixed samples to allocate: ${totalTargetSamples}`);
|
|
1367
1418
|
const decodedCache = /* @__PURE__ */ new Map();
|
|
1368
1419
|
const undecodable = /* @__PURE__ */ new Set();
|
|
@@ -1387,11 +1438,11 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1387
1438
|
ranges.push(decoded);
|
|
1388
1439
|
return decoded;
|
|
1389
1440
|
}
|
|
1390
|
-
async function mappedChannels(url, length, map, startFrame) {
|
|
1441
|
+
async function mappedChannels(url, length, map, startFrame, skip = 0) {
|
|
1391
1442
|
const left = new Float32Array(length), right = new Float32Array(length);
|
|
1392
1443
|
for (let offset = 0; offset < length;) {
|
|
1393
1444
|
let count = Math.min(length - offset, targetSampleRate * 2);
|
|
1394
|
-
const first = startFrame + offset / targetSampleRate * fps;
|
|
1445
|
+
const first = startFrame + (skip + offset) / targetSampleRate * fps;
|
|
1395
1446
|
let range = mediaSourceRange(map, first, first + (count - 1) / targetSampleRate * fps, fps);
|
|
1396
1447
|
while (range.max - range.min > 3 && count > 1) {
|
|
1397
1448
|
count = Math.max(1, Math.floor(count / 2));
|
|
@@ -1421,7 +1472,7 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1421
1472
|
audibleCache.set(node, audible);
|
|
1422
1473
|
return audible;
|
|
1423
1474
|
}
|
|
1424
|
-
async function traverse(node, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, inheritedDurationFrames, inheritedRemap) {
|
|
1475
|
+
async function traverse(node, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, inheritedDurationFrames, inheritedRemap, absStart = 0) {
|
|
1425
1476
|
if (!node || !isAudible(node)) return null;
|
|
1426
1477
|
const op = node.operation;
|
|
1427
1478
|
if (!op) {
|
|
@@ -1430,19 +1481,20 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1430
1481
|
const actualDurationFrames = inheritedRemap && inheritedDurationFrames !== null ? inheritedDurationFrames : inheritedDurationFrames !== null ? durationFrames > 0 ? Math.min(inheritedDurationFrames, durationFrames) : inheritedDurationFrames : durationFrames;
|
|
1431
1482
|
const localSamplesCount$1 = Math.ceil(actualDurationFrames / fps * targetSampleRate);
|
|
1432
1483
|
if (localSamplesCount$1 <= 0) return null;
|
|
1433
|
-
const
|
|
1484
|
+
const { lo: lo$1, hi: hi$1 } = visible(absStart, localSamplesCount$1);
|
|
1485
|
+
if (hi$1 <= lo$1) return null;
|
|
1486
|
+
const bus$1 = new MixBus(hi$1 - lo$1);
|
|
1434
1487
|
for (const child of node.children) {
|
|
1435
|
-
const
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
bus$1.add(childChannels, childStartSample);
|
|
1441
|
-
}
|
|
1488
|
+
const childOp = child.operation;
|
|
1489
|
+
const childStartFrame = childOp?.startFrame ?? childOp?.timeline?.startFrame ?? 0;
|
|
1490
|
+
const childStartSample = Math.round(childStartFrame / fps * targetSampleRate);
|
|
1491
|
+
const childChannels = await traverse(child, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, actualDurationFrames, inheritedRemap, absStart + childStartSample);
|
|
1492
|
+
if (childChannels) bus$1.add(childChannels, Math.max(childStartSample, lo$1) - lo$1);
|
|
1442
1493
|
}
|
|
1443
1494
|
return bus$1.channels;
|
|
1444
1495
|
}
|
|
1445
|
-
const
|
|
1496
|
+
const keyed = keyedGain(op);
|
|
1497
|
+
const volume = inheritedVolume * (keyed.volume ? 1 : op.volume ?? 1) * (op.opacity === 0 ? 0 : 1) * (!keyed.muted && op.muted ? 0 : 1);
|
|
1446
1498
|
const speedMultiplier = inheritedSpeed;
|
|
1447
1499
|
const nodeStartFrame = op.startFrame ?? op.timeline?.startFrame ?? 0;
|
|
1448
1500
|
const ownRemap = op.timeRemap;
|
|
@@ -1462,7 +1514,9 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1462
1514
|
const nodeActualDurationFrames = inheritedRemap && !ownRemap && inheritedDurationFrames !== null ? inheritedDurationFrames : inheritedDurationFrames !== null ? nodeDurationFrames > 0 ? Math.min(inheritedDurationFrames, nodeDurationFrames) : inheritedDurationFrames : nodeDurationFrames;
|
|
1463
1515
|
const localSamplesCount = Math.ceil(nodeActualDurationFrames / fps * targetSampleRate);
|
|
1464
1516
|
if (localSamplesCount <= 0) return null;
|
|
1465
|
-
const
|
|
1517
|
+
const { lo, hi } = visible(absStart, localSamplesCount);
|
|
1518
|
+
if (hi <= lo) return null;
|
|
1519
|
+
const bus = new MixBus(hi - lo);
|
|
1466
1520
|
const processSegment = async (seg, windowStartFrameOffset) => {
|
|
1467
1521
|
const segSeekSec = seg ? seg.startSec : 0;
|
|
1468
1522
|
const totalSeekSec = inheritedSeekSec + layerTrimSec + segSeekSec;
|
|
@@ -1480,28 +1534,32 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1480
1534
|
const effectiveTrimSec = Math.max(0, (Number(params.trimStartSec) || 0) + totalSeekSec);
|
|
1481
1535
|
const clipDurationSec = actualDurationFrames / fps;
|
|
1482
1536
|
const clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));
|
|
1483
|
-
const
|
|
1484
|
-
const
|
|
1537
|
+
const clipFrom = Math.max(segmentStartSample, lo);
|
|
1538
|
+
const count = Math.min(segmentStartSample + clipSamplesCount, hi) - clipFrom;
|
|
1539
|
+
const skip = clipFrom - segmentStartSample;
|
|
1540
|
+
const writeAt = clipFrom - lo;
|
|
1541
|
+
const mapped = remap && count > 0 ? await mappedChannels(params.sourceUrl, count, remap.map, remap.offsetFrames + windowStartFrameOffset, skip) : null;
|
|
1542
|
+
const decoded = !remap && count > 0 && segmentStartSample < localSamplesCount ? await getDecodedRange(params.sourceUrl, effectiveTrimSec + skip / targetSampleRate * finalSpeed, effectiveTrimSec + (skip + count) / targetSampleRate * finalSpeed + RANGE_MARGIN_SEC) : null;
|
|
1485
1543
|
if (mapped || decoded) {
|
|
1486
1544
|
let stretchedLeft;
|
|
1487
1545
|
let stretchedRight;
|
|
1488
1546
|
if (mapped) [stretchedLeft, stretchedRight] = mapped;
|
|
1489
1547
|
else if (decoded) {
|
|
1490
1548
|
const trimOffsetSamples = Math.round(effectiveTrimSec * decoded.sampleRate);
|
|
1491
|
-
stretchedLeft = await resampleAndStretchPCM(decoded.channels[0], decoded.sampleRate, targetSampleRate, finalSpeed,
|
|
1492
|
-
stretchedRight = decoded.channels.length > 1 ? await resampleAndStretchPCM(decoded.channels[1], decoded.sampleRate, targetSampleRate, finalSpeed,
|
|
1549
|
+
stretchedLeft = await resampleAndStretchPCM(decoded.channels[0], decoded.sampleRate, targetSampleRate, finalSpeed, count, trimOffsetSamples, decoded.startIndex, skip);
|
|
1550
|
+
stretchedRight = decoded.channels.length > 1 ? await resampleAndStretchPCM(decoded.channels[1], decoded.sampleRate, targetSampleRate, finalSpeed, count, trimOffsetSamples, decoded.startIndex, skip) : stretchedLeft;
|
|
1493
1551
|
} else throw new Error("No decoded audio");
|
|
1494
1552
|
const stretched = [stretchedLeft, stretchedRight];
|
|
1495
|
-
if (bus.canAdopt(stretched,
|
|
1553
|
+
if (bus.canAdopt(stretched, writeAt)) {
|
|
1496
1554
|
if (volume !== 1) {
|
|
1497
|
-
for (let i = 0; i <
|
|
1498
|
-
if (stretchedRight !== stretchedLeft) for (let i = 0; i <
|
|
1555
|
+
for (let i = 0; i < count; i++) stretchedLeft[i] *= volume;
|
|
1556
|
+
if (stretchedRight !== stretchedLeft) for (let i = 0; i < count; i++) stretchedRight[i] *= volume;
|
|
1499
1557
|
}
|
|
1500
1558
|
bus.channels = [stretchedLeft, stretchedRight === stretchedLeft ? stretchedLeft.slice() : stretchedRight];
|
|
1501
1559
|
} else {
|
|
1502
1560
|
const [localLeft, localRight] = bus.get();
|
|
1503
|
-
for (let i = 0; i <
|
|
1504
|
-
const outIndex =
|
|
1561
|
+
for (let i = 0; i < count; i++) {
|
|
1562
|
+
const outIndex = writeAt + i;
|
|
1505
1563
|
localLeft[outIndex] += stretchedLeft[i] * volume;
|
|
1506
1564
|
localRight[outIndex] += stretchedRight[i] * volume;
|
|
1507
1565
|
}
|
|
@@ -1519,27 +1577,35 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1519
1577
|
}
|
|
1520
1578
|
}
|
|
1521
1579
|
if (node.children) for (const child of node.children) {
|
|
1522
|
-
const
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
bus.add(childChannels, segmentStartSample + childStartSample);
|
|
1529
|
-
}
|
|
1580
|
+
const childOp = child.operation;
|
|
1581
|
+
const childStartFrame = childOp?.startFrame ?? childOp?.timeline?.startFrame ?? 0;
|
|
1582
|
+
const relativeStartFrame = op.op === "CompositorLayer" && childOp?.op === "CompositorLayer" ? childStartFrame - nodeStartFrame : childStartFrame;
|
|
1583
|
+
const childStart = segmentStartSample + Math.round(relativeStartFrame / fps * targetSampleRate);
|
|
1584
|
+
const childChannels = await traverse(child, totalSeekSec, totalClockFrames, volume, speedMultiplier, actualDurationFrames, remap, absStart + childStart);
|
|
1585
|
+
if (childChannels) bus.add(childChannels, Math.max(childStart, lo) - lo);
|
|
1530
1586
|
}
|
|
1531
1587
|
const pluginProcessor = audioRegistry.get(op.op);
|
|
1532
1588
|
if (pluginProcessor) try {
|
|
1533
1589
|
const clipDurationSec = actualDurationFrames / fps;
|
|
1534
1590
|
const clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1591
|
+
const from = Math.max(segmentStartSample, lo);
|
|
1592
|
+
const to = Math.min(segmentStartSample + clipSamplesCount, hi);
|
|
1593
|
+
const skip = from - segmentStartSample;
|
|
1594
|
+
if (to > from && segmentStartSample < localSamplesCount && segmentStartSample >= 0) {
|
|
1595
|
+
const slicedChannels = bus.get().map((ch) => ch.subarray(from - lo, to - lo));
|
|
1596
|
+
const layerClockFrames = op.op === "CompositorLayer" ? localClockFrames : 0;
|
|
1597
|
+
const skipSec = skip / targetSampleRate;
|
|
1598
|
+
const elapsedMs = ((totalClockFrames - layerClockFrames) / fps + totalSeekSec - layerTrimSec + skipSec) * 1e3;
|
|
1599
|
+
const durationMs$1 = getActiveMediaMetadata(node)?.durationMs ?? void 0;
|
|
1600
|
+
await pluginProcessor(slicedChannels, targetSampleRate, node, {
|
|
1601
|
+
device,
|
|
1602
|
+
frame: totalClockFrames + skipSec * fps,
|
|
1603
|
+
fps,
|
|
1604
|
+
renderId,
|
|
1605
|
+
elapsedMs,
|
|
1606
|
+
durationMs: durationMs$1
|
|
1607
|
+
});
|
|
1608
|
+
}
|
|
1543
1609
|
} catch (pluginErr) {
|
|
1544
1610
|
mediaLogger.error({ err: pluginErr }, `[AudioExtractor] Custom plugin for operation '${op.op}' failed`);
|
|
1545
1611
|
}
|
|
@@ -1575,7 +1641,7 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1575
1641
|
});
|
|
1576
1642
|
}
|
|
1577
1643
|
const rootChannels = await traverse(normalized, 0, 0, 1, 1, null);
|
|
1578
|
-
const mixedChannels = rootChannels?.every((ch) => ch.length ===
|
|
1644
|
+
const mixedChannels = rootChannels?.every((ch) => ch.length === outputSamples) && rootChannels[0] !== rootChannels[1] ? rootChannels : [new Float32Array(outputSamples), new Float32Array(outputSamples)];
|
|
1579
1645
|
const [outputLeft, outputRight] = mixedChannels;
|
|
1580
1646
|
if (rootChannels && mixedChannels !== rootChannels) for (let c = 0; c < 2; c++) {
|
|
1581
1647
|
const dest = mixedChannels[c];
|
|
@@ -1585,22 +1651,17 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1585
1651
|
}
|
|
1586
1652
|
decodedCache.clear();
|
|
1587
1653
|
let mixPeak = 0;
|
|
1588
|
-
for (let i = 0; i <
|
|
1654
|
+
for (let i = 0; i < outputSamples; i++) {
|
|
1589
1655
|
const l = Math.abs(outputLeft[i] ?? 0);
|
|
1590
1656
|
const r = Math.abs(outputRight[i] ?? 0);
|
|
1591
1657
|
if (l > mixPeak) mixPeak = l;
|
|
1592
1658
|
if (r > mixPeak) mixPeak = r;
|
|
1593
1659
|
}
|
|
1594
|
-
|
|
1595
|
-
for (let i = 0; i < totalTargetSamples; i++) {
|
|
1596
|
-
const l = (outputLeft[i] ?? 0) * autoGain;
|
|
1597
|
-
const r = (outputRight[i] ?? 0) * autoGain;
|
|
1598
|
-
outputLeft[i] = Number.isFinite(l) ? Math.tanh(l) : 0;
|
|
1599
|
-
outputRight[i] = Number.isFinite(r) ? Math.tanh(r) : 0;
|
|
1600
|
-
}
|
|
1660
|
+
if (options.master !== false) applyMaster(mixedChannels, masterGain(mixPeak));
|
|
1601
1661
|
return {
|
|
1602
1662
|
channels: mixedChannels,
|
|
1603
|
-
sampleRate: targetSampleRate
|
|
1663
|
+
sampleRate: targetSampleRate,
|
|
1664
|
+
peak: mixPeak
|
|
1604
1665
|
};
|
|
1605
1666
|
}
|
|
1606
1667
|
/** Resolve the source bound to a compositor layer, including effect wrappers. */
|
|
@@ -1647,5 +1708,5 @@ async function preflightMediaTime(root, fps) {
|
|
|
1647
1708
|
}
|
|
1648
1709
|
|
|
1649
1710
|
//#endregion
|
|
1650
|
-
export {
|
|
1651
|
-
//# sourceMappingURL=dist-
|
|
1711
|
+
export { preloadFont as _, mixAudioTracks as a, springCalculation as b, Easing as c, interpolate as d, mapBlendModeToSkia as f, preloadCompositionFonts as g, measureTextAsync as h, keyedGain as i, bezier as l, measureText as m, decodeAudioSource as n, preflightMediaTime as o, measureSpring as p, drawCompositionTree as r, resolveLayerDuration as s, compositionStateStore as t, computeStrokeRect as u, requiresIsolation as v, spring as y };
|
|
1712
|
+
//# sourceMappingURL=dist-CCrYOkcc.mjs.map
|