framefields 2.3.2 → 2.4.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 +24 -1
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-C7Kn5xBm.mjs → audio-CPApYcWF.mjs} +4 -4
- package/dist/{audio-C7Kn5xBm.mjs.map → audio-CPApYcWF.mjs.map} +1 -1
- package/dist/{audio-BNnEclHU.d.mts → audio-DHuEMOtQ.d.mts} +3 -3
- package/dist/{audio-BNnEclHU.d.mts.map → audio-DHuEMOtQ.d.mts.map} +1 -1
- package/dist/{dist-fjKpBYkc.mjs → dist-ClyC_d66.mjs} +9 -2
- package/dist/dist-ClyC_d66.mjs.map +1 -0
- package/dist/{dist-CPUIfrtw.mjs → dist-CrK3rmyN.mjs} +180 -58
- package/dist/dist-CrK3rmyN.mjs.map +1 -0
- package/dist/{dist-CturBK2Z.mjs → dist-CspOG4V1.mjs} +1210 -748
- package/dist/dist-CspOG4V1.mjs.map +1 -0
- package/dist/{dist-BY0bIWgr.mjs → dist-SB9qfAko.mjs} +2 -2
- package/dist/{dist-BY0bIWgr.mjs.map → dist-SB9qfAko.mjs.map} +1 -1
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +35 -35
- package/dist/{effects-CW1VgdI5.mjs → effects-DxylPSuI.mjs} +3 -3
- package/dist/{effects-CW1VgdI5.mjs.map → effects-DxylPSuI.mjs.map} +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-EgMNL8KE.mjs → fonts-CsMDfqv9.mjs} +2 -2
- package/dist/{fonts-EgMNL8KE.mjs.map → fonts-CsMDfqv9.mjs.map} +1 -1
- package/dist/{gpu-CN14e7Bi.mjs → gpu-DtT5I4ME.mjs} +2 -2
- package/dist/{gpu-CN14e7Bi.mjs.map → gpu-DtT5I4ME.mjs.map} +1 -1
- package/dist/{index-Cg2ptXcs.d.mts → index-B1XcyMm8.d.mts} +2 -2
- package/dist/{index-Cg2ptXcs.d.mts.map → index-B1XcyMm8.d.mts.map} +1 -1
- package/dist/{index-BU51pxZO.d.mts → index-B2Xesdug.d.mts} +4 -4
- package/dist/{index-BU51pxZO.d.mts.map → index-B2Xesdug.d.mts.map} +1 -1
- package/dist/{index-QmkcUL3W.d.mts → index-BxARm93R.d.mts} +2 -2
- package/dist/{index-QmkcUL3W.d.mts.map → index-BxARm93R.d.mts.map} +1 -1
- package/dist/{index-CeRv1KC0.d.mts → index-C0o3lLyA.d.mts} +3 -3
- package/dist/{index-CeRv1KC0.d.mts.map → index-C0o3lLyA.d.mts.map} +1 -1
- package/dist/{index-B3BwLHa6.d.mts → index-D-l-yCv6.d.mts} +3 -3
- package/dist/{index-B3BwLHa6.d.mts.map → index-D-l-yCv6.d.mts.map} +1 -1
- package/dist/{index-AdrZIWT0.d.mts → index-DujpgUUq.d.mts} +19 -2
- package/dist/index-DujpgUUq.d.mts.map +1 -0
- package/dist/index.d.mts +178 -10
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +488 -93
- package/dist/index.mjs.map +1 -1
- package/dist/preview/index.d.mts +2 -2
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-1sjnhHQL.mjs → preview-D2dMmokw.mjs} +2 -2
- package/dist/{preview-1sjnhHQL.mjs.map → preview-D2dMmokw.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/chunk-266DECPQ.mjs +1 -0
- package/dist/preview-engine/{chunk-SZW5J72T.mjs → chunk-2DDBSI75.mjs} +1 -1
- package/dist/preview-engine/{chunk-QXCY2ATH.mjs → chunk-2GIWWDE4.mjs} +1 -1
- package/dist/preview-engine/{chunk-U4JIFQRR.mjs → chunk-34ACEGNW.mjs} +1 -1
- package/dist/preview-engine/{chunk-AY7UX37L.mjs → chunk-3ACCCPBN.mjs} +1 -1
- package/dist/preview-engine/{chunk-VK2CVMWJ.mjs → chunk-5E5J4KT4.mjs} +1 -1
- package/dist/preview-engine/{chunk-T2FE5VOW.mjs → chunk-5RQHNB6Y.mjs} +1 -1
- package/dist/preview-engine/{chunk-TS3JI3BH.mjs → chunk-67SSYK7D.mjs} +1 -1
- package/dist/preview-engine/{chunk-PL4IH5V4.mjs → chunk-6K7US2WD.mjs} +1 -1
- package/dist/preview-engine/{chunk-PEWYB6WP.mjs → chunk-7LVOSEGN.mjs} +1 -1
- package/dist/preview-engine/chunk-7QJUC6YY.mjs +1525 -0
- package/dist/preview-engine/{chunk-PSRQA3QW.mjs → chunk-A5OVKZ52.mjs} +1 -1
- package/dist/preview-engine/{chunk-PXT52LEH.mjs → chunk-C6Z7H2RZ.mjs} +1 -1
- package/dist/preview-engine/chunk-CPFPY35C.mjs +1 -0
- package/dist/preview-engine/{chunk-7EPIRODI.mjs → chunk-DOCSX45C.mjs} +1 -1
- package/dist/preview-engine/{chunk-GSFN4WCH.mjs → chunk-FFGBUS76.mjs} +1 -1
- package/dist/preview-engine/{chunk-IR5DNNWR.mjs → chunk-FFMPC7QA.mjs} +1 -1
- package/dist/preview-engine/{chunk-IUPDOATX.mjs → chunk-FHKBALVI.mjs} +1 -1
- package/dist/preview-engine/{chunk-HE4R7EZM.mjs → chunk-G4J662EL.mjs} +1 -1
- package/dist/preview-engine/{chunk-5W4AFQP7.mjs → chunk-GNG4YH2W.mjs} +1 -1
- package/dist/preview-engine/{chunk-L6BH5J4P.mjs → chunk-GQLZXCW3.mjs} +1 -1
- package/dist/preview-engine/{chunk-EVXWDOCL.mjs → chunk-HDGFNBYK.mjs} +1 -1
- package/dist/preview-engine/{chunk-JXNG2ACR.mjs → chunk-HNNIVJ2K.mjs} +1 -1
- package/dist/preview-engine/{chunk-FU7AIAMM.mjs → chunk-HUKAC5MJ.mjs} +1 -1
- package/dist/preview-engine/{chunk-44CQSOYE.mjs → chunk-JX22B2FS.mjs} +1 -1
- package/dist/preview-engine/{chunk-DIGIQ5MJ.mjs → chunk-KAQUNOVB.mjs} +1 -1
- package/dist/preview-engine/{chunk-MLY5M7Y5.mjs → chunk-KT35IPCF.mjs} +1 -1
- package/dist/preview-engine/{chunk-VXS5SIEC.mjs → chunk-LIQA5OOU.mjs} +1 -1
- package/dist/preview-engine/{chunk-SGPRLTNF.mjs → chunk-LK3T65RB.mjs} +1 -1
- package/dist/preview-engine/{chunk-YQZOGEPZ.mjs → chunk-LLDIDE5Q.mjs} +1 -1
- package/dist/preview-engine/chunk-NNQUIVTE.mjs +5 -0
- package/dist/preview-engine/{chunk-5AUB4Y3L.mjs → chunk-NRAZV5OA.mjs} +1 -1
- package/dist/preview-engine/{chunk-VGZZSPDN.mjs → chunk-NTVDL3RS.mjs} +1 -1
- package/dist/preview-engine/{chunk-BSOJR4JU.mjs → chunk-O6NRIXS5.mjs} +1 -1
- package/dist/preview-engine/{chunk-OKH2VU2U.mjs → chunk-PZF6T7DM.mjs} +1 -1
- package/dist/preview-engine/{chunk-OJ2PKBXE.mjs → chunk-QJZKIY4H.mjs} +1 -1
- package/dist/preview-engine/{chunk-WFGJXCZT.mjs → chunk-R26SY5D4.mjs} +1 -1
- package/dist/preview-engine/{chunk-EYWPOCZW.mjs → chunk-RDP6QROU.mjs} +1 -1
- package/dist/preview-engine/{chunk-J2R5R7YY.mjs → chunk-RKVB47IA.mjs} +1 -1
- package/dist/preview-engine/{chunk-PAQNDZQB.mjs → chunk-SWXVITCQ.mjs} +1 -1
- package/dist/preview-engine/{chunk-KERW7QJ4.mjs → chunk-UZBVCYRY.mjs} +1 -1
- package/dist/preview-engine/{chunk-Q22PJXFJ.mjs → chunk-WACWOKEP.mjs} +1 -1
- package/dist/preview-engine/{chunk-AXHB4J37.mjs → chunk-WCZ5DKZ4.mjs} +1 -1
- package/dist/preview-engine/{chunk-WH5Q2NFN.mjs → chunk-WJJIISQJ.mjs} +1 -1
- package/dist/preview-engine/chunk-XDMZP3E2.mjs +1 -0
- package/dist/preview-engine/{chunk-7G3XIOP7.mjs → chunk-Z6UKUHPU.mjs} +1 -1
- package/dist/preview-engine/{chunk-WUKH7BD7.mjs → chunk-ZKPQGQE3.mjs} +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +32 -25
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/{renderers-2P6KXWEZ.mjs → renderers-3CXFGRE7.mjs} +1 -1
- package/dist/preview-engine/{renderers-KZWGSKRF.mjs → renderers-3FC3WCJN.mjs} +1 -1
- package/dist/preview-engine/renderers-3S2FM33K.mjs +1 -0
- package/dist/preview-engine/{renderers-5FQA2DP4.mjs → renderers-4AJWVIJG.mjs} +1 -1
- package/dist/preview-engine/renderers-53ZTBI3C.mjs +1 -0
- package/dist/preview-engine/renderers-5USBVCMQ.mjs +1 -0
- package/dist/preview-engine/renderers-65G6BLEA.mjs +1 -0
- package/dist/preview-engine/{renderers-PYWXELLG.mjs → renderers-6JZ4HYIU.mjs} +1 -1
- package/dist/preview-engine/{renderers-3GHEWWVX.mjs → renderers-75TL7RLS.mjs} +1 -1
- package/dist/preview-engine/{renderers-U6KY34TP.mjs → renderers-7CPYTCNW.mjs} +1 -1
- package/dist/preview-engine/renderers-7XU7BXE7.mjs +1 -0
- package/dist/preview-engine/{renderers-2VN3AH45.mjs → renderers-AZYJFJLO.mjs} +1 -1
- package/dist/preview-engine/{renderers-TR2V2HZ2.mjs → renderers-BDWVXYTW.mjs} +1 -1
- package/dist/preview-engine/renderers-BFXM32BC.mjs +1 -0
- package/dist/preview-engine/renderers-CDXHCWWK.mjs +1 -0
- package/dist/preview-engine/{renderers-N7FR54V2.mjs → renderers-CK3ZL3GM.mjs} +1 -1
- package/dist/preview-engine/renderers-CLUN7WU6.mjs +1 -0
- package/dist/preview-engine/renderers-DTB4HEXU.mjs +1 -0
- package/dist/preview-engine/renderers-EFKNRLYF.mjs +1 -0
- package/dist/preview-engine/{renderers-UPTJJE5F.mjs → renderers-FADYGSLK.mjs} +1 -1
- package/dist/preview-engine/{renderers-I5E2RSV4.mjs → renderers-FKH5S64C.mjs} +1 -1
- package/dist/preview-engine/{renderers-BSKZXITT.mjs → renderers-FM6A5YR4.mjs} +1 -1
- package/dist/preview-engine/renderers-G2K7ZA5O.mjs +1 -0
- package/dist/preview-engine/{renderers-D6T6IPER.mjs → renderers-GAIUTII6.mjs} +1 -1
- package/dist/preview-engine/renderers-GTUO5LIV.mjs +1 -0
- package/dist/preview-engine/{renderers-A6HM64UZ.mjs → renderers-GUPEJK3O.mjs} +1 -1
- package/dist/preview-engine/{renderers-IWQ3V6AJ.mjs → renderers-HSJIVP57.mjs} +1 -1
- package/dist/preview-engine/{renderers-4GRVAW2W.mjs → renderers-HZHEGONW.mjs} +1 -1
- package/dist/preview-engine/{renderers-NWHS7N2L.mjs → renderers-IHACBWXI.mjs} +1 -1
- package/dist/preview-engine/{renderers-3YCJOINH.mjs → renderers-IHRFEZNP.mjs} +1 -1
- package/dist/preview-engine/{renderers-A7VH3ON5.mjs → renderers-IJDQJEE5.mjs} +1 -1
- package/dist/preview-engine/{renderers-OT7D3BUA.mjs → renderers-IO3BVVJ7.mjs} +1 -1
- package/dist/preview-engine/renderers-IR772VSN.mjs +1 -0
- package/dist/preview-engine/{renderers-EJWPVVQR.mjs → renderers-K7B5PQBT.mjs} +1 -1
- package/dist/preview-engine/renderers-L6TRJOXA.mjs +1 -0
- package/dist/preview-engine/{renderers-N7TS5562.mjs → renderers-LVLVJHOL.mjs} +1 -1
- package/dist/preview-engine/{renderers-FK72LKQC.mjs → renderers-MBSOKWKB.mjs} +1 -1
- package/dist/preview-engine/{renderers-NC64EQDE.mjs → renderers-N6H6RSF2.mjs} +1 -1
- package/dist/preview-engine/{renderers-ZHZMGMLN.mjs → renderers-NJLGPPX7.mjs} +1 -1
- package/dist/preview-engine/renderers-O5NFQYRQ.mjs +1 -0
- package/dist/preview-engine/renderers-O6V3OEKX.mjs +1 -0
- package/dist/preview-engine/renderers-OODA27UH.mjs +1 -0
- package/dist/preview-engine/{renderers-6CG7DBTB.mjs → renderers-R4WMM6IX.mjs} +1 -1
- package/dist/preview-engine/renderers-RIGW33ZI.mjs +1 -0
- package/dist/preview-engine/{renderers-RLHTNLRE.mjs → renderers-RKZGYWDG.mjs} +1 -1
- package/dist/preview-engine/renderers-RUZRBQ4K.mjs +1 -0
- package/dist/preview-engine/renderers-SKB2GGKS.mjs +1 -0
- package/dist/preview-engine/{renderers-6OGFUSH6.mjs → renderers-SW7FIEKO.mjs} +1 -1
- package/dist/preview-engine/renderers-T4D2TASM.mjs +1 -0
- package/dist/preview-engine/renderers-T74XV36Q.mjs +1 -0
- package/dist/preview-engine/{renderers-F55XFVMP.mjs → renderers-TCNPEANL.mjs} +1 -1
- package/dist/preview-engine/renderers-TOPW2UM3.mjs +1 -0
- package/dist/preview-engine/{renderers-5YEIUTVN.mjs → renderers-TY7DVI7E.mjs} +1 -1
- package/dist/preview-engine/{renderers-WP2LBR5U.mjs → renderers-U55KRIOV.mjs} +3 -3
- package/dist/preview-engine/{renderers-YMPXGYRU.mjs → renderers-UDOBX433.mjs} +1 -1
- package/dist/preview-engine/{renderers-CRRLV7IO.mjs → renderers-UMPOVFRA.mjs} +1 -1
- package/dist/preview-engine/renderers-UO5G3Y2G.mjs +1 -0
- package/dist/preview-engine/renderers-UOV7VOJJ.mjs +1 -0
- package/dist/preview-engine/{renderers-MON4QFRF.mjs → renderers-UWKSTSTA.mjs} +1 -1
- package/dist/preview-engine/renderers-VHPAOUTA.mjs +1 -0
- package/dist/preview-engine/{renderers-E76OKK66.mjs → renderers-WR6MKT5S.mjs} +1 -1
- package/dist/preview-engine/{renderers-MCECHPCL.mjs → renderers-XKHNBARD.mjs} +1 -1
- package/dist/preview-engine/renderers-YEQRQJFC.mjs +1 -0
- package/dist/preview-engine/{renderers-RJO6H4FC.mjs → renderers-YRZ3WODX.mjs} +1 -1
- package/dist/preview-engine/renderers-YUTFGVRY.mjs +1 -0
- package/dist/preview-engine/{renderers-3SRG77SC.mjs → renderers-YXOTRKPA.mjs} +1 -1
- package/dist/preview-engine/renderers-ZOU5ARVD.mjs +1 -0
- package/dist/preview-engine/renderers-ZW75LQTR.mjs +1 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{program-DtiNMTxO.mjs → program-C2cJayA1.mjs} +4 -4
- package/dist/{program-DtiNMTxO.mjs.map → program-C2cJayA1.mjs.map} +1 -1
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/{renderer-QMGrRiab.mjs → renderer--ruTGlPo.mjs} +3 -3
- package/dist/{renderer-QMGrRiab.mjs.map → renderer--ruTGlPo.mjs.map} +1 -1
- package/dist/{renderer-BAmGO6Hj.mjs → renderer-7y5Cj8rV.mjs} +3 -3
- package/dist/{renderer-BAmGO6Hj.mjs.map → renderer-7y5Cj8rV.mjs.map} +1 -1
- package/dist/{renderer-B48vtpou.mjs → renderer-92eLJg24.mjs} +4 -4
- package/dist/{renderer-B48vtpou.mjs.map → renderer-92eLJg24.mjs.map} +1 -1
- package/dist/{renderer-ButaUWLr.mjs → renderer-B0gPTXhe.mjs} +3 -3
- package/dist/{renderer-ButaUWLr.mjs.map → renderer-B0gPTXhe.mjs.map} +1 -1
- package/dist/{renderer-BaOC1Pd1.mjs → renderer-B1QREs7J.mjs} +3 -3
- package/dist/{renderer-BaOC1Pd1.mjs.map → renderer-B1QREs7J.mjs.map} +1 -1
- package/dist/{renderer-BI1nmIqA.mjs → renderer-B3e4LSE6.mjs} +3 -3
- package/dist/{renderer-BI1nmIqA.mjs.map → renderer-B3e4LSE6.mjs.map} +1 -1
- package/dist/{renderer-C4puWDLK.mjs → renderer-B4RpSd4A.mjs} +2 -2
- package/dist/{renderer-C4puWDLK.mjs.map → renderer-B4RpSd4A.mjs.map} +1 -1
- package/dist/renderer-BAhZeUUn.mjs +5 -0
- package/dist/{renderer-DmOewVsB.mjs → renderer-BBAbZfBl.mjs} +4 -4
- package/dist/{renderer-DmOewVsB.mjs.map → renderer-BBAbZfBl.mjs.map} +1 -1
- package/dist/{renderer-6QAlE1Mp.mjs → renderer-BDCy8NgT.mjs} +3 -3
- package/dist/{renderer-6QAlE1Mp.mjs.map → renderer-BDCy8NgT.mjs.map} +1 -1
- package/dist/renderer-BHAE_dKq.mjs +5 -0
- package/dist/{renderer-Rg1BFv8B.mjs → renderer-BMKFzfSQ.mjs} +3 -3
- package/dist/{renderer-Rg1BFv8B.mjs.map → renderer-BMKFzfSQ.mjs.map} +1 -1
- package/dist/renderer-BNYZY3FE.mjs +5 -0
- package/dist/{renderer-D8tdGi2P.mjs → renderer-BPixWnmY.mjs} +3 -3
- package/dist/{renderer-D8tdGi2P.mjs.map → renderer-BPixWnmY.mjs.map} +1 -1
- package/dist/renderer-BSvubMvI.mjs +5 -0
- package/dist/{renderer-C2Ff-9u_.mjs → renderer-BTd2sWDC.mjs} +3 -3
- package/dist/{renderer-C2Ff-9u_.mjs.map → renderer-BTd2sWDC.mjs.map} +1 -1
- package/dist/{renderer-YtRSM2cv.mjs → renderer-BTigwMQp.mjs} +3 -3
- package/dist/{renderer-YtRSM2cv.mjs.map → renderer-BTigwMQp.mjs.map} +1 -1
- package/dist/renderer-B_M_yhTc.mjs +5 -0
- package/dist/renderer-B_xSsTuy.mjs +5 -0
- package/dist/renderer-BePHurAU.mjs +5 -0
- package/dist/renderer-BfZquJrW.mjs +5 -0
- package/dist/{renderer-DNhOjz6C.mjs → renderer-Bi6W4RSn.mjs} +2 -2
- package/dist/{renderer-DNhOjz6C.mjs.map → renderer-Bi6W4RSn.mjs.map} +1 -1
- package/dist/{renderer--Da6pAJ4.mjs → renderer-BjCHW9Jp.mjs} +2 -2
- package/dist/{renderer-S6ez0leJ.mjs → renderer-BjvNEbML.mjs} +2 -2
- package/dist/{renderer-S6ez0leJ.mjs.map → renderer-BjvNEbML.mjs.map} +1 -1
- package/dist/{renderer-BFHgl-0f.mjs → renderer-BkWd4-YO.mjs} +2 -2
- package/dist/{renderer-BFHgl-0f.mjs.map → renderer-BkWd4-YO.mjs.map} +1 -1
- package/dist/{renderer-z3YOOR3k.mjs → renderer-Bkrk0M0r.mjs} +3 -3
- package/dist/{renderer-z3YOOR3k.mjs.map → renderer-Bkrk0M0r.mjs.map} +1 -1
- package/dist/{renderer-Kj9AhRCc.mjs → renderer-BljMOvry.mjs} +3 -3
- package/dist/{renderer-Kj9AhRCc.mjs.map → renderer-BljMOvry.mjs.map} +1 -1
- package/dist/renderer-BuY5ypB2.mjs +5 -0
- package/dist/renderer-BvOQgFHo.mjs +5 -0
- package/dist/{renderer-ITtBRR4o.mjs → renderer-BwpgDLYO.mjs} +3 -3
- package/dist/{renderer-ITtBRR4o.mjs.map → renderer-BwpgDLYO.mjs.map} +1 -1
- package/dist/{renderer-B3x-uogM.mjs → renderer-BwwZB2mt.mjs} +4 -4
- package/dist/{renderer-B3x-uogM.mjs.map → renderer-BwwZB2mt.mjs.map} +1 -1
- package/dist/{renderer-GlyeFl5R.mjs → renderer-ByCX4JYg.mjs} +3 -3
- package/dist/{renderer-GlyeFl5R.mjs.map → renderer-ByCX4JYg.mjs.map} +1 -1
- package/dist/{renderer-DDBmBmQN.mjs → renderer-C1E5Rt5q.mjs} +3 -3
- package/dist/{renderer-DDBmBmQN.mjs.map → renderer-C1E5Rt5q.mjs.map} +1 -1
- package/dist/renderer-C7NkSvUz.mjs +5 -0
- package/dist/{renderer-DvoPplvC.mjs → renderer-CCGzT6bX.mjs} +2 -2
- package/dist/{renderer-DJWQWN1E.mjs → renderer-CDOobs18.mjs} +3 -3
- package/dist/{renderer-DJWQWN1E.mjs.map → renderer-CDOobs18.mjs.map} +1 -1
- package/dist/{renderer-DacnnTjY.mjs → renderer-CDUxAtsk.mjs} +4 -4
- package/dist/{renderer-DacnnTjY.mjs.map → renderer-CDUxAtsk.mjs.map} +1 -1
- package/dist/renderer-CIuxV2q1.mjs +5 -0
- package/dist/{renderer-BlafvK-L.mjs → renderer-CJ4bxCld.mjs} +2 -2
- package/dist/renderer-CKp97tSQ.mjs +5 -0
- package/dist/{renderer-_-MCpvGq.mjs → renderer-CNb-DG00.mjs} +71 -71
- package/dist/{renderer-_-MCpvGq.mjs.map → renderer-CNb-DG00.mjs.map} +1 -1
- package/dist/{renderer-BYj8x8YM.mjs → renderer-CNuVJ4nG.mjs} +2 -2
- package/dist/{renderer-BYj8x8YM.mjs.map → renderer-CNuVJ4nG.mjs.map} +1 -1
- package/dist/renderer-CY89dTFR.mjs +5 -0
- package/dist/renderer-C_B_4Bl0.mjs +5 -0
- package/dist/{renderer-R0sJId_6.mjs → renderer-Cbsnj9vV.mjs} +3 -3
- package/dist/{renderer-R0sJId_6.mjs.map → renderer-Cbsnj9vV.mjs.map} +1 -1
- package/dist/{renderer-CBG6ewNf.mjs → renderer-CcoUNzlQ.mjs} +3 -3
- package/dist/{renderer-CBG6ewNf.mjs.map → renderer-CcoUNzlQ.mjs.map} +1 -1
- package/dist/renderer-Cd87JOjP.mjs +5 -0
- package/dist/{renderer-CbNW0KHh.mjs → renderer-CeiCJCg4.mjs} +3 -3
- package/dist/{renderer-CbNW0KHh.mjs.map → renderer-CeiCJCg4.mjs.map} +1 -1
- package/dist/renderer-Cev6orIK.mjs +6 -0
- package/dist/renderer-Cewf6UPh.mjs +5 -0
- package/dist/renderer-CnHsMLIv.mjs +5 -0
- package/dist/renderer-CoxuAr7b.mjs +5 -0
- package/dist/{renderer-BqSiWRoD.mjs → renderer-CqtIbe5n.mjs} +2 -2
- package/dist/{renderer-BqSiWRoD.mjs.map → renderer-CqtIbe5n.mjs.map} +1 -1
- package/dist/renderer-CrdG7trA.mjs +5 -0
- package/dist/{renderer-D-eTVnDS.mjs → renderer-Csss5GFQ.mjs} +2 -2
- package/dist/{renderer-D-eTVnDS.mjs.map → renderer-Csss5GFQ.mjs.map} +1 -1
- package/dist/renderer-Cu5MFgbk.mjs +5 -0
- package/dist/renderer-CuOjhtoo.mjs +5 -0
- package/dist/{renderer-Mdyv_W8K.mjs → renderer-Cv4lchUP.mjs} +3 -3
- package/dist/{renderer-Mdyv_W8K.mjs.map → renderer-Cv4lchUP.mjs.map} +1 -1
- package/dist/{renderer-CJwgsecF.mjs → renderer-Cw6Sagih.mjs} +3 -3
- package/dist/{renderer-CJwgsecF.mjs.map → renderer-Cw6Sagih.mjs.map} +1 -1
- package/dist/{renderer-DlESyfg7.d.mts → renderer-CxqPeATd.d.mts} +2 -2
- package/dist/{renderer-DlESyfg7.d.mts.map → renderer-CxqPeATd.d.mts.map} +1 -1
- package/dist/{renderer-DYo_a5-8.mjs → renderer-CzRqzp8P.mjs} +3 -3
- package/dist/{renderer-DYo_a5-8.mjs.map → renderer-CzRqzp8P.mjs.map} +1 -1
- package/dist/{renderer-BmWH4dK1.mjs → renderer-Czxgaygb.mjs} +8 -7
- package/dist/{renderer-BmWH4dK1.mjs.map → renderer-Czxgaygb.mjs.map} +1 -1
- package/dist/{renderer-CgEMtLOL.mjs → renderer-D0vom99O.mjs} +2 -2
- package/dist/{renderer-CgEMtLOL.mjs.map → renderer-D0vom99O.mjs.map} +1 -1
- package/dist/{renderer-BebePsG7.mjs → renderer-D2-V9nQq.mjs} +3 -3
- package/dist/{renderer-BebePsG7.mjs.map → renderer-D2-V9nQq.mjs.map} +1 -1
- package/dist/renderer-D2_0g6Oi.mjs +5 -0
- package/dist/renderer-D62FwolD.mjs +5 -0
- package/dist/{renderer-CMzd3BrW.mjs → renderer-D6BXR7P4.mjs} +2 -2
- package/dist/{renderer-CMzd3BrW.mjs.map → renderer-D6BXR7P4.mjs.map} +1 -1
- package/dist/renderer-DDNY9N7I.mjs +5 -0
- package/dist/{renderer-MS70wrQB.mjs → renderer-DFJQ6v0F.mjs} +2 -2
- package/dist/{renderer-MS70wrQB.mjs.map → renderer-DFJQ6v0F.mjs.map} +1 -1
- package/dist/renderer-DF_ONJ3v.mjs +5 -0
- package/dist/{renderer-DjPC9l3w.mjs → renderer-DILUmb-e.mjs} +3 -3
- package/dist/{renderer-DjPC9l3w.mjs.map → renderer-DILUmb-e.mjs.map} +1 -1
- package/dist/{renderer-Ch1rv1XP.mjs → renderer-DKfwlE4e.mjs} +3 -3
- package/dist/{renderer-Ch1rv1XP.mjs.map → renderer-DKfwlE4e.mjs.map} +1 -1
- package/dist/{renderer-B5Icb0XW.mjs → renderer-DScyMHpJ.mjs} +2 -2
- package/dist/{renderer-B5Icb0XW.mjs.map → renderer-DScyMHpJ.mjs.map} +1 -1
- package/dist/{renderer-Fm2brScz.mjs → renderer-DTw-W0Yz.mjs} +3 -3
- package/dist/{renderer-Fm2brScz.mjs.map → renderer-DTw-W0Yz.mjs.map} +1 -1
- package/dist/{renderer-dJcu7WqI.mjs → renderer-DZJJHCtm.mjs} +3 -3
- package/dist/{renderer-dJcu7WqI.mjs.map → renderer-DZJJHCtm.mjs.map} +1 -1
- package/dist/{renderer-B6c_Rk_2.mjs → renderer-DaSxr9fM.mjs} +3 -3
- package/dist/{renderer-B6c_Rk_2.mjs.map → renderer-DaSxr9fM.mjs.map} +1 -1
- package/dist/{renderer-BRWpn3dT.mjs → renderer-DaqWTx7s.mjs} +3 -3
- package/dist/{renderer-BRWpn3dT.mjs.map → renderer-DaqWTx7s.mjs.map} +1 -1
- package/dist/renderer-DbzrVHEE.mjs +5 -0
- package/dist/{renderer-CPNLkir4.mjs → renderer-DcBGYN3V.mjs} +3 -3
- package/dist/{renderer-CPNLkir4.mjs.map → renderer-DcBGYN3V.mjs.map} +1 -1
- package/dist/{renderer-BkXqFmNO.mjs → renderer-DjBCWxYy.mjs} +3 -3
- package/dist/{renderer-BkXqFmNO.mjs.map → renderer-DjBCWxYy.mjs.map} +1 -1
- package/dist/{renderer-D90PpIKG.mjs → renderer-DjwITRvg.mjs} +2 -2
- package/dist/renderer-DlYchp1v.mjs +5 -0
- package/dist/renderer-DqcUNP8J.mjs +5 -0
- package/dist/renderer-DqvFhEQj.mjs +5 -0
- package/dist/{renderer-ktpusVT2.mjs → renderer-DwVOxdzC.mjs} +3 -3
- package/dist/{renderer-ktpusVT2.mjs.map → renderer-DwVOxdzC.mjs.map} +1 -1
- package/dist/{renderer-_Fh9IBlE.mjs → renderer-Dwu_zfdL.mjs} +3 -3
- package/dist/{renderer-_Fh9IBlE.mjs.map → renderer-Dwu_zfdL.mjs.map} +1 -1
- package/dist/renderer-DxBav2bE.mjs +5 -0
- package/dist/{renderer-DS64UaYK.mjs → renderer-DyyIXLQK.mjs} +3 -3
- package/dist/{renderer-DS64UaYK.mjs.map → renderer-DyyIXLQK.mjs.map} +1 -1
- package/dist/{renderer-DqlvbOUt.mjs → renderer-DzSMeQBC.mjs} +3 -3
- package/dist/{renderer-DqlvbOUt.mjs.map → renderer-DzSMeQBC.mjs.map} +1 -1
- package/dist/{renderer-BXCZev4l.mjs → renderer-EZp_IIPK.mjs} +3 -3
- package/dist/{renderer-BXCZev4l.mjs.map → renderer-EZp_IIPK.mjs.map} +1 -1
- package/dist/{renderer-Bf4BdBtb.mjs → renderer-G1pMJH5C.mjs} +2 -2
- package/dist/{renderer-Bf4BdBtb.mjs.map → renderer-G1pMJH5C.mjs.map} +1 -1
- package/dist/renderer-GvSRoQje.mjs +5 -0
- package/dist/{renderer-DQtk282o.mjs → renderer-If8JOkBi.mjs} +2 -2
- package/dist/{renderer-DQtk282o.mjs.map → renderer-If8JOkBi.mjs.map} +1 -1
- package/dist/{renderer-CRYO5HQw.mjs → renderer-JvcR1vYI.mjs} +2 -2
- package/dist/{renderer-CRYO5HQw.mjs.map → renderer-JvcR1vYI.mjs.map} +1 -1
- package/dist/renderer-KP7Ita9g.mjs +5 -0
- package/dist/{renderer-Cz11KJmQ.mjs → renderer-NizuhHsH.mjs} +3 -3
- package/dist/{renderer-Cz11KJmQ.mjs.map → renderer-NizuhHsH.mjs.map} +1 -1
- package/dist/renderer-Pc8dyNXt.mjs +5 -0
- package/dist/{renderer-ClK7_Yzz.mjs → renderer-RDCax5CK.mjs} +3 -3
- package/dist/{renderer-ClK7_Yzz.mjs.map → renderer-RDCax5CK.mjs.map} +1 -1
- package/dist/{renderer-Bq9jXYJ5.mjs → renderer-UcdqCarR.mjs} +3 -3
- package/dist/{renderer-Bq9jXYJ5.mjs.map → renderer-UcdqCarR.mjs.map} +1 -1
- package/dist/{renderer-DL4oR40b.mjs → renderer-V5uEyDFz.mjs} +3 -3
- package/dist/{renderer-DL4oR40b.mjs.map → renderer-V5uEyDFz.mjs.map} +1 -1
- package/dist/{renderer-F410V727.mjs → renderer-X0eKSD7v.mjs} +3 -3
- package/dist/{renderer-F410V727.mjs.map → renderer-X0eKSD7v.mjs.map} +1 -1
- package/dist/{renderer-Dw1e5phO.mjs → renderer-Za4D9hej.mjs} +3 -3
- package/dist/{renderer-Dw1e5phO.mjs.map → renderer-Za4D9hej.mjs.map} +1 -1
- package/dist/{renderer-CczmOPAO.mjs → renderer-apeDrNXM.mjs} +3 -3
- package/dist/{renderer-CczmOPAO.mjs.map → renderer-apeDrNXM.mjs.map} +1 -1
- package/dist/renderer-ezRCmU09.mjs +3 -0
- package/dist/{renderer--S2cNYXS.mjs → renderer-gRMkQabv.mjs} +3 -3
- package/dist/{renderer--S2cNYXS.mjs.map → renderer-gRMkQabv.mjs.map} +1 -1
- package/dist/renderer-h6ev1ogx.mjs +5 -0
- package/dist/{renderer-8k-TR_Cy.mjs → renderer-rXgqgAjw.mjs} +3 -3
- package/dist/{renderer-8k-TR_Cy.mjs.map → renderer-rXgqgAjw.mjs.map} +1 -1
- package/dist/{renderer-DjwF10p2.mjs → renderer-ut1GqW89.mjs} +3 -3
- package/dist/{renderer-DjwF10p2.mjs.map → renderer-ut1GqW89.mjs.map} +1 -1
- package/dist/{renderer-w8LKBg_5.mjs → renderer-yyUpCeWb.mjs} +2 -2
- package/dist/{renderer-w8LKBg_5.mjs.map → renderer-yyUpCeWb.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-DXiR_PLR.mjs → renderers-CP8CFWDs-DzGXDs5p.mjs} +3 -3
- package/dist/{renderers-CP8CFWDs-DXiR_PLR.mjs.map → renderers-CP8CFWDs-DzGXDs5p.mjs.map} +1 -1
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +6 -6
- package/dist/{signals-DGRs6ddH.mjs → signals-C5nOrRmn.mjs} +3 -3
- package/dist/{signals-DGRs6ddH.mjs.map → signals-C5nOrRmn.mjs.map} +1 -1
- package/package.json +57 -56
- package/dist/dist-CPUIfrtw.mjs.map +0 -1
- package/dist/dist-CturBK2Z.mjs.map +0 -1
- package/dist/dist-fjKpBYkc.mjs.map +0 -1
- package/dist/index-AdrZIWT0.d.mts.map +0 -1
- package/dist/preview-engine/chunk-63SFBHEH.mjs +0 -1
- package/dist/preview-engine/chunk-7J2FWGVD.mjs +0 -1
- package/dist/preview-engine/chunk-M5HZPZHQ.mjs +0 -1
- package/dist/preview-engine/chunk-OG62XGCT.mjs +0 -5
- package/dist/preview-engine/chunk-U7NIY7UC.mjs +0 -1522
- package/dist/preview-engine/renderers-2H7YEUTD.mjs +0 -1
- package/dist/preview-engine/renderers-2ILG23ED.mjs +0 -1
- package/dist/preview-engine/renderers-3RC5FDWX.mjs +0 -1
- package/dist/preview-engine/renderers-6WH7NZCC.mjs +0 -1
- package/dist/preview-engine/renderers-7VJN5L3Z.mjs +0 -1
- package/dist/preview-engine/renderers-B7DSGUMI.mjs +0 -1
- package/dist/preview-engine/renderers-BFNJ7VCI.mjs +0 -1
- package/dist/preview-engine/renderers-CGYIDAVV.mjs +0 -1
- package/dist/preview-engine/renderers-DXHJAMZR.mjs +0 -1
- package/dist/preview-engine/renderers-ECA3P4ON.mjs +0 -1
- package/dist/preview-engine/renderers-FWGMNPYB.mjs +0 -1
- package/dist/preview-engine/renderers-HUW2ZMS3.mjs +0 -1
- package/dist/preview-engine/renderers-HXFRTIJD.mjs +0 -1
- package/dist/preview-engine/renderers-JHFT27YU.mjs +0 -1
- package/dist/preview-engine/renderers-NQXMYNSY.mjs +0 -1
- package/dist/preview-engine/renderers-ORAIXUL3.mjs +0 -1
- package/dist/preview-engine/renderers-Q4OFCMXI.mjs +0 -1
- package/dist/preview-engine/renderers-QVZVEYP5.mjs +0 -1
- package/dist/preview-engine/renderers-RKDPX5JU.mjs +0 -1
- package/dist/preview-engine/renderers-SBFF7JP5.mjs +0 -1
- package/dist/preview-engine/renderers-TAWT3ZSS.mjs +0 -1
- package/dist/preview-engine/renderers-UHTO6BQA.mjs +0 -1
- package/dist/preview-engine/renderers-UNK6I4JJ.mjs +0 -1
- package/dist/preview-engine/renderers-W773SBPV.mjs +0 -1
- package/dist/preview-engine/renderers-XHTMRXC5.mjs +0 -1
- package/dist/preview-engine/renderers-YECY2YFT.mjs +0 -1
- package/dist/preview-engine/renderers-YMN6QXK7.mjs +0 -1
- package/dist/preview-engine/renderers-ZANPE3OK.mjs +0 -1
- package/dist/preview-engine/renderers-ZHTX73PR.mjs +0 -1
- package/dist/preview-engine/renderers-ZJTRANIX.mjs +0 -1
- package/dist/renderer-1hypa-l7.mjs +0 -5
- package/dist/renderer-6D8M4DRu.mjs +0 -5
- package/dist/renderer-APrj6tdP.mjs +0 -5
- package/dist/renderer-BARst3ZD.mjs +0 -3
- package/dist/renderer-BF8wlbN1.mjs +0 -5
- package/dist/renderer-BOUcMCJB.mjs +0 -5
- package/dist/renderer-BSwn6KmG.mjs +0 -5
- package/dist/renderer-BUxvuC5A.mjs +0 -5
- package/dist/renderer-BYOsmJ8F.mjs +0 -5
- package/dist/renderer-Bp7LqSTt.mjs +0 -5
- package/dist/renderer-CD0amH_Q.mjs +0 -5
- package/dist/renderer-CIJGjrt7.mjs +0 -5
- package/dist/renderer-CNFTl94b.mjs +0 -5
- package/dist/renderer-CTJ0gHPS.mjs +0 -5
- package/dist/renderer-Cc3INn7w.mjs +0 -5
- package/dist/renderer-CeHh2lKY.mjs +0 -5
- package/dist/renderer-CfjwkQP4.mjs +0 -5
- package/dist/renderer-CiuOB-Md.mjs +0 -5
- package/dist/renderer-Cor66Y2X.mjs +0 -5
- package/dist/renderer-CtIM0LWe.mjs +0 -5
- package/dist/renderer-CyqgTsnx.mjs +0 -5
- package/dist/renderer-D2QG9yIW.mjs +0 -5
- package/dist/renderer-D2woU27o.mjs +0 -6
- package/dist/renderer-DAhDiQQY.mjs +0 -5
- package/dist/renderer-DIjxOQFi.mjs +0 -5
- package/dist/renderer-DRzalGhU.mjs +0 -5
- package/dist/renderer-DY6S1jWp.mjs +0 -5
- package/dist/renderer-DeW0KNQV.mjs +0 -5
- package/dist/renderer-DsVSVFkl.mjs +0 -5
- package/dist/renderer-DxvcIgEU.mjs +0 -5
- package/dist/renderer-F0MKqmol.mjs +0 -5
- package/dist/renderer-OkbovcAc.mjs +0 -5
- package/dist/renderer-QyBeWMEL.mjs +0 -5
- package/dist/renderer-hSh5IrDp.mjs +0 -5
- package/dist/renderer-puLncHft.mjs +0 -5
- package/dist/renderer-wnFCaw7j.mjs +0 -5
- package/dist/renderer-xjtlyGS1.mjs +0 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Jt as resolveMediaMimeType, Ot as getMediaType, Pt as isSignal, p as DEFAULT_DURATION_MS, sn as updateClockSignals, wt as getActiveMediaMetadata } from "./dist-ClyC_d66.mjs";
|
|
2
2
|
import { t as audioRegistry, u as webgpuRegistry } from "./renderer-BSitV56h.mjs";
|
|
3
|
-
import { C as drawGifNode, D as drawSignalNode, E as drawParagraphNode, L as inputStore, N as getHeadlessFontPath, Nn as signalRegistry, O as drawSvgNode, Q as registerHeadlessFont, S as drawCaptionNode, T as drawLottieNode, at as resolveMediaSourceUrl, et as shaderStore, it as GetFontAssetUrl, k as drawVideoNode, m as SlugGeometry, p as SlugFontCache, w as drawImageNode } from "./dist-
|
|
3
|
+
import { C as drawGifNode, D as drawSignalNode, E as drawParagraphNode, L as inputStore, N as getHeadlessFontPath, Nn as signalRegistry, O as drawSvgNode, Q as registerHeadlessFont, S as drawCaptionNode, T as drawLottieNode, at as resolveMediaSourceUrl, et as shaderStore, it as GetFontAssetUrl, k as drawVideoNode, m as SlugGeometry, p as SlugFontCache, w as drawImageNode } from "./dist-CspOG4V1.mjs";
|
|
4
4
|
import { AudioSampleSink } from "mediabunny";
|
|
5
5
|
|
|
6
6
|
//#region ../renderers/dist/index.mjs
|
|
@@ -1038,6 +1038,23 @@ const waitForDelayRender = async (timeoutMs = 3e4) => {
|
|
|
1038
1038
|
* Decodes all audio samples from a given source URL into raw Float32 mono/stereo channel buffers.
|
|
1039
1039
|
*/
|
|
1040
1040
|
async function decodeAudioSource(url) {
|
|
1041
|
+
const decoded = await decodeAudioRange(url);
|
|
1042
|
+
return decoded ? {
|
|
1043
|
+
channels: decoded.channels,
|
|
1044
|
+
sampleRate: decoded.sampleRate
|
|
1045
|
+
} : null;
|
|
1046
|
+
}
|
|
1047
|
+
/**
|
|
1048
|
+
* Seconds decoded ahead of a requested range: a compressed stream (MP3, AAC)
|
|
1049
|
+
* decoded from mid-file only matches a whole-file decode once the decoder has
|
|
1050
|
+
* warmed up on the packets before it.
|
|
1051
|
+
*/
|
|
1052
|
+
const DECODE_PREROLL_SEC = .5;
|
|
1053
|
+
/**
|
|
1054
|
+
* Decodes [range.startSec, range.endSec) of a source (the whole file without
|
|
1055
|
+
* a range), so a short clip from a long file decodes only what it plays.
|
|
1056
|
+
*/
|
|
1057
|
+
async function decodeAudioRange(url, range) {
|
|
1041
1058
|
mediaLogger.debug(`[AudioExtractor] decodeAudioSource started for url: ${url}`);
|
|
1042
1059
|
try {
|
|
1043
1060
|
if (typeof window !== "undefined" && typeof window.document !== "undefined" && !(typeof process !== "undefined" && process.versions && process.versions.node)) {
|
|
@@ -1057,7 +1074,10 @@ async function decodeAudioSource(url) {
|
|
|
1057
1074
|
for (let c = 0; c < audioBuffer.numberOfChannels; c++) channels.push(new Float32Array(audioBuffer.getChannelData(c)));
|
|
1058
1075
|
return {
|
|
1059
1076
|
channels,
|
|
1060
|
-
sampleRate: audioBuffer.sampleRate
|
|
1077
|
+
sampleRate: audioBuffer.sampleRate,
|
|
1078
|
+
startIndex: 0,
|
|
1079
|
+
validFromSec: 0,
|
|
1080
|
+
validToSec: Number.POSITIVE_INFINITY
|
|
1061
1081
|
};
|
|
1062
1082
|
} finally {
|
|
1063
1083
|
audioCtx.close();
|
|
@@ -1075,13 +1095,17 @@ async function decodeAudioSource(url) {
|
|
|
1075
1095
|
mediaLogger.warn(`[AudioExtractor] No primary audio track found in input for ${url}`);
|
|
1076
1096
|
return null;
|
|
1077
1097
|
}
|
|
1078
|
-
const
|
|
1098
|
+
const sink = new AudioSampleSink(track);
|
|
1099
|
+
const decodeFromSec = range ? Math.max(0, range.startSec - DECODE_PREROLL_SEC) : 0;
|
|
1100
|
+
const generator = sink.samples(decodeFromSec, range?.endSec);
|
|
1079
1101
|
const decodedPlanes = [];
|
|
1080
1102
|
let totalFrames = 0;
|
|
1081
1103
|
let sampleRate = 48e3;
|
|
1082
1104
|
let numChannels = 1;
|
|
1105
|
+
let firstTimestamp = null;
|
|
1083
1106
|
mediaLogger.debug(`[AudioExtractor] Starting mediabunny generator loop for ${url}...`);
|
|
1084
1107
|
for await (const sample of generator) {
|
|
1108
|
+
if (firstTimestamp === null) firstTimestamp = sample.timestamp;
|
|
1085
1109
|
sampleRate = sample.sampleRate;
|
|
1086
1110
|
numChannels = sample.numberOfChannels;
|
|
1087
1111
|
const sampleFrames = sample.numberOfFrames;
|
|
@@ -1127,23 +1151,51 @@ async function decodeAudioSource(url) {
|
|
|
1127
1151
|
}
|
|
1128
1152
|
mediaLogger.debug(`[AudioExtractor] Generator loop finished. Decoded total frames: ${totalFrames}`);
|
|
1129
1153
|
if (totalFrames === 0 || decodedPlanes.length === 0) return null;
|
|
1154
|
+
const channels = decodedPlanes.map((planes) => {
|
|
1155
|
+
const merged = new Float32Array(totalFrames);
|
|
1156
|
+
let offset = 0;
|
|
1157
|
+
for (const plane of planes) {
|
|
1158
|
+
merged.set(plane, offset);
|
|
1159
|
+
offset += plane.length;
|
|
1160
|
+
}
|
|
1161
|
+
return merged;
|
|
1162
|
+
});
|
|
1163
|
+
let startIndex = 0;
|
|
1164
|
+
if (decodeFromSec > 0 && firstTimestamp !== null) {
|
|
1165
|
+
const origin = await sink.getSample(0);
|
|
1166
|
+
const originTimestamp = origin?.timestamp ?? await track.getFirstTimestamp();
|
|
1167
|
+
origin?.close();
|
|
1168
|
+
startIndex = Math.round((firstTimestamp - originTimestamp) * sampleRate);
|
|
1169
|
+
}
|
|
1170
|
+
const endedEarly = !range || (startIndex + totalFrames) / sampleRate < range.endSec;
|
|
1130
1171
|
return {
|
|
1131
|
-
channels
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
offset += plane.length;
|
|
1137
|
-
}
|
|
1138
|
-
return merged;
|
|
1139
|
-
}),
|
|
1140
|
-
sampleRate
|
|
1172
|
+
channels,
|
|
1173
|
+
sampleRate,
|
|
1174
|
+
startIndex,
|
|
1175
|
+
validFromSec: decodeFromSec > 0 && range ? range.startSec : 0,
|
|
1176
|
+
validToSec: endedEarly || !range ? Number.POSITIVE_INFINITY : range.endSec
|
|
1141
1177
|
};
|
|
1142
1178
|
} catch (err) {
|
|
1143
1179
|
if (err instanceof Error && err.message.includes("Cannot open local media file")) throw err;
|
|
1144
1180
|
if (typeof process !== "undefined" && process.versions?.node) try {
|
|
1145
|
-
const {
|
|
1146
|
-
const
|
|
1181
|
+
const { execFileSync } = await import("node:child_process");
|
|
1182
|
+
const ffStartIndex = range ? Math.round(Math.max(0, range.startSec) * 48e3) : 0;
|
|
1183
|
+
const ffStartSec = ffStartIndex / 48e3;
|
|
1184
|
+
const stdout = execFileSync("ffmpeg", [
|
|
1185
|
+
"-v",
|
|
1186
|
+
"error",
|
|
1187
|
+
...ffStartSec > 0 ? ["-ss", String(ffStartSec)] : [],
|
|
1188
|
+
"-i",
|
|
1189
|
+
url,
|
|
1190
|
+
...range ? ["-t", String(range.endSec - ffStartSec)] : [],
|
|
1191
|
+
"-f",
|
|
1192
|
+
"f32le",
|
|
1193
|
+
"-ar",
|
|
1194
|
+
"48000",
|
|
1195
|
+
"-ac",
|
|
1196
|
+
"2",
|
|
1197
|
+
"pipe:1"
|
|
1198
|
+
], { maxBuffer: Number.POSITIVE_INFINITY });
|
|
1147
1199
|
const totalSamples = stdout.byteLength / 4;
|
|
1148
1200
|
const numFrames = totalSamples / 2;
|
|
1149
1201
|
const interleaved = new Float32Array(stdout.buffer, stdout.byteOffset, totalSamples);
|
|
@@ -1153,9 +1205,13 @@ async function decodeAudioSource(url) {
|
|
|
1153
1205
|
left[i] = interleaved[i * 2];
|
|
1154
1206
|
right[i] = interleaved[i * 2 + 1];
|
|
1155
1207
|
}
|
|
1208
|
+
const ffEndedEarly = !range || ffStartSec + numFrames / 48e3 < range.endSec;
|
|
1156
1209
|
return {
|
|
1157
1210
|
channels: [left, right],
|
|
1158
|
-
sampleRate: 48e3
|
|
1211
|
+
sampleRate: 48e3,
|
|
1212
|
+
startIndex: ffStartIndex,
|
|
1213
|
+
validFromSec: ffStartSec,
|
|
1214
|
+
validToSec: ffEndedEarly || !range ? Number.POSITIVE_INFINITY : range.endSec
|
|
1159
1215
|
};
|
|
1160
1216
|
} catch (ffmpegErr) {
|
|
1161
1217
|
mediaLogger.warn({ ffmpegErr }, `[AudioExtractor] ffmpeg fallback decode failed for ${url}`);
|
|
@@ -1173,14 +1229,16 @@ async function decodeAudioSource(url) {
|
|
|
1173
1229
|
}
|
|
1174
1230
|
/**
|
|
1175
1231
|
* Resamples a PCM buffer using linear interpolation to target sample rate & speed.
|
|
1232
|
+
* `trimOffsetSamples` is a whole-file index; `inputStartIndex` is the
|
|
1233
|
+
* whole-file index of `inputChannel[0]` when it holds only a range.
|
|
1176
1234
|
*/
|
|
1177
|
-
async function resampleAndStretchPCM(inputChannel, sourceSampleRate, targetSampleRate, speed, outputLength, trimOffsetSamples) {
|
|
1235
|
+
async function resampleAndStretchPCM(inputChannel, sourceSampleRate, targetSampleRate, speed, outputLength, trimOffsetSamples, inputStartIndex = 0) {
|
|
1178
1236
|
const output = new Float32Array(outputLength);
|
|
1179
1237
|
const factor = sourceSampleRate / targetSampleRate * speed;
|
|
1180
1238
|
const YIELD_INTERVAL = 1e5;
|
|
1181
1239
|
for (let i = 0; i < outputLength; i++) {
|
|
1182
1240
|
if (i > 0 && i % YIELD_INTERVAL === 0) await yieldToMain();
|
|
1183
|
-
const srcIndex = trimOffsetSamples + i * factor;
|
|
1241
|
+
const srcIndex = trimOffsetSamples + i * factor - inputStartIndex;
|
|
1184
1242
|
const indexFloor = Math.floor(srcIndex);
|
|
1185
1243
|
const indexCeil = Math.ceil(srcIndex);
|
|
1186
1244
|
if (indexFloor < 0) {
|
|
@@ -1195,6 +1253,46 @@ async function resampleAndStretchPCM(inputChannel, sourceSampleRate, targetSampl
|
|
|
1195
1253
|
}
|
|
1196
1254
|
return output;
|
|
1197
1255
|
}
|
|
1256
|
+
/** Seconds decoded past a clip's last source sample, for interpolation. */
|
|
1257
|
+
const RANGE_MARGIN_SEC = .05;
|
|
1258
|
+
/** Processors that only scale what is already there, so silence stays silence. */
|
|
1259
|
+
const GAIN_ONLY_PROCESSORS = new Set(["Compositor", "CompositorLayer"]);
|
|
1260
|
+
/** Adds `src` into `dest` starting at `destStart` (which may be negative). */
|
|
1261
|
+
function addInto(dest, src, destStart) {
|
|
1262
|
+
const from = Math.max(0, -destStart);
|
|
1263
|
+
const to = Math.min(src.length, dest.length - destStart);
|
|
1264
|
+
for (let i = from; i < to; i++) dest[destStart + i] += src[i];
|
|
1265
|
+
}
|
|
1266
|
+
/**
|
|
1267
|
+
* A node's stereo mix, allocated on first write. A child that covers the
|
|
1268
|
+
* whole bus while it is still silent is taken over instead of copied (adding
|
|
1269
|
+
* into silence changes nothing), so a chain of single-child nodes passes one
|
|
1270
|
+
* buffer up instead of allocating and summing a full-length copy per level.
|
|
1271
|
+
*/
|
|
1272
|
+
var MixBus = class {
|
|
1273
|
+
channels = null;
|
|
1274
|
+
constructor(length) {
|
|
1275
|
+
this.length = length;
|
|
1276
|
+
}
|
|
1277
|
+
/** The bus channels, allocated (silent) if nothing was written yet. */
|
|
1278
|
+
get() {
|
|
1279
|
+
this.channels ??= [new Float32Array(this.length), new Float32Array(this.length)];
|
|
1280
|
+
return this.channels;
|
|
1281
|
+
}
|
|
1282
|
+
/** Whether `src` written at `start` could replace the bus outright. */
|
|
1283
|
+
canAdopt(src, start) {
|
|
1284
|
+
return this.channels === null && start === 0 && src.every((ch) => ch.length === this.length);
|
|
1285
|
+
}
|
|
1286
|
+
/** Mixes `src` into the bus starting at sample `start`. */
|
|
1287
|
+
add(src, start) {
|
|
1288
|
+
if (this.canAdopt(src, start) && src[0] !== src[1]) {
|
|
1289
|
+
this.channels = src;
|
|
1290
|
+
return;
|
|
1291
|
+
}
|
|
1292
|
+
const dest = this.get();
|
|
1293
|
+
for (let c = 0; c < 2; c++) addInto(dest[c], src[c], start);
|
|
1294
|
+
}
|
|
1295
|
+
};
|
|
1198
1296
|
/**
|
|
1199
1297
|
* Recursively parses the VirtualMediaData tree and mixes all active audio tracks
|
|
1200
1298
|
* into a single unified stereo PCM stream (Float32Array channels).
|
|
@@ -1207,12 +1305,44 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1207
1305
|
const totalDurationSec = durationMs / 1e3;
|
|
1208
1306
|
const totalTargetSamples = Math.ceil(totalDurationSec * targetSampleRate);
|
|
1209
1307
|
mediaLogger.debug(`[AudioExtractor] Composition total duration: ${durationMs}ms (${totalDurationSec}s). Total mixed samples to allocate: ${totalTargetSamples}`);
|
|
1210
|
-
const outputLeft = new Float32Array(totalTargetSamples);
|
|
1211
|
-
const outputRight = new Float32Array(totalTargetSamples);
|
|
1212
|
-
const mixedChannels = [outputLeft, outputRight];
|
|
1213
1308
|
const decodedCache = /* @__PURE__ */ new Map();
|
|
1309
|
+
const undecodable = /* @__PURE__ */ new Set();
|
|
1310
|
+
async function getDecodedRange(url, startSec, endSec) {
|
|
1311
|
+
if (undecodable.has(url)) return null;
|
|
1312
|
+
let ranges = decodedCache.get(url);
|
|
1313
|
+
const hit = ranges?.find((r) => r.validFromSec <= startSec && r.validToSec >= endSec);
|
|
1314
|
+
if (hit) return hit;
|
|
1315
|
+
const decoded = await decodeAudioRange(url, {
|
|
1316
|
+
startSec,
|
|
1317
|
+
endSec
|
|
1318
|
+
});
|
|
1319
|
+
if (!decoded) {
|
|
1320
|
+
undecodable.add(url);
|
|
1321
|
+
return null;
|
|
1322
|
+
}
|
|
1323
|
+
if (!ranges) {
|
|
1324
|
+
ranges = [];
|
|
1325
|
+
decodedCache.set(url, ranges);
|
|
1326
|
+
}
|
|
1327
|
+
ranges.push(decoded);
|
|
1328
|
+
return decoded;
|
|
1329
|
+
}
|
|
1330
|
+
const audibleCache = /* @__PURE__ */ new WeakMap();
|
|
1331
|
+
function isAudible(node) {
|
|
1332
|
+
const cached = audibleCache.get(node);
|
|
1333
|
+
if (cached !== void 0) return cached;
|
|
1334
|
+
const op = node.operation;
|
|
1335
|
+
let audible = false;
|
|
1336
|
+
if (op?.op === "source") {
|
|
1337
|
+
const mediaType = getMediaType(node);
|
|
1338
|
+
audible = mediaType === "Audio" || mediaType === "Video";
|
|
1339
|
+
} else if (op?.op && !GAIN_ONLY_PROCESSORS.has(op.op) && audioRegistry.get(op.op)) audible = true;
|
|
1340
|
+
if (!audible && node.children) audible = node.children.some((child) => child && isAudible(child));
|
|
1341
|
+
audibleCache.set(node, audible);
|
|
1342
|
+
return audible;
|
|
1343
|
+
}
|
|
1214
1344
|
async function traverse(node, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, inheritedDurationFrames) {
|
|
1215
|
-
if (!node) return null;
|
|
1345
|
+
if (!node || !isAudible(node)) return null;
|
|
1216
1346
|
const op = node.operation;
|
|
1217
1347
|
if (!op) {
|
|
1218
1348
|
const durationMs$1 = getActiveMediaMetadata(node)?.durationMs ?? 0;
|
|
@@ -1220,22 +1350,17 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1220
1350
|
const actualDurationFrames = inheritedDurationFrames !== null ? durationFrames > 0 ? Math.min(inheritedDurationFrames, durationFrames) : inheritedDurationFrames : durationFrames;
|
|
1221
1351
|
const localSamplesCount$1 = Math.ceil(actualDurationFrames / fps * targetSampleRate);
|
|
1222
1352
|
if (localSamplesCount$1 <= 0) return null;
|
|
1223
|
-
const
|
|
1353
|
+
const bus$1 = new MixBus(localSamplesCount$1);
|
|
1224
1354
|
for (const child of node.children) {
|
|
1225
1355
|
const childChannels = await traverse(child, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, actualDurationFrames);
|
|
1226
1356
|
if (childChannels) {
|
|
1227
1357
|
const childOp = child.operation;
|
|
1228
1358
|
const childStartFrame = childOp?.startFrame ?? childOp?.timeline?.startFrame ?? 0;
|
|
1229
1359
|
const childStartSample = Math.round(childStartFrame / fps * targetSampleRate);
|
|
1230
|
-
|
|
1231
|
-
const dest = localChannels$1[c];
|
|
1232
|
-
const src = childChannels[c];
|
|
1233
|
-
const len = Math.min(src.length, dest.length - childStartSample);
|
|
1234
|
-
for (let i = 0; i < len; i++) if (childStartSample + i >= 0) dest[childStartSample + i] += src[i];
|
|
1235
|
-
}
|
|
1360
|
+
bus$1.add(childChannels, childStartSample);
|
|
1236
1361
|
}
|
|
1237
1362
|
}
|
|
1238
|
-
return
|
|
1363
|
+
return bus$1.channels;
|
|
1239
1364
|
}
|
|
1240
1365
|
const volume = inheritedVolume * (op.volume ?? 1) * (op.opacity === 0 ? 0 : 1) * (op.muted ? 0 : 1);
|
|
1241
1366
|
const speedMultiplier = inheritedSpeed;
|
|
@@ -1248,9 +1373,7 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1248
1373
|
const nodeActualDurationFrames = inheritedDurationFrames !== null ? nodeDurationFrames > 0 ? Math.min(inheritedDurationFrames, nodeDurationFrames) : inheritedDurationFrames : nodeDurationFrames;
|
|
1249
1374
|
const localSamplesCount = Math.ceil(nodeActualDurationFrames / fps * targetSampleRate);
|
|
1250
1375
|
if (localSamplesCount <= 0) return null;
|
|
1251
|
-
const
|
|
1252
|
-
const localRight = new Float32Array(localSamplesCount);
|
|
1253
|
-
const localChannels = [localLeft, localRight];
|
|
1376
|
+
const bus = new MixBus(localSamplesCount);
|
|
1254
1377
|
const processSegment = async (seg, windowStartFrameOffset) => {
|
|
1255
1378
|
const segSeekSec = seg ? seg.startSec : 0;
|
|
1256
1379
|
const totalSeekSec = inheritedSeekSec + layerTrimSec + segSeekSec;
|
|
@@ -1266,20 +1389,22 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1266
1389
|
if (params.sourceUrl && (mediaType === "Audio" || mediaType === "Video") && volume > 0) {
|
|
1267
1390
|
const finalSpeed = Math.max(.5, speedMultiplier * (Number(params.speed) || 1));
|
|
1268
1391
|
const effectiveTrimSec = Math.max(0, (Number(params.trimStartSec) || 0) + totalSeekSec);
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
decodedCache.set(params.sourceUrl, decoded);
|
|
1273
|
-
}
|
|
1392
|
+
const clipDurationSec = actualDurationFrames / fps;
|
|
1393
|
+
const clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));
|
|
1394
|
+
const decoded = clipSamplesCount > 0 && segmentStartSample < localSamplesCount ? await getDecodedRange(params.sourceUrl, effectiveTrimSec, effectiveTrimSec + clipSamplesCount / targetSampleRate * finalSpeed + RANGE_MARGIN_SEC) : null;
|
|
1274
1395
|
if (decoded) {
|
|
1275
|
-
const
|
|
1276
|
-
const
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1396
|
+
const trimOffsetSamples = Math.round(effectiveTrimSec * decoded.sampleRate);
|
|
1397
|
+
const stretchedLeft = await resampleAndStretchPCM(decoded.channels[0], decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples, decoded.startIndex);
|
|
1398
|
+
const stretchedRight = decoded.channels.length > 1 ? await resampleAndStretchPCM(decoded.channels[1], decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples, decoded.startIndex) : stretchedLeft;
|
|
1399
|
+
const stretched = [stretchedLeft, stretchedRight];
|
|
1400
|
+
if (bus.canAdopt(stretched, segmentStartSample)) {
|
|
1401
|
+
if (volume !== 1) {
|
|
1402
|
+
for (let i = 0; i < clipSamplesCount; i++) stretchedLeft[i] *= volume;
|
|
1403
|
+
if (stretchedRight !== stretchedLeft) for (let i = 0; i < clipSamplesCount; i++) stretchedRight[i] *= volume;
|
|
1404
|
+
}
|
|
1405
|
+
bus.channels = [stretchedLeft, stretchedRight === stretchedLeft ? stretchedLeft.slice() : stretchedRight];
|
|
1406
|
+
} else {
|
|
1407
|
+
const [localLeft, localRight] = bus.get();
|
|
1283
1408
|
for (let i = 0; i < clipSamplesCount; i++) {
|
|
1284
1409
|
const outIndex = segmentStartSample + i;
|
|
1285
1410
|
localLeft[outIndex] += stretchedLeft[i] * volume;
|
|
@@ -1295,20 +1420,15 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1295
1420
|
if (childChannels) {
|
|
1296
1421
|
const childOp = child.operation;
|
|
1297
1422
|
const childStartFrame = childOp?.startFrame ?? childOp?.timeline?.startFrame ?? 0;
|
|
1298
|
-
const
|
|
1299
|
-
|
|
1300
|
-
const dest = localChannels[c];
|
|
1301
|
-
const src = childChannels[c];
|
|
1302
|
-
const len = Math.min(src.length, dest.length - destStartSample);
|
|
1303
|
-
for (let i = 0; i < len; i++) if (destStartSample + i >= 0) dest[destStartSample + i] += src[i];
|
|
1304
|
-
}
|
|
1423
|
+
const childStartSample = Math.round(childStartFrame / fps * targetSampleRate);
|
|
1424
|
+
bus.add(childChannels, segmentStartSample + childStartSample);
|
|
1305
1425
|
}
|
|
1306
1426
|
}
|
|
1307
1427
|
const pluginProcessor = audioRegistry.get(op.op);
|
|
1308
1428
|
if (pluginProcessor) try {
|
|
1309
1429
|
const clipDurationSec = actualDurationFrames / fps;
|
|
1310
1430
|
const clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));
|
|
1311
|
-
if (clipSamplesCount > 0 && segmentStartSample < localSamplesCount && segmentStartSample >= 0) await pluginProcessor(
|
|
1431
|
+
if (clipSamplesCount > 0 && segmentStartSample < localSamplesCount && segmentStartSample >= 0) await pluginProcessor(bus.get().map((ch) => ch.subarray(segmentStartSample, segmentStartSample + clipSamplesCount)), targetSampleRate, node, {
|
|
1312
1432
|
device,
|
|
1313
1433
|
frame: totalClockFrames,
|
|
1314
1434
|
fps,
|
|
@@ -1329,10 +1449,12 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1329
1449
|
currentStart += durFrames;
|
|
1330
1450
|
}
|
|
1331
1451
|
} else await processSegment(null, 0);
|
|
1332
|
-
return
|
|
1452
|
+
return bus.channels;
|
|
1333
1453
|
}
|
|
1334
1454
|
const rootChannels = await traverse(normalizeTimeline(virtualMedia, fps), 0, 0, 1, 1, null);
|
|
1335
|
-
|
|
1455
|
+
const mixedChannels = rootChannels?.every((ch) => ch.length === totalTargetSamples) && rootChannels[0] !== rootChannels[1] ? rootChannels : [new Float32Array(totalTargetSamples), new Float32Array(totalTargetSamples)];
|
|
1456
|
+
const [outputLeft, outputRight] = mixedChannels;
|
|
1457
|
+
if (rootChannels && mixedChannels !== rootChannels) for (let c = 0; c < 2; c++) {
|
|
1336
1458
|
const dest = mixedChannels[c];
|
|
1337
1459
|
const src = rootChannels[c];
|
|
1338
1460
|
const len = Math.min(src.length, dest.length);
|
|
@@ -1361,4 +1483,4 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1361
1483
|
|
|
1362
1484
|
//#endregion
|
|
1363
1485
|
export { spring as _, resolveLayerDuration as a, computeStrokeRect as c, measureSpring as d, measureText as f, requiresIsolation as g, preloadFont as h, mixAudioTracks as i, interpolate as l, preloadCompositionFonts as m, decodeAudioSource as n, Easing as o, measureTextAsync as p, drawCompositionTree as r, bezier as s, compositionStateStore as t, mapBlendModeToSkia as u, springCalculation as v };
|
|
1364
|
-
//# sourceMappingURL=dist-
|
|
1486
|
+
//# sourceMappingURL=dist-CrK3rmyN.mjs.map
|