framefields 2.4.0 → 2.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -33
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-DXwNhi1z.mjs → audio-Bb31xJuX.mjs} +4 -4
- package/dist/{audio-DXwNhi1z.mjs.map → audio-Bb31xJuX.mjs.map} +1 -1
- package/dist/{audio-C6toT7F3.d.mts → audio-DHuEMOtQ.d.mts} +3 -3
- package/dist/{audio-C6toT7F3.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-DRB6Vg5u.mjs → dist-CspOG4V1.mjs} +25 -8
- package/dist/dist-CspOG4V1.mjs.map +1 -0
- package/dist/{dist-Cl0mvShy.mjs → dist-CxGfrigI.mjs} +222 -60
- package/dist/dist-CxGfrigI.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-lBqG-vd1.mjs → effects-BOk_2kzM.mjs} +3 -3
- package/dist/{effects-lBqG-vd1.mjs.map → effects-BOk_2kzM.mjs.map} +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-DlRJD6NS.mjs → fonts-CsMDfqv9.mjs} +2 -2
- package/dist/{fonts-DlRJD6NS.mjs.map → fonts-CsMDfqv9.mjs.map} +1 -1
- package/dist/{gpu-DOQX1W2q.mjs → gpu-DtT5I4ME.mjs} +2 -2
- package/dist/{gpu-DOQX1W2q.mjs.map → gpu-DtT5I4ME.mjs.map} +1 -1
- package/dist/{index-CaiZ5p6q.d.mts → index-B1XcyMm8.d.mts} +2 -2
- package/dist/{index-CaiZ5p6q.d.mts.map → index-B1XcyMm8.d.mts.map} +1 -1
- package/dist/{index-Cf1pVxn0.d.mts → index-B2Xesdug.d.mts} +4 -4
- package/dist/{index-Cf1pVxn0.d.mts.map → index-B2Xesdug.d.mts.map} +1 -1
- package/dist/{index-BONyHjZX.d.mts → index-B3-gwjK6.d.mts} +16 -4
- package/dist/index-B3-gwjK6.d.mts.map +1 -0
- package/dist/{index-BHqdtJbN.d.mts → index-BTPLbjt4.d.mts} +41 -12
- package/dist/index-BTPLbjt4.d.mts.map +1 -0
- package/dist/{index-DN9oXO-X.d.mts → index-D-l-yCv6.d.mts} +3 -3
- package/dist/{index-DN9oXO-X.d.mts.map → index-D-l-yCv6.d.mts.map} +1 -1
- package/dist/{index-DEODKaL6.d.mts → index-DujpgUUq.d.mts} +7 -2
- package/dist/index-DujpgUUq.d.mts.map +1 -0
- package/dist/index.d.mts +15 -11
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +52 -52
- 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-Ca4tF5Ro.mjs → preview-DyGw2b3_.mjs} +2 -2
- package/dist/{preview-Ca4tF5Ro.mjs.map → preview-DyGw2b3_.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- 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-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-PSRQA3QW.mjs → chunk-A5OVKZ52.mjs} +1 -1
- package/dist/preview-engine/{chunk-VGZZSPDN.mjs → chunk-AQNTIWTK.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-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-VK2CVMWJ.mjs → chunk-RHRMEBNK.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-VONDRBA2.mjs +1 -0
- 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 +4 -4
- 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-HQEKSUNR.mjs → renderers-EI6MQ2EL.mjs} +1 -1
- 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-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-CJEg2wMa.mjs → program-C2cJayA1.mjs} +4 -4
- package/dist/{program-CJEg2wMa.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-CCu1Q8ib.mjs → renderer--ruTGlPo.mjs} +3 -3
- package/dist/{renderer-CCu1Q8ib.mjs.map → renderer--ruTGlPo.mjs.map} +1 -1
- package/dist/{renderer-D-IcBLT0.mjs → renderer-7y5Cj8rV.mjs} +3 -3
- package/dist/{renderer-D-IcBLT0.mjs.map → renderer-7y5Cj8rV.mjs.map} +1 -1
- package/dist/{renderer-Dg5yLAM9.mjs → renderer-92eLJg24.mjs} +4 -4
- package/dist/{renderer-Dg5yLAM9.mjs.map → renderer-92eLJg24.mjs.map} +1 -1
- package/dist/{renderer-CduDa1qf.mjs → renderer-B0gPTXhe.mjs} +3 -3
- package/dist/{renderer-CduDa1qf.mjs.map → renderer-B0gPTXhe.mjs.map} +1 -1
- package/dist/{renderer-CjTxu89O.mjs → renderer-B1QREs7J.mjs} +3 -3
- package/dist/{renderer-CjTxu89O.mjs.map → renderer-B1QREs7J.mjs.map} +1 -1
- package/dist/{renderer-DVaVVz-D.mjs → renderer-B3e4LSE6.mjs} +3 -3
- package/dist/{renderer-DVaVVz-D.mjs.map → renderer-B3e4LSE6.mjs.map} +1 -1
- package/dist/{renderer-CxSH3F_n.mjs → renderer-B4RpSd4A.mjs} +2 -2
- package/dist/{renderer-CxSH3F_n.mjs.map → renderer-B4RpSd4A.mjs.map} +1 -1
- package/dist/renderer-BAhZeUUn.mjs +5 -0
- package/dist/{renderer-BZCLdb8F.mjs → renderer-BBAbZfBl.mjs} +4 -4
- package/dist/{renderer-BZCLdb8F.mjs.map → renderer-BBAbZfBl.mjs.map} +1 -1
- package/dist/{renderer-DZndEvZN.mjs → renderer-BDCy8NgT.mjs} +3 -3
- package/dist/{renderer-DZndEvZN.mjs.map → renderer-BDCy8NgT.mjs.map} +1 -1
- package/dist/renderer-BHAE_dKq.mjs +5 -0
- package/dist/{renderer-i4RJ-_sx.mjs → renderer-BMKFzfSQ.mjs} +3 -3
- package/dist/{renderer-i4RJ-_sx.mjs.map → renderer-BMKFzfSQ.mjs.map} +1 -1
- package/dist/renderer-BNYZY3FE.mjs +5 -0
- package/dist/{renderer-BtJ6XYN7.mjs → renderer-BPixWnmY.mjs} +3 -3
- package/dist/{renderer-BtJ6XYN7.mjs.map → renderer-BPixWnmY.mjs.map} +1 -1
- package/dist/renderer-BSvubMvI.mjs +5 -0
- package/dist/{renderer-CoN2JgLO.mjs → renderer-BTd2sWDC.mjs} +3 -3
- package/dist/{renderer-CoN2JgLO.mjs.map → renderer-BTd2sWDC.mjs.map} +1 -1
- package/dist/{renderer-DautVsW4.mjs → renderer-BTigwMQp.mjs} +3 -3
- package/dist/{renderer-DautVsW4.mjs.map → renderer-BTigwMQp.mjs.map} +1 -1
- package/dist/{renderer-B8v8iEkB.mjs → renderer-BV48PFjX.mjs} +6 -6
- package/dist/{renderer-B8v8iEkB.mjs.map → renderer-BV48PFjX.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-DAFi5TC_.mjs → renderer-Bi6W4RSn.mjs} +2 -2
- package/dist/{renderer-DAFi5TC_.mjs.map → renderer-Bi6W4RSn.mjs.map} +1 -1
- package/dist/{renderer-Edn9xltT.mjs → renderer-BjCHW9Jp.mjs} +2 -2
- package/dist/{renderer-CJmZURPQ.mjs → renderer-BjvNEbML.mjs} +2 -2
- package/dist/{renderer-CJmZURPQ.mjs.map → renderer-BjvNEbML.mjs.map} +1 -1
- package/dist/{renderer-C2ZIAhdJ.mjs → renderer-BkWd4-YO.mjs} +2 -2
- package/dist/{renderer-C2ZIAhdJ.mjs.map → renderer-BkWd4-YO.mjs.map} +1 -1
- package/dist/{renderer-Cfto0m0-.mjs → renderer-Bkrk0M0r.mjs} +3 -3
- package/dist/{renderer-Cfto0m0-.mjs.map → renderer-Bkrk0M0r.mjs.map} +1 -1
- package/dist/{renderer-h9sJnoxw.mjs → renderer-BljMOvry.mjs} +3 -3
- package/dist/{renderer-h9sJnoxw.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-DqgduGiO.mjs → renderer-BwpgDLYO.mjs} +3 -3
- package/dist/{renderer-DqgduGiO.mjs.map → renderer-BwpgDLYO.mjs.map} +1 -1
- package/dist/{renderer-DaV95CAd.mjs → renderer-BwwZB2mt.mjs} +4 -4
- package/dist/{renderer-DaV95CAd.mjs.map → renderer-BwwZB2mt.mjs.map} +1 -1
- package/dist/{renderer-DA1brg35.mjs → renderer-ByCX4JYg.mjs} +3 -3
- package/dist/{renderer-DA1brg35.mjs.map → renderer-ByCX4JYg.mjs.map} +1 -1
- package/dist/{renderer-Tf1AS1aO.mjs → renderer-C1E5Rt5q.mjs} +3 -3
- package/dist/{renderer-Tf1AS1aO.mjs.map → renderer-C1E5Rt5q.mjs.map} +1 -1
- package/dist/renderer-C7NkSvUz.mjs +5 -0
- package/dist/{renderer-CG4TmDWH.mjs → renderer-CCGzT6bX.mjs} +2 -2
- package/dist/{renderer-wFyrVuuj.mjs → renderer-CDOobs18.mjs} +3 -3
- package/dist/{renderer-wFyrVuuj.mjs.map → renderer-CDOobs18.mjs.map} +1 -1
- package/dist/{renderer-BaHEN_Kv.mjs → renderer-CDUxAtsk.mjs} +4 -4
- package/dist/{renderer-BaHEN_Kv.mjs.map → renderer-CDUxAtsk.mjs.map} +1 -1
- package/dist/renderer-CIuxV2q1.mjs +5 -0
- package/dist/{renderer-DY8fPeH3.mjs → renderer-CJ4bxCld.mjs} +2 -2
- package/dist/renderer-CKp97tSQ.mjs +5 -0
- package/dist/{renderer-BTJyO6ov.mjs → renderer-CNuVJ4nG.mjs} +2 -2
- package/dist/{renderer-BTJyO6ov.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-Dk0dnuHr.mjs → renderer-Cbsnj9vV.mjs} +3 -3
- package/dist/{renderer-Dk0dnuHr.mjs.map → renderer-Cbsnj9vV.mjs.map} +1 -1
- package/dist/{renderer-B6UqWjtH.mjs → renderer-CcoUNzlQ.mjs} +3 -3
- package/dist/{renderer-B6UqWjtH.mjs.map → renderer-CcoUNzlQ.mjs.map} +1 -1
- package/dist/renderer-Cd87JOjP.mjs +5 -0
- package/dist/{renderer-BZF48o1T.mjs → renderer-CeiCJCg4.mjs} +3 -3
- package/dist/{renderer-BZF48o1T.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-TyZu7nQ2.mjs → renderer-CoWfz-9p.mjs} +441 -177
- package/dist/renderer-CoWfz-9p.mjs.map +1 -0
- package/dist/renderer-CoxuAr7b.mjs +5 -0
- package/dist/{renderer-D4E8Yf61.mjs → renderer-CqtIbe5n.mjs} +2 -2
- package/dist/{renderer-D4E8Yf61.mjs.map → renderer-CqtIbe5n.mjs.map} +1 -1
- package/dist/renderer-CrdG7trA.mjs +5 -0
- package/dist/{renderer-C-La-IAt.mjs → renderer-Csss5GFQ.mjs} +2 -2
- package/dist/{renderer-C-La-IAt.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-BhZutM8K.mjs → renderer-Cv4lchUP.mjs} +3 -3
- package/dist/{renderer-BhZutM8K.mjs.map → renderer-Cv4lchUP.mjs.map} +1 -1
- package/dist/{renderer-CgZ1G37H.mjs → renderer-Cw6Sagih.mjs} +3 -3
- package/dist/{renderer-CgZ1G37H.mjs.map → renderer-Cw6Sagih.mjs.map} +1 -1
- package/dist/{renderer-Dim2ZlfK.d.mts → renderer-CxqPeATd.d.mts} +2 -2
- package/dist/{renderer-Dim2ZlfK.d.mts.map → renderer-CxqPeATd.d.mts.map} +1 -1
- package/dist/{renderer-yGARXwV0.mjs → renderer-CzRqzp8P.mjs} +3 -3
- package/dist/{renderer-yGARXwV0.mjs.map → renderer-CzRqzp8P.mjs.map} +1 -1
- package/dist/{renderer-eWBBsCv2.mjs → renderer-D0vom99O.mjs} +2 -2
- package/dist/{renderer-eWBBsCv2.mjs.map → renderer-D0vom99O.mjs.map} +1 -1
- package/dist/{renderer-C9pl21Zb.mjs → renderer-D2-V9nQq.mjs} +3 -3
- package/dist/{renderer-C9pl21Zb.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-445i0uxs.mjs → renderer-D6BXR7P4.mjs} +2 -2
- package/dist/{renderer-445i0uxs.mjs.map → renderer-D6BXR7P4.mjs.map} +1 -1
- package/dist/renderer-DDNY9N7I.mjs +5 -0
- package/dist/{renderer-5tQ7ImPk.mjs → renderer-DFJQ6v0F.mjs} +2 -2
- package/dist/{renderer-5tQ7ImPk.mjs.map → renderer-DFJQ6v0F.mjs.map} +1 -1
- package/dist/renderer-DF_ONJ3v.mjs +5 -0
- package/dist/{renderer-CoO2j8AC.mjs → renderer-DILUmb-e.mjs} +3 -3
- package/dist/{renderer-CoO2j8AC.mjs.map → renderer-DILUmb-e.mjs.map} +1 -1
- package/dist/{renderer-CduL1AOK.mjs → renderer-DKfwlE4e.mjs} +3 -3
- package/dist/{renderer-CduL1AOK.mjs.map → renderer-DKfwlE4e.mjs.map} +1 -1
- package/dist/{renderer-DFX2V9Dp.mjs → renderer-DScyMHpJ.mjs} +2 -2
- package/dist/{renderer-DFX2V9Dp.mjs.map → renderer-DScyMHpJ.mjs.map} +1 -1
- package/dist/{renderer-BZvWlGsa.mjs → renderer-DTw-W0Yz.mjs} +3 -3
- package/dist/{renderer-BZvWlGsa.mjs.map → renderer-DTw-W0Yz.mjs.map} +1 -1
- package/dist/{renderer-BFWRUTov.mjs → renderer-DZJJHCtm.mjs} +3 -3
- package/dist/{renderer-BFWRUTov.mjs.map → renderer-DZJJHCtm.mjs.map} +1 -1
- package/dist/{renderer-Cz9fzS11.mjs → renderer-DaSxr9fM.mjs} +3 -3
- package/dist/{renderer-Cz9fzS11.mjs.map → renderer-DaSxr9fM.mjs.map} +1 -1
- package/dist/{renderer-CoX23zo_.mjs → renderer-DaqWTx7s.mjs} +3 -3
- package/dist/{renderer-CoX23zo_.mjs.map → renderer-DaqWTx7s.mjs.map} +1 -1
- package/dist/renderer-DbzrVHEE.mjs +5 -0
- package/dist/{renderer-CN3iCli4.mjs → renderer-DcBGYN3V.mjs} +3 -3
- package/dist/{renderer-CN3iCli4.mjs.map → renderer-DcBGYN3V.mjs.map} +1 -1
- package/dist/{renderer-CCCitH4J.mjs → renderer-DjBCWxYy.mjs} +3 -3
- package/dist/{renderer-CCCitH4J.mjs.map → renderer-DjBCWxYy.mjs.map} +1 -1
- package/dist/{renderer-gbBgGPNL.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-B4JmNa_T.mjs → renderer-DwVOxdzC.mjs} +3 -3
- package/dist/{renderer-B4JmNa_T.mjs.map → renderer-DwVOxdzC.mjs.map} +1 -1
- package/dist/{renderer-BZWiY6Jw.mjs → renderer-Dwu_zfdL.mjs} +3 -3
- package/dist/{renderer-BZWiY6Jw.mjs.map → renderer-Dwu_zfdL.mjs.map} +1 -1
- package/dist/renderer-DxBav2bE.mjs +5 -0
- package/dist/{renderer-DkYiOWPJ.mjs → renderer-DyyIXLQK.mjs} +3 -3
- package/dist/{renderer-DkYiOWPJ.mjs.map → renderer-DyyIXLQK.mjs.map} +1 -1
- package/dist/{renderer-D-e3vDnO.mjs → renderer-DzSMeQBC.mjs} +3 -3
- package/dist/{renderer-D-e3vDnO.mjs.map → renderer-DzSMeQBC.mjs.map} +1 -1
- package/dist/{renderer-DOZJeWM4.mjs → renderer-EZp_IIPK.mjs} +3 -3
- package/dist/{renderer-DOZJeWM4.mjs.map → renderer-EZp_IIPK.mjs.map} +1 -1
- package/dist/{renderer-DkM_wN8j.mjs → renderer-G1pMJH5C.mjs} +2 -2
- package/dist/{renderer-DkM_wN8j.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-BL36f2IQ.mjs → renderer-JvcR1vYI.mjs} +2 -2
- package/dist/{renderer-BL36f2IQ.mjs.map → renderer-JvcR1vYI.mjs.map} +1 -1
- package/dist/renderer-KP7Ita9g.mjs +5 -0
- package/dist/{renderer-DOkEalxy.mjs → renderer-NizuhHsH.mjs} +3 -3
- package/dist/{renderer-DOkEalxy.mjs.map → renderer-NizuhHsH.mjs.map} +1 -1
- package/dist/renderer-Pc8dyNXt.mjs +5 -0
- package/dist/{renderer-fXRwAdO2.mjs → renderer-RDCax5CK.mjs} +3 -3
- package/dist/{renderer-fXRwAdO2.mjs.map → renderer-RDCax5CK.mjs.map} +1 -1
- package/dist/{renderer-BOvCstdU.mjs → renderer-UcdqCarR.mjs} +3 -3
- package/dist/{renderer-BOvCstdU.mjs.map → renderer-UcdqCarR.mjs.map} +1 -1
- package/dist/{renderer-BaBluD-r.mjs → renderer-V5uEyDFz.mjs} +3 -3
- package/dist/{renderer-BaBluD-r.mjs.map → renderer-V5uEyDFz.mjs.map} +1 -1
- package/dist/{renderer-BzgnTEvf.mjs → renderer-X0eKSD7v.mjs} +3 -3
- package/dist/{renderer-BzgnTEvf.mjs.map → renderer-X0eKSD7v.mjs.map} +1 -1
- package/dist/{renderer-Ai5nZsof.mjs → renderer-Za4D9hej.mjs} +3 -3
- package/dist/{renderer-Ai5nZsof.mjs.map → renderer-Za4D9hej.mjs.map} +1 -1
- package/dist/{renderer-q971j1BW.mjs → renderer-apeDrNXM.mjs} +3 -3
- package/dist/{renderer-q971j1BW.mjs.map → renderer-apeDrNXM.mjs.map} +1 -1
- package/dist/renderer-ezRCmU09.mjs +3 -0
- package/dist/{renderer-CNS8LA2_.mjs → renderer-gRMkQabv.mjs} +3 -3
- package/dist/{renderer-CNS8LA2_.mjs.map → renderer-gRMkQabv.mjs.map} +1 -1
- package/dist/renderer-h6ev1ogx.mjs +5 -0
- package/dist/{renderer-nMnE_T2y.mjs → renderer-rXgqgAjw.mjs} +3 -3
- package/dist/{renderer-nMnE_T2y.mjs.map → renderer-rXgqgAjw.mjs.map} +1 -1
- package/dist/{renderer-BPsi7Q7Z.mjs → renderer-ut1GqW89.mjs} +3 -3
- package/dist/{renderer-BPsi7Q7Z.mjs.map → renderer-ut1GqW89.mjs.map} +1 -1
- package/dist/{renderer-DH0wkQkR.mjs → renderer-yyUpCeWb.mjs} +2 -2
- package/dist/{renderer-DH0wkQkR.mjs.map → renderer-yyUpCeWb.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-DoVn7dbW.mjs → renderers-CP8CFWDs-DzGXDs5p.mjs} +3 -3
- package/dist/{renderers-CP8CFWDs-DoVn7dbW.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 -57
- package/dist/dist-Cl0mvShy.mjs.map +0 -1
- package/dist/dist-DRB6Vg5u.mjs.map +0 -1
- package/dist/dist-fjKpBYkc.mjs.map +0 -1
- package/dist/index-BHqdtJbN.d.mts.map +0 -1
- package/dist/index-BONyHjZX.d.mts.map +0 -1
- package/dist/index-DEODKaL6.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/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--IHe-yqK.mjs +0 -5
- package/dist/renderer-B16iwR0_.mjs +0 -5
- package/dist/renderer-B3EEYpx6.mjs +0 -5
- package/dist/renderer-B3Si5IB4.mjs +0 -5
- package/dist/renderer-BARst3ZD.mjs +0 -3
- package/dist/renderer-BH8vZKmX.mjs +0 -5
- package/dist/renderer-BHZie6Pa.mjs +0 -5
- package/dist/renderer-BHpJ1e15.mjs +0 -5
- package/dist/renderer-BPJ79b47.mjs +0 -5
- package/dist/renderer-BPbM_6WR.mjs +0 -5
- package/dist/renderer-Bn-WnRh9.mjs +0 -5
- package/dist/renderer-BqHvDAUe.mjs +0 -5
- package/dist/renderer-CAtXDNsh.mjs +0 -5
- package/dist/renderer-C_5nfVce.mjs +0 -5
- package/dist/renderer-Cie7KKeQ.mjs +0 -5
- package/dist/renderer-CuoxvPsX.mjs +0 -5
- package/dist/renderer-Cvd3oIJQ.mjs +0 -5
- package/dist/renderer-CxAgpBrJ.mjs +0 -5
- package/dist/renderer-D-cWBX0r.mjs +0 -5
- package/dist/renderer-D0q2VyJR.mjs +0 -5
- package/dist/renderer-D6NXn3Ky.mjs +0 -5
- package/dist/renderer-D9bp2jor.mjs +0 -5
- package/dist/renderer-DEzIOIB7.mjs +0 -5
- package/dist/renderer-DSSTVulw.mjs +0 -5
- package/dist/renderer-DUmTURPu.mjs +0 -5
- package/dist/renderer-DXCAgI9m.mjs +0 -5
- package/dist/renderer-DZ9j3fQj.mjs +0 -5
- package/dist/renderer-Dd1G_VKM.mjs +0 -5
- package/dist/renderer-Dee8079X.mjs +0 -5
- package/dist/renderer-DgWh5noB.mjs +0 -5
- package/dist/renderer-DuD9QRix.mjs +0 -5
- package/dist/renderer-KtG5p44R.mjs +0 -5
- package/dist/renderer-TyZu7nQ2.mjs.map +0 -1
- package/dist/renderer-fdVdNIhL.mjs +0 -5
- package/dist/renderer-gBKWL0_E.mjs +0 -5
- package/dist/renderer-hmWhsR6C.mjs +0 -5
- package/dist/renderer-jkL9FU2W.mjs +0 -6
- package/dist/renderer-yAWv-daq.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,11 +1253,64 @@ 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
|
+
};
|
|
1296
|
+
/** A clip's file name for progress, without paths or signed-URL queries. */
|
|
1297
|
+
function sourceLabel(url) {
|
|
1298
|
+
if (url.startsWith("data:")) return "inline audio";
|
|
1299
|
+
const name = url.split(/[?#]/)[0].split(/[\\/]/).pop();
|
|
1300
|
+
return name ? decodeURIComponentSafe(name) : "audio";
|
|
1301
|
+
}
|
|
1302
|
+
function decodeURIComponentSafe(s) {
|
|
1303
|
+
try {
|
|
1304
|
+
return decodeURIComponent(s);
|
|
1305
|
+
} catch {
|
|
1306
|
+
return s;
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1198
1309
|
/**
|
|
1199
1310
|
* Recursively parses the VirtualMediaData tree and mixes all active audio tracks
|
|
1200
1311
|
* into a single unified stereo PCM stream (Float32Array channels).
|
|
1201
1312
|
*/
|
|
1202
|
-
async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device, renderId) {
|
|
1313
|
+
async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device, renderId, options = {}) {
|
|
1203
1314
|
mediaLogger.debug(`[AudioExtractor] mixAudioTracks started. FPS: ${fps}, targetSampleRate: ${targetSampleRate}`);
|
|
1204
1315
|
await waitForDelayRender();
|
|
1205
1316
|
shaderStore.registerSignalsFromComposition(renderId, virtualMedia);
|
|
@@ -1207,12 +1318,44 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1207
1318
|
const totalDurationSec = durationMs / 1e3;
|
|
1208
1319
|
const totalTargetSamples = Math.ceil(totalDurationSec * targetSampleRate);
|
|
1209
1320
|
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
1321
|
const decodedCache = /* @__PURE__ */ new Map();
|
|
1322
|
+
const undecodable = /* @__PURE__ */ new Set();
|
|
1323
|
+
async function getDecodedRange(url, startSec, endSec) {
|
|
1324
|
+
if (undecodable.has(url)) return null;
|
|
1325
|
+
let ranges = decodedCache.get(url);
|
|
1326
|
+
const hit = ranges?.find((r) => r.validFromSec <= startSec && r.validToSec >= endSec);
|
|
1327
|
+
if (hit) return hit;
|
|
1328
|
+
const decoded = await decodeAudioRange(url, {
|
|
1329
|
+
startSec,
|
|
1330
|
+
endSec
|
|
1331
|
+
});
|
|
1332
|
+
if (!decoded) {
|
|
1333
|
+
undecodable.add(url);
|
|
1334
|
+
return null;
|
|
1335
|
+
}
|
|
1336
|
+
if (!ranges) {
|
|
1337
|
+
ranges = [];
|
|
1338
|
+
decodedCache.set(url, ranges);
|
|
1339
|
+
}
|
|
1340
|
+
ranges.push(decoded);
|
|
1341
|
+
return decoded;
|
|
1342
|
+
}
|
|
1343
|
+
const audibleCache = /* @__PURE__ */ new WeakMap();
|
|
1344
|
+
function isAudible(node) {
|
|
1345
|
+
const cached = audibleCache.get(node);
|
|
1346
|
+
if (cached !== void 0) return cached;
|
|
1347
|
+
const op = node.operation;
|
|
1348
|
+
let audible = false;
|
|
1349
|
+
if (op?.op === "source") {
|
|
1350
|
+
const mediaType = getMediaType(node);
|
|
1351
|
+
audible = mediaType === "Audio" || mediaType === "Video";
|
|
1352
|
+
} else if (op?.op && !GAIN_ONLY_PROCESSORS.has(op.op) && audioRegistry.get(op.op)) audible = true;
|
|
1353
|
+
if (!audible && node.children) audible = node.children.some((child) => child && isAudible(child));
|
|
1354
|
+
audibleCache.set(node, audible);
|
|
1355
|
+
return audible;
|
|
1356
|
+
}
|
|
1214
1357
|
async function traverse(node, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, inheritedDurationFrames) {
|
|
1215
|
-
if (!node) return null;
|
|
1358
|
+
if (!node || !isAudible(node)) return null;
|
|
1216
1359
|
const op = node.operation;
|
|
1217
1360
|
if (!op) {
|
|
1218
1361
|
const durationMs$1 = getActiveMediaMetadata(node)?.durationMs ?? 0;
|
|
@@ -1220,22 +1363,17 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1220
1363
|
const actualDurationFrames = inheritedDurationFrames !== null ? durationFrames > 0 ? Math.min(inheritedDurationFrames, durationFrames) : inheritedDurationFrames : durationFrames;
|
|
1221
1364
|
const localSamplesCount$1 = Math.ceil(actualDurationFrames / fps * targetSampleRate);
|
|
1222
1365
|
if (localSamplesCount$1 <= 0) return null;
|
|
1223
|
-
const
|
|
1366
|
+
const bus$1 = new MixBus(localSamplesCount$1);
|
|
1224
1367
|
for (const child of node.children) {
|
|
1225
1368
|
const childChannels = await traverse(child, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, actualDurationFrames);
|
|
1226
1369
|
if (childChannels) {
|
|
1227
1370
|
const childOp = child.operation;
|
|
1228
1371
|
const childStartFrame = childOp?.startFrame ?? childOp?.timeline?.startFrame ?? 0;
|
|
1229
1372
|
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
|
-
}
|
|
1373
|
+
bus$1.add(childChannels, childStartSample);
|
|
1236
1374
|
}
|
|
1237
1375
|
}
|
|
1238
|
-
return
|
|
1376
|
+
return bus$1.channels;
|
|
1239
1377
|
}
|
|
1240
1378
|
const volume = inheritedVolume * (op.volume ?? 1) * (op.opacity === 0 ? 0 : 1) * (op.muted ? 0 : 1);
|
|
1241
1379
|
const speedMultiplier = inheritedSpeed;
|
|
@@ -1248,9 +1386,7 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1248
1386
|
const nodeActualDurationFrames = inheritedDurationFrames !== null ? nodeDurationFrames > 0 ? Math.min(inheritedDurationFrames, nodeDurationFrames) : inheritedDurationFrames : nodeDurationFrames;
|
|
1249
1387
|
const localSamplesCount = Math.ceil(nodeActualDurationFrames / fps * targetSampleRate);
|
|
1250
1388
|
if (localSamplesCount <= 0) return null;
|
|
1251
|
-
const
|
|
1252
|
-
const localRight = new Float32Array(localSamplesCount);
|
|
1253
|
-
const localChannels = [localLeft, localRight];
|
|
1389
|
+
const bus = new MixBus(localSamplesCount);
|
|
1254
1390
|
const processSegment = async (seg, windowStartFrameOffset) => {
|
|
1255
1391
|
const segSeekSec = seg ? seg.startSec : 0;
|
|
1256
1392
|
const totalSeekSec = inheritedSeekSec + layerTrimSec + segSeekSec;
|
|
@@ -1266,20 +1402,22 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1266
1402
|
if (params.sourceUrl && (mediaType === "Audio" || mediaType === "Video") && volume > 0) {
|
|
1267
1403
|
const finalSpeed = Math.max(.5, speedMultiplier * (Number(params.speed) || 1));
|
|
1268
1404
|
const effectiveTrimSec = Math.max(0, (Number(params.trimStartSec) || 0) + totalSeekSec);
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
decodedCache.set(params.sourceUrl, decoded);
|
|
1273
|
-
}
|
|
1405
|
+
const clipDurationSec = actualDurationFrames / fps;
|
|
1406
|
+
const clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));
|
|
1407
|
+
const decoded = clipSamplesCount > 0 && segmentStartSample < localSamplesCount ? await getDecodedRange(params.sourceUrl, effectiveTrimSec, effectiveTrimSec + clipSamplesCount / targetSampleRate * finalSpeed + RANGE_MARGIN_SEC) : null;
|
|
1274
1408
|
if (decoded) {
|
|
1275
|
-
const
|
|
1276
|
-
const
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1409
|
+
const trimOffsetSamples = Math.round(effectiveTrimSec * decoded.sampleRate);
|
|
1410
|
+
const stretchedLeft = await resampleAndStretchPCM(decoded.channels[0], decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples, decoded.startIndex);
|
|
1411
|
+
const stretchedRight = decoded.channels.length > 1 ? await resampleAndStretchPCM(decoded.channels[1], decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples, decoded.startIndex) : stretchedLeft;
|
|
1412
|
+
const stretched = [stretchedLeft, stretchedRight];
|
|
1413
|
+
if (bus.canAdopt(stretched, segmentStartSample)) {
|
|
1414
|
+
if (volume !== 1) {
|
|
1415
|
+
for (let i = 0; i < clipSamplesCount; i++) stretchedLeft[i] *= volume;
|
|
1416
|
+
if (stretchedRight !== stretchedLeft) for (let i = 0; i < clipSamplesCount; i++) stretchedRight[i] *= volume;
|
|
1417
|
+
}
|
|
1418
|
+
bus.channels = [stretchedLeft, stretchedRight === stretchedLeft ? stretchedLeft.slice() : stretchedRight];
|
|
1419
|
+
} else {
|
|
1420
|
+
const [localLeft, localRight] = bus.get();
|
|
1283
1421
|
for (let i = 0; i < clipSamplesCount; i++) {
|
|
1284
1422
|
const outIndex = segmentStartSample + i;
|
|
1285
1423
|
localLeft[outIndex] += stretchedLeft[i] * volume;
|
|
@@ -1289,26 +1427,29 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1289
1427
|
}
|
|
1290
1428
|
await yieldToMain();
|
|
1291
1429
|
}
|
|
1430
|
+
if (mediaType === "Audio" || mediaType === "Video") {
|
|
1431
|
+
clipsDone++;
|
|
1432
|
+
options.onProgress?.({
|
|
1433
|
+
done: clipsDone,
|
|
1434
|
+
total: clipsTotal,
|
|
1435
|
+
...params.sourceUrl && { source: sourceLabel(params.sourceUrl) }
|
|
1436
|
+
});
|
|
1437
|
+
}
|
|
1292
1438
|
}
|
|
1293
1439
|
if (node.children) for (const child of node.children) {
|
|
1294
1440
|
const childChannels = await traverse(child, totalSeekSec, totalClockFrames, volume, speedMultiplier, actualDurationFrames);
|
|
1295
1441
|
if (childChannels) {
|
|
1296
1442
|
const childOp = child.operation;
|
|
1297
1443
|
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
|
-
}
|
|
1444
|
+
const childStartSample = Math.round(childStartFrame / fps * targetSampleRate);
|
|
1445
|
+
bus.add(childChannels, segmentStartSample + childStartSample);
|
|
1305
1446
|
}
|
|
1306
1447
|
}
|
|
1307
1448
|
const pluginProcessor = audioRegistry.get(op.op);
|
|
1308
1449
|
if (pluginProcessor) try {
|
|
1309
1450
|
const clipDurationSec = actualDurationFrames / fps;
|
|
1310
1451
|
const clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));
|
|
1311
|
-
if (clipSamplesCount > 0 && segmentStartSample < localSamplesCount && segmentStartSample >= 0) await pluginProcessor(
|
|
1452
|
+
if (clipSamplesCount > 0 && segmentStartSample < localSamplesCount && segmentStartSample >= 0) await pluginProcessor(bus.get().map((ch) => ch.subarray(segmentStartSample, segmentStartSample + clipSamplesCount)), targetSampleRate, node, {
|
|
1312
1453
|
device,
|
|
1313
1454
|
frame: totalClockFrames,
|
|
1314
1455
|
fps,
|
|
@@ -1329,10 +1470,31 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1329
1470
|
currentStart += durFrames;
|
|
1330
1471
|
}
|
|
1331
1472
|
} else await processSegment(null, 0);
|
|
1332
|
-
return
|
|
1473
|
+
return bus.channels;
|
|
1474
|
+
}
|
|
1475
|
+
const normalized = normalizeTimeline(virtualMedia, fps);
|
|
1476
|
+
let clipsTotal = 0;
|
|
1477
|
+
let clipsDone = 0;
|
|
1478
|
+
if (options.onProgress) {
|
|
1479
|
+
const count = (node) => {
|
|
1480
|
+
if (!node) return;
|
|
1481
|
+
const op = node.operation;
|
|
1482
|
+
if (op?.op === "source") {
|
|
1483
|
+
const mediaType = getMediaType(node);
|
|
1484
|
+
if (mediaType === "Audio" || mediaType === "Video") clipsTotal += Math.max(1, op.timeline?.segments?.length ?? 0);
|
|
1485
|
+
}
|
|
1486
|
+
for (const child of node.children ?? []) count(child);
|
|
1487
|
+
};
|
|
1488
|
+
count(normalized);
|
|
1489
|
+
options.onProgress({
|
|
1490
|
+
done: 0,
|
|
1491
|
+
total: clipsTotal
|
|
1492
|
+
});
|
|
1333
1493
|
}
|
|
1334
|
-
const rootChannels = await traverse(
|
|
1335
|
-
|
|
1494
|
+
const rootChannels = await traverse(normalized, 0, 0, 1, 1, null);
|
|
1495
|
+
const mixedChannels = rootChannels?.every((ch) => ch.length === totalTargetSamples) && rootChannels[0] !== rootChannels[1] ? rootChannels : [new Float32Array(totalTargetSamples), new Float32Array(totalTargetSamples)];
|
|
1496
|
+
const [outputLeft, outputRight] = mixedChannels;
|
|
1497
|
+
if (rootChannels && mixedChannels !== rootChannels) for (let c = 0; c < 2; c++) {
|
|
1336
1498
|
const dest = mixedChannels[c];
|
|
1337
1499
|
const src = rootChannels[c];
|
|
1338
1500
|
const len = Math.min(src.length, dest.length);
|
|
@@ -1361,4 +1523,4 @@ async function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device
|
|
|
1361
1523
|
|
|
1362
1524
|
//#endregion
|
|
1363
1525
|
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-
|
|
1526
|
+
//# sourceMappingURL=dist-CxGfrigI.mjs.map
|