framefields 2.0.7 → 2.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/dist/audio/index.mjs +10 -10
  2. package/dist/{audio-D6enPyAG.mjs → audio--hi7MiZt.mjs} +3 -3
  3. package/dist/{audio-D6enPyAG.mjs.map → audio--hi7MiZt.mjs.map} +1 -1
  4. package/dist/{dist-sHqWCB9M.mjs → dist-BQFap0wr.mjs} +9 -6
  5. package/dist/dist-BQFap0wr.mjs.map +1 -0
  6. package/dist/{dist-JkiL-qy7.mjs → dist-ZVlYkuR4.mjs} +6 -5
  7. package/dist/dist-ZVlYkuR4.mjs.map +1 -0
  8. package/dist/effects/index.mjs +22 -22
  9. package/dist/{effects-l0T61DPU.mjs → effects-axfL_C3a.mjs} +2 -2
  10. package/dist/{effects-l0T61DPU.mjs.map → effects-axfL_C3a.mjs.map} +1 -1
  11. package/dist/fonts/index.mjs +1 -1
  12. package/dist/{fonts-CuG-05-_.mjs → fonts-Cy26mbrO.mjs} +2 -2
  13. package/dist/{fonts-CuG-05-_.mjs.map → fonts-Cy26mbrO.mjs.map} +1 -1
  14. package/dist/index-Bi2nRZ_g.d.mts.map +1 -1
  15. package/dist/index-WIPHLy5m.d.mts.map +1 -1
  16. package/dist/index.d.mts.map +1 -1
  17. package/dist/index.mjs +37 -37
  18. package/dist/preview/index.mjs +10 -10
  19. package/dist/{preview-4z1jNSej.mjs → preview-BUPB38Kk.mjs} +2 -2
  20. package/dist/{preview-4z1jNSej.mjs.map → preview-BUPB38Kk.mjs.map} +1 -1
  21. package/dist/preview-engine/audio.mjs +1 -1
  22. package/dist/preview-engine/{chunk-45JOFIHE.mjs → chunk-5PPSCISJ.mjs} +1 -1
  23. package/dist/preview-engine/{chunk-5NYKHIQN.mjs → chunk-BUWK5RJ4.mjs} +9 -9
  24. package/dist/preview-engine/{chunk-OZVCWK27.mjs → chunk-JNEVSC4I.mjs} +1 -1
  25. package/dist/preview-engine/{chunk-RJJRPL42.mjs → chunk-VWLR2AZR.mjs} +1 -1
  26. package/dist/preview-engine/{chunk-KNZU3Z2F.mjs → chunk-WQ7BFSKF.mjs} +1 -1
  27. package/dist/preview-engine/{chunk-YK4XHUP4.mjs → chunk-ZJFAGIOM.mjs} +6 -6
  28. package/dist/preview-engine/{chunk-EJTGJVUA.mjs → chunk-ZSIJB76A.mjs} +2 -2
  29. package/dist/preview-engine/fonts.mjs +1 -1
  30. package/dist/preview-engine/framefields.mjs +1 -1
  31. package/dist/preview-engine/player.mjs +1 -1
  32. package/dist/preview-engine/{renderers-GYJTBVV2.mjs → renderers-27Q5X3U6.mjs} +1 -1
  33. package/dist/preview-engine/{renderers-R5WSHETG.mjs → renderers-MZBR3MSR.mjs} +1 -1
  34. package/dist/{program-DPFDbeL9.mjs → program-Jt07Tx1J.mjs} +2 -2
  35. package/dist/{program-DPFDbeL9.mjs.map → program-Jt07Tx1J.mjs.map} +1 -1
  36. package/dist/renderer/index.mjs +2 -2
  37. package/dist/{renderer-DVj8jfmO.mjs → renderer-0uccAKQe.mjs} +2 -2
  38. package/dist/{renderer-DVj8jfmO.mjs.map → renderer-0uccAKQe.mjs.map} +1 -1
  39. package/dist/renderer-1mNREW16.mjs +3 -0
  40. package/dist/renderer-4tKI3p9c.mjs +3 -0
  41. package/dist/renderer-B3XeKN-e.mjs +3 -0
  42. package/dist/{renderer-BXWu8aHU.mjs → renderer-B6Q5e9CU.mjs} +2 -2
  43. package/dist/{renderer-BXWu8aHU.mjs.map → renderer-B6Q5e9CU.mjs.map} +1 -1
  44. package/dist/renderer-B7_6SHd8.mjs +3 -0
  45. package/dist/renderer-BENF6Wts.mjs +3 -0
  46. package/dist/{renderer-Bl9C9lIo.mjs → renderer-BENX0vRC.mjs} +1 -1
  47. package/dist/{renderer-Cn-p1SyO.mjs → renderer-BPbNLPcz.mjs} +2 -2
  48. package/dist/{renderer-Cn-p1SyO.mjs.map → renderer-BPbNLPcz.mjs.map} +1 -1
  49. package/dist/renderer-BPiLdwI1.mjs +3 -0
  50. package/dist/{renderer-BpTwFaja.mjs → renderer-BQZniXw0.mjs} +2 -2
  51. package/dist/{renderer-BpTwFaja.mjs.map → renderer-BQZniXw0.mjs.map} +1 -1
  52. package/dist/{renderer-D3FsnptO.mjs → renderer-BTFPC3UJ.mjs} +1 -1
  53. package/dist/{renderer-BShK_xMJ.mjs → renderer-BdSHGzHj.mjs} +1 -1
  54. package/dist/renderer-BdyMrzUX.mjs +3 -0
  55. package/dist/renderer-BfpdekRn.mjs +3 -0
  56. package/dist/{renderer-CLWAbaCS.mjs → renderer-BjROyv5F.mjs} +2 -2
  57. package/dist/{renderer-CLWAbaCS.mjs.map → renderer-BjROyv5F.mjs.map} +1 -1
  58. package/dist/{renderer-C-F91lPu.mjs → renderer-BkOXe6o6.mjs} +2 -2
  59. package/dist/{renderer-C-F91lPu.mjs.map → renderer-BkOXe6o6.mjs.map} +1 -1
  60. package/dist/{renderer-B52Y2SDC.mjs → renderer-Bq3Geqe3.mjs} +1 -1
  61. package/dist/renderer-BtdnLjKZ.mjs +3 -0
  62. package/dist/{renderer-C5lJvf-h.mjs → renderer-Bu0xOP_v.mjs} +2 -2
  63. package/dist/{renderer-C5lJvf-h.mjs.map → renderer-Bu0xOP_v.mjs.map} +1 -1
  64. package/dist/{renderer-CM5c8a7B.mjs → renderer-Bv-ljXHc.mjs} +7 -7
  65. package/dist/{renderer-CM5c8a7B.mjs.map → renderer-Bv-ljXHc.mjs.map} +1 -1
  66. package/dist/{renderer-CsE9ztUa.mjs → renderer-C-Bv9nVB.mjs} +2 -2
  67. package/dist/{renderer-CsE9ztUa.mjs.map → renderer-C-Bv9nVB.mjs.map} +1 -1
  68. package/dist/renderer-C0q5UUY7.mjs +3 -0
  69. package/dist/{renderer-DvHpzsUV.mjs → renderer-C5RhNQdr.mjs} +2 -2
  70. package/dist/{renderer-DvHpzsUV.mjs.map → renderer-C5RhNQdr.mjs.map} +1 -1
  71. package/dist/{renderer-doPt4zQZ.mjs → renderer-CIMjMFGm.mjs} +2 -2
  72. package/dist/{renderer-doPt4zQZ.mjs.map → renderer-CIMjMFGm.mjs.map} +1 -1
  73. package/dist/{renderer-L72D1mwv.mjs → renderer-CIQYTiT9.mjs} +2 -2
  74. package/dist/{renderer-L72D1mwv.mjs.map → renderer-CIQYTiT9.mjs.map} +1 -1
  75. package/dist/{renderer-BhfFVqCx.mjs → renderer-CXJxK7HP.mjs} +2 -2
  76. package/dist/{renderer-BhfFVqCx.mjs.map → renderer-CXJxK7HP.mjs.map} +1 -1
  77. package/dist/{renderer-Dntxca07.mjs → renderer-CXZe0lfI.mjs} +2 -2
  78. package/dist/{renderer-Dntxca07.mjs.map → renderer-CXZe0lfI.mjs.map} +1 -1
  79. package/dist/{renderer-Cgy1H0Ql.mjs → renderer-CboM4tba.mjs} +2 -2
  80. package/dist/{renderer-Cgy1H0Ql.mjs.map → renderer-CboM4tba.mjs.map} +1 -1
  81. package/dist/{renderer-BbwOEawB.mjs → renderer-CceiI6P7.mjs} +2 -2
  82. package/dist/{renderer-BbwOEawB.mjs.map → renderer-CceiI6P7.mjs.map} +1 -1
  83. package/dist/renderer-Cg-rJgwM.mjs +3 -0
  84. package/dist/renderer-CkgQArsi.mjs +3 -0
  85. package/dist/{renderer--akPySto.mjs → renderer-CmIySXSN.mjs} +2 -2
  86. package/dist/{renderer--akPySto.mjs.map → renderer-CmIySXSN.mjs.map} +1 -1
  87. package/dist/renderer-CnO9KcmP.mjs +3 -0
  88. package/dist/renderer-Cnp5JCwi.mjs +3 -0
  89. package/dist/renderer-CwiCQzjW.mjs +4 -0
  90. package/dist/renderer-D2LCMZ0l.mjs +3 -0
  91. package/dist/{renderer-CLUPc9do.mjs → renderer-D49-PYDo.mjs} +2 -2
  92. package/dist/{renderer-CLUPc9do.mjs.map → renderer-D49-PYDo.mjs.map} +1 -1
  93. package/dist/{renderer-BNBh4omF.mjs → renderer-D5GsF1LT.mjs} +2 -2
  94. package/dist/{renderer-BNBh4omF.mjs.map → renderer-D5GsF1LT.mjs.map} +1 -1
  95. package/dist/{renderer-Bpf8EGY1.mjs → renderer-D5xelwpw.mjs} +2 -2
  96. package/dist/{renderer-Bpf8EGY1.mjs.map → renderer-D5xelwpw.mjs.map} +1 -1
  97. package/dist/renderer-DBGy4qIh.mjs +3 -0
  98. package/dist/renderer-DBRnvHBV.mjs +3 -0
  99. package/dist/{renderer-BHsEOp1I.mjs → renderer-DDd3cjaz.mjs} +2 -2
  100. package/dist/{renderer-BHsEOp1I.mjs.map → renderer-DDd3cjaz.mjs.map} +1 -1
  101. package/dist/{renderer-7v-ZNKEJ.mjs → renderer-DIfk6m2O.mjs} +2 -2
  102. package/dist/{renderer-7v-ZNKEJ.mjs.map → renderer-DIfk6m2O.mjs.map} +1 -1
  103. package/dist/renderer-DJgrcu3v.mjs +3 -0
  104. package/dist/{renderer-E5D4H5dK.mjs → renderer-DP-xNaYX.mjs} +2 -2
  105. package/dist/{renderer-E5D4H5dK.mjs.map → renderer-DP-xNaYX.mjs.map} +1 -1
  106. package/dist/{renderer-XRGwrdg8.mjs → renderer-DP948J9X.mjs} +2 -2
  107. package/dist/{renderer-XRGwrdg8.mjs.map → renderer-DP948J9X.mjs.map} +1 -1
  108. package/dist/renderer-DTpBOlDA.mjs +3 -0
  109. package/dist/{renderer-DnXQXk-8.mjs → renderer-DVQp5fLG.mjs} +2 -2
  110. package/dist/{renderer-DnXQXk-8.mjs.map → renderer-DVQp5fLG.mjs.map} +1 -1
  111. package/dist/renderer-DWwIX4Mr.mjs +3 -0
  112. package/dist/{renderer-BgrDGRNW.mjs → renderer-DXyaswab.mjs} +2 -2
  113. package/dist/{renderer-BgrDGRNW.mjs.map → renderer-DXyaswab.mjs.map} +1 -1
  114. package/dist/{renderer-0ty5QtXg.mjs → renderer-DbaSgadp.mjs} +2 -2
  115. package/dist/{renderer-0ty5QtXg.mjs.map → renderer-DbaSgadp.mjs.map} +1 -1
  116. package/dist/renderer-DfnacE0H.mjs +3 -0
  117. package/dist/{renderer-B1IXTeF2.mjs → renderer-Dgg6pQGI.mjs} +2 -2
  118. package/dist/{renderer-B1IXTeF2.mjs.map → renderer-Dgg6pQGI.mjs.map} +1 -1
  119. package/dist/{renderer-DJPuwTbS.mjs → renderer-DrgNyCSx.mjs} +2 -2
  120. package/dist/{renderer-DJPuwTbS.mjs.map → renderer-DrgNyCSx.mjs.map} +1 -1
  121. package/dist/{renderer-By91JEn8.mjs → renderer-DxBUppHf.mjs} +38 -38
  122. package/dist/{renderer-By91JEn8.mjs.map → renderer-DxBUppHf.mjs.map} +1 -1
  123. package/dist/renderer-RA8pee2T.mjs +3 -0
  124. package/dist/{renderer-BV_d3D_3.mjs → renderer-U0LJuM9D.mjs} +2 -2
  125. package/dist/{renderer-BV_d3D_3.mjs.map → renderer-U0LJuM9D.mjs.map} +1 -1
  126. package/dist/{renderer-BUJ6uaJE.mjs → renderer-VPK8JnSw.mjs} +2 -2
  127. package/dist/{renderer-BUJ6uaJE.mjs.map → renderer-VPK8JnSw.mjs.map} +1 -1
  128. package/dist/renderer-eH4u4-2c.mjs +3 -0
  129. package/dist/renderer-eWOqFUz9.mjs +3 -0
  130. package/dist/{renderer-CmMNU1-P.mjs → renderer-o4wOvjEC.mjs} +4 -4
  131. package/dist/{renderer-CmMNU1-P.mjs.map → renderer-o4wOvjEC.mjs.map} +1 -1
  132. package/dist/{renderer-DRf4FLSq.mjs → renderer-zwxwjWqa.mjs} +2 -2
  133. package/dist/{renderer-DRf4FLSq.mjs.map → renderer-zwxwjWqa.mjs.map} +1 -1
  134. package/dist/{renderers-CP8CFWDs-CAs5DgWj.mjs → renderers-CP8CFWDs-BQBjaV9O.mjs} +2 -2
  135. package/dist/{renderers-CP8CFWDs-CAs5DgWj.mjs.map → renderers-CP8CFWDs-BQBjaV9O.mjs.map} +1 -1
  136. package/dist/signals/index.mjs +4 -4
  137. package/package.json +54 -54
  138. package/dist/dist-JkiL-qy7.mjs.map +0 -1
  139. package/dist/dist-sHqWCB9M.mjs.map +0 -1
  140. package/dist/renderer-145WIXyW.mjs +0 -3
  141. package/dist/renderer-9W8q4Y8D.mjs +0 -3
  142. package/dist/renderer-B5HBViEG.mjs +0 -3
  143. package/dist/renderer-B7naoaVH.mjs +0 -3
  144. package/dist/renderer-BHYmRBem.mjs +0 -3
  145. package/dist/renderer-BL51bhvQ.mjs +0 -3
  146. package/dist/renderer-ByxrzTRg.mjs +0 -3
  147. package/dist/renderer-CDirzReW.mjs +0 -3
  148. package/dist/renderer-CGCmbeJ2.mjs +0 -3
  149. package/dist/renderer-CO0KsnEg.mjs +0 -3
  150. package/dist/renderer-COO44HDO.mjs +0 -3
  151. package/dist/renderer-C_9SIgZX.mjs +0 -3
  152. package/dist/renderer-CntaTaNq.mjs +0 -3
  153. package/dist/renderer-Cv9JLpL6.mjs +0 -3
  154. package/dist/renderer-D0FWIsWn.mjs +0 -3
  155. package/dist/renderer-D3jUYUDU.mjs +0 -3
  156. package/dist/renderer-D5Je-AeQ.mjs +0 -3
  157. package/dist/renderer-DNPwpmYS.mjs +0 -3
  158. package/dist/renderer-DawVsNLw.mjs +0 -3
  159. package/dist/renderer-Dl_6Kn87.mjs +0 -3
  160. package/dist/renderer-DlrJSfaw.mjs +0 -3
  161. package/dist/renderer-DpScOWGG.mjs +0 -4
  162. package/dist/renderer-DxYOA1MM.mjs +0 -3
  163. package/dist/renderer-S7jOr_jF.mjs +0 -3
  164. package/dist/renderer-kN2TeWks.mjs +0 -3
@@ -1,14 +1,14 @@
1
- import { C as WebGPUAudioProcessor } from "../dist-sHqWCB9M.mjs";
2
- import { t as renderers_default$1 } from "../renderers-CP8CFWDs-CAs5DgWj.mjs";
3
- import { i as mixAudioTracks } from "../dist-JkiL-qy7.mjs";
4
- import { t as renderers_default$2 } from "../renderer-DRf4FLSq.mjs";
5
- import { t as renderers_default$3 } from "../renderer-CLWAbaCS.mjs";
6
- import { t as renderers_default } from "../renderer-CM5c8a7B.mjs";
7
- import { t as renderers_default$4 } from "../renderer-0ty5QtXg.mjs";
8
- import { t as renderers_default$5 } from "../renderer-DJPuwTbS.mjs";
9
- import { t as renderers_default$6 } from "../renderer-DVj8jfmO.mjs";
1
+ import { C as WebGPUAudioProcessor } from "../dist-BQFap0wr.mjs";
2
+ import { t as renderers_default$1 } from "../renderers-CP8CFWDs-BQBjaV9O.mjs";
3
+ import { i as mixAudioTracks } from "../dist-ZVlYkuR4.mjs";
4
+ import { t as renderers_default$2 } from "../renderer-zwxwjWqa.mjs";
5
+ import { t as renderers_default$3 } from "../renderer-BjROyv5F.mjs";
6
+ import { t as renderers_default } from "../renderer-Bv-ljXHc.mjs";
7
+ import { t as renderers_default$4 } from "../renderer-DbaSgadp.mjs";
8
+ import { t as renderers_default$5 } from "../renderer-DrgNyCSx.mjs";
9
+ import { t as renderers_default$6 } from "../renderer-0uccAKQe.mjs";
10
10
  import "../renderer-C2n-EHxg.mjs";
11
- import { t as renderers_default$7 } from "../renderer-Cn-p1SyO.mjs";
11
+ import { t as renderers_default$7 } from "../renderer-BPbNLPcz.mjs";
12
12
  import { i as softLimit, n as mixSfxInto, r as renderSfx, t as encodeStereoWav } from "../audio-TAvPwzLR.mjs";
13
13
 
14
14
  export { WebGPUAudioProcessor, renderers_default as audioFadeRenderer, renderers_default$1 as audioSignalExtractorRenderer, renderers_default$2 as compressorRenderer, renderers_default$3 as delayRenderer, encodeStereoWav, mixAudioTracks, mixSfxInto, renderers_default$4 as noiseGateRenderer, renderers_default$5 as parametricEqRenderer, renderSfx, renderers_default$6 as reverbRenderer, softLimit, renderers_default$7 as stereoPanningRenderer };
@@ -1,6 +1,6 @@
1
1
  import { _t as frameArraySignal } from "./dist-B9Afsv83.mjs";
2
- import { F as ensureDevice, i as AudioSignalComputePipeline } from "./dist-sHqWCB9M.mjs";
3
- import { n as decodeAudioSource } from "./dist-JkiL-qy7.mjs";
2
+ import { F as ensureDevice, i as AudioSignalComputePipeline } from "./dist-BQFap0wr.mjs";
3
+ import { n as decodeAudioSource } from "./dist-ZVlYkuR4.mjs";
4
4
 
5
5
  //#region src/signals/audio.ts
6
6
  const AudioSignal = {
@@ -82,4 +82,4 @@ const AudioSignal = {
82
82
 
83
83
  //#endregion
84
84
  export { AudioSignal as t };
85
- //# sourceMappingURL=audio-D6enPyAG.mjs.map
85
+ //# sourceMappingURL=audio--hi7MiZt.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"audio-D6enPyAG.mjs","names":[],"sources":["../src/signals/audio.ts"],"sourcesContent":["import { decodeAudioSource } from \"@framefields/compositions\";\nimport {\n\ttype FrameSignal,\n\tframeArraySignal,\n\ttype GPUTextureBinding,\n} from \"@framefields/core\";\nimport {\n\ttype AudioSignalComputeConfig,\n\tAudioSignalComputePipeline,\n\tensureDevice,\n} from \"@framefields/webgpu-renderers\";\n\nexport interface AudioSignalOptions extends AudioSignalComputeConfig {\n\tfps?: number;\n\ttargetWidth?: number;\n\tpreviewMode?: \"waveform\" | \"envelope\" | \"beat_markers\" | \"spectrum\";\n}\n\nexport interface ExtractedAudioSignalsBundle {\n\tprimary: FrameSignal<number>;\n\tbeat: FrameSignal<number>;\n\tbass: FrameSignal<number>;\n\tenergy: FrameSignal<number>;\n\tdurationSec: number;\n\tnumFrames: number;\n\tsampleRate: number;\n\ttextureView: unknown;\n\ttexture: unknown;\n\tprimaryBuffer: unknown;\n\tbeatBuffer: unknown;\n\tbassBuffer: unknown;\n\tenergyBuffer: unknown;\n\tseekFrame(frame: number): void;\n}\n\nexport const AudioSignal = {\n\tasync extractFromChannels(\n\t\tchannels: Float32Array[],\n\t\tsampleRate: number,\n\t\toptions: AudioSignalOptions = {},\n\t): Promise<ExtractedAudioSignalsBundle> {\n\t\tconst device = await ensureDevice();\n\t\tconst fps = options.fps ?? 24;\n\t\tconst targetWidth = options.targetWidth ?? 512;\n\n\t\tconst extracted = await AudioSignalComputePipeline.extractFeatures(\n\t\t\tdevice,\n\t\t\tchannels,\n\t\t\tsampleRate,\n\t\t\tfps,\n\t\t\toptions,\n\t\t\ttargetWidth,\n\t\t);\n\n\t\tconst samples = extracted.channelSamples ?? {\n\t\t\tprimary: new Float32Array(extracted.numFrames),\n\t\t\tbeat: new Float32Array(extracted.numFrames),\n\t\t\tbass: new Float32Array(extracted.numFrames),\n\t\t\tenergy: new Float32Array(extracted.numFrames),\n\t\t};\n\n\t\tconst primaryBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_primary\",\n\t\t\tchannel: \"primary\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.primaryBuffer,\n\t\t\tstats: extracted.stats.primary,\n\t\t};\n\t\tconst beatBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_beat\",\n\t\t\tchannel: \"beat\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.beatBuffer,\n\t\t\tstats: extracted.stats.beat,\n\t\t};\n\t\tconst bassBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_bass\",\n\t\t\tchannel: \"bass\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.bassBuffer,\n\t\t\tstats: extracted.stats.bass,\n\t\t};\n\t\tconst energyBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_energy\",\n\t\t\tchannel: \"energy\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.energyBuffer,\n\t\t\tstats: extracted.stats.energy,\n\t\t};\n\n\t\tconst primary = frameArraySignal(samples.primary, fps, primaryBinding);\n\t\tconst beat = frameArraySignal(samples.beat, fps, beatBinding);\n\t\tconst bass = frameArraySignal(samples.bass, fps, bassBinding);\n\t\tconst energy = frameArraySignal(samples.energy, fps, energyBinding);\n\n\t\treturn {\n\t\t\tprimary,\n\t\t\tbeat,\n\t\t\tbass,\n\t\t\tenergy,\n\t\t\tdurationSec: extracted.durationSec,\n\t\t\tnumFrames: extracted.numFrames,\n\t\t\tsampleRate,\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tprimaryBuffer: extracted.primaryBuffer,\n\t\t\tbeatBuffer: extracted.beatBuffer,\n\t\t\tbassBuffer: extracted.bassBuffer,\n\t\t\tenergyBuffer: extracted.energyBuffer,\n\t\t\tseekFrame(frame: number) {\n\t\t\t\tprimary.seekFrame?.(frame);\n\t\t\t\tbeat.seekFrame?.(frame);\n\t\t\t\tbass.seekFrame?.(frame);\n\t\t\t\tenergy.seekFrame?.(frame);\n\t\t\t},\n\t\t};\n\t},\n\n\tasync extract(\n\t\tsource: string,\n\t\toptions: AudioSignalOptions = {},\n\t): Promise<ExtractedAudioSignalsBundle> {\n\t\tconst decoded = await decodeAudioSource(source);\n\t\tif (!decoded || decoded.channels.length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to decode audio source for feature extraction: ${source}`,\n\t\t\t);\n\t\t}\n\t\treturn AudioSignal.extractFromChannels(\n\t\t\tdecoded.channels,\n\t\t\tdecoded.sampleRate,\n\t\t\toptions,\n\t\t);\n\t},\n};\n"],"mappings":";;;;;AAmCA,MAAa,cAAc;CAC1B,MAAM,oBACL,UACA,YACA,UAA8B,EAAE,EACO;EACvC,MAAM,SAAS,MAAM,cAAc;EACnC,MAAM,MAAM,QAAQ,OAAO;EAC3B,MAAM,cAAc,QAAQ,eAAe;EAE3C,MAAM,YAAY,MAAM,2BAA2B,gBAClD,QACA,UACA,YACA,KACA,SACA,YACA;EAED,MAAM,UAAU,UAAU,kBAAkB;GAC3C,SAAS,IAAI,aAAa,UAAU,UAAU;GAC9C,MAAM,IAAI,aAAa,UAAU,UAAU;GAC3C,MAAM,IAAI,aAAa,UAAU,UAAU;GAC3C,QAAQ,IAAI,aAAa,UAAU,UAAU;GAC7C;EAED,MAAM,iBAAoC;GACzC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,cAAiC;GACtC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,cAAiC;GACtC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,gBAAmC;GACxC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EAED,MAAM,UAAU,iBAAiB,QAAQ,SAAS,KAAK,eAAe;EACtE,MAAM,OAAO,iBAAiB,QAAQ,MAAM,KAAK,YAAY;EAC7D,MAAM,OAAO,iBAAiB,QAAQ,MAAM,KAAK,YAAY;EAC7D,MAAM,SAAS,iBAAiB,QAAQ,QAAQ,KAAK,cAAc;AAEnE,SAAO;GACN;GACA;GACA;GACA;GACA,aAAa,UAAU;GACvB,WAAW,UAAU;GACrB;GACA,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,eAAe,UAAU;GACzB,YAAY,UAAU;GACtB,YAAY,UAAU;GACtB,cAAc,UAAU;GACxB,UAAU,OAAe;AACxB,YAAQ,YAAY,MAAM;AAC1B,SAAK,YAAY,MAAM;AACvB,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,MAAM;;GAE1B;;CAGF,MAAM,QACL,QACA,UAA8B,EAAE,EACO;EACvC,MAAM,UAAU,MAAM,kBAAkB,OAAO;AAC/C,MAAI,CAAC,WAAW,QAAQ,SAAS,WAAW,EAC3C,OAAM,IAAI,MACT,yDAAyD,SACzD;AAEF,SAAO,YAAY,oBAClB,QAAQ,UACR,QAAQ,YACR,QACA;;CAEF"}
1
+ {"version":3,"file":"audio--hi7MiZt.mjs","names":[],"sources":["../src/signals/audio.ts"],"sourcesContent":["import { decodeAudioSource } from \"@framefields/compositions\";\nimport {\n\ttype FrameSignal,\n\tframeArraySignal,\n\ttype GPUTextureBinding,\n} from \"@framefields/core\";\nimport {\n\ttype AudioSignalComputeConfig,\n\tAudioSignalComputePipeline,\n\tensureDevice,\n} from \"@framefields/webgpu-renderers\";\n\nexport interface AudioSignalOptions extends AudioSignalComputeConfig {\n\tfps?: number;\n\ttargetWidth?: number;\n\tpreviewMode?: \"waveform\" | \"envelope\" | \"beat_markers\" | \"spectrum\";\n}\n\nexport interface ExtractedAudioSignalsBundle {\n\tprimary: FrameSignal<number>;\n\tbeat: FrameSignal<number>;\n\tbass: FrameSignal<number>;\n\tenergy: FrameSignal<number>;\n\tdurationSec: number;\n\tnumFrames: number;\n\tsampleRate: number;\n\ttextureView: unknown;\n\ttexture: unknown;\n\tprimaryBuffer: unknown;\n\tbeatBuffer: unknown;\n\tbassBuffer: unknown;\n\tenergyBuffer: unknown;\n\tseekFrame(frame: number): void;\n}\n\nexport const AudioSignal = {\n\tasync extractFromChannels(\n\t\tchannels: Float32Array[],\n\t\tsampleRate: number,\n\t\toptions: AudioSignalOptions = {},\n\t): Promise<ExtractedAudioSignalsBundle> {\n\t\tconst device = await ensureDevice();\n\t\tconst fps = options.fps ?? 24;\n\t\tconst targetWidth = options.targetWidth ?? 512;\n\n\t\tconst extracted = await AudioSignalComputePipeline.extractFeatures(\n\t\t\tdevice,\n\t\t\tchannels,\n\t\t\tsampleRate,\n\t\t\tfps,\n\t\t\toptions,\n\t\t\ttargetWidth,\n\t\t);\n\n\t\tconst samples = extracted.channelSamples ?? {\n\t\t\tprimary: new Float32Array(extracted.numFrames),\n\t\t\tbeat: new Float32Array(extracted.numFrames),\n\t\t\tbass: new Float32Array(extracted.numFrames),\n\t\t\tenergy: new Float32Array(extracted.numFrames),\n\t\t};\n\n\t\tconst primaryBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_primary\",\n\t\t\tchannel: \"primary\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.primaryBuffer,\n\t\t\tstats: extracted.stats.primary,\n\t\t};\n\t\tconst beatBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_beat\",\n\t\t\tchannel: \"beat\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.beatBuffer,\n\t\t\tstats: extracted.stats.beat,\n\t\t};\n\t\tconst bassBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_bass\",\n\t\t\tchannel: \"bass\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.bassBuffer,\n\t\t\tstats: extracted.stats.bass,\n\t\t};\n\t\tconst energyBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_energy\",\n\t\t\tchannel: \"energy\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.energyBuffer,\n\t\t\tstats: extracted.stats.energy,\n\t\t};\n\n\t\tconst primary = frameArraySignal(samples.primary, fps, primaryBinding);\n\t\tconst beat = frameArraySignal(samples.beat, fps, beatBinding);\n\t\tconst bass = frameArraySignal(samples.bass, fps, bassBinding);\n\t\tconst energy = frameArraySignal(samples.energy, fps, energyBinding);\n\n\t\treturn {\n\t\t\tprimary,\n\t\t\tbeat,\n\t\t\tbass,\n\t\t\tenergy,\n\t\t\tdurationSec: extracted.durationSec,\n\t\t\tnumFrames: extracted.numFrames,\n\t\t\tsampleRate,\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tprimaryBuffer: extracted.primaryBuffer,\n\t\t\tbeatBuffer: extracted.beatBuffer,\n\t\t\tbassBuffer: extracted.bassBuffer,\n\t\t\tenergyBuffer: extracted.energyBuffer,\n\t\t\tseekFrame(frame: number) {\n\t\t\t\tprimary.seekFrame?.(frame);\n\t\t\t\tbeat.seekFrame?.(frame);\n\t\t\t\tbass.seekFrame?.(frame);\n\t\t\t\tenergy.seekFrame?.(frame);\n\t\t\t},\n\t\t};\n\t},\n\n\tasync extract(\n\t\tsource: string,\n\t\toptions: AudioSignalOptions = {},\n\t): Promise<ExtractedAudioSignalsBundle> {\n\t\tconst decoded = await decodeAudioSource(source);\n\t\tif (!decoded || decoded.channels.length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to decode audio source for feature extraction: ${source}`,\n\t\t\t);\n\t\t}\n\t\treturn AudioSignal.extractFromChannels(\n\t\t\tdecoded.channels,\n\t\t\tdecoded.sampleRate,\n\t\t\toptions,\n\t\t);\n\t},\n};\n"],"mappings":";;;;;AAmCA,MAAa,cAAc;CAC1B,MAAM,oBACL,UACA,YACA,UAA8B,EAAE,EACO;EACvC,MAAM,SAAS,MAAM,cAAc;EACnC,MAAM,MAAM,QAAQ,OAAO;EAC3B,MAAM,cAAc,QAAQ,eAAe;EAE3C,MAAM,YAAY,MAAM,2BAA2B,gBAClD,QACA,UACA,YACA,KACA,SACA,YACA;EAED,MAAM,UAAU,UAAU,kBAAkB;GAC3C,SAAS,IAAI,aAAa,UAAU,UAAU;GAC9C,MAAM,IAAI,aAAa,UAAU,UAAU;GAC3C,MAAM,IAAI,aAAa,UAAU,UAAU;GAC3C,QAAQ,IAAI,aAAa,UAAU,UAAU;GAC7C;EAED,MAAM,iBAAoC;GACzC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,cAAiC;GACtC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,cAAiC;GACtC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,gBAAmC;GACxC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EAED,MAAM,UAAU,iBAAiB,QAAQ,SAAS,KAAK,eAAe;EACtE,MAAM,OAAO,iBAAiB,QAAQ,MAAM,KAAK,YAAY;EAC7D,MAAM,OAAO,iBAAiB,QAAQ,MAAM,KAAK,YAAY;EAC7D,MAAM,SAAS,iBAAiB,QAAQ,QAAQ,KAAK,cAAc;AAEnE,SAAO;GACN;GACA;GACA;GACA;GACA,aAAa,UAAU;GACvB,WAAW,UAAU;GACrB;GACA,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,eAAe,UAAU;GACzB,YAAY,UAAU;GACtB,YAAY,UAAU;GACtB,cAAc,UAAU;GACxB,UAAU,OAAe;AACxB,YAAQ,YAAY,MAAM;AAC1B,SAAK,YAAY,MAAM;AACvB,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,MAAM;;GAE1B;;CAGF,MAAM,QACL,QACA,UAA8B,EAAE,EACO;EACvC,MAAM,UAAU,MAAM,kBAAkB,OAAO;AAC/C,MAAI,CAAC,WAAW,QAAQ,SAAS,WAAW,EAC3C,OAAM,IAAI,MACT,yDAAyD,SACzD;AAEF,SAAO,YAAY,oBAClB,QAAQ,UACR,QAAQ,YACR,QACA;;CAEF"}
@@ -6789,7 +6789,8 @@ var SlugGeometry = class SlugGeometry$1 {
6789
6789
  }
6790
6790
  currentLineWidth += tokenWidth;
6791
6791
  } else {
6792
- if (currentLineWidth > 0 && currentLineWidth + tokenWidth > maxWidth) {
6792
+ const tokenVisualWidth = tokenGlyphs.length > 0 && letterSpacing > 0 ? tokenWidth - letterSpacing : tokenWidth;
6793
+ if (currentLineWidth > 0 && currentLineWidth + tokenVisualWidth > maxWidth) {
6793
6794
  lines.push({
6794
6795
  glyphs: currentLineGlyphs,
6795
6796
  width: currentLineWidth
@@ -6917,10 +6918,9 @@ var SlugGeometry = class SlugGeometry$1 {
6917
6918
  if (emojiRight > (lineWidths.get(emoji$1.lineIndex) ?? 0)) lineWidths.set(emoji$1.lineIndex, emojiRight);
6918
6919
  }
6919
6920
  for (const w of lineWidths.values()) if (w > contentWidth) contentWidth = w;
6920
- if (letterSpacing > 0) contentWidth += letterSpacing;
6921
6921
  return {
6922
- width: Math.ceil(contentWidth) + 2,
6923
- height: Math.ceil(layout.totalHeight) + 2,
6922
+ width: Math.ceil(contentWidth),
6923
+ height: Math.ceil(layout.totalHeight),
6924
6924
  layout
6925
6925
  };
6926
6926
  }
@@ -7057,7 +7057,10 @@ var SlugGeometry = class SlugGeometry$1 {
7057
7057
  currentLineWidth += g$1.advance + g$1.letterSpacing;
7058
7058
  }
7059
7059
  } else {
7060
- if (currentLineWidth > 0 && currentLineWidth + token.width > maxWidth) {
7060
+ const lastG = token.glyphs[token.glyphs.length - 1];
7061
+ const trailingLs = lastG && lastG.letterSpacing > 0 ? lastG.letterSpacing : 0;
7062
+ const tokenVisualWidth = token.width - trailingLs;
7063
+ if (currentLineWidth > 0 && currentLineWidth + tokenVisualWidth > maxWidth) {
7061
7064
  lines.push({
7062
7065
  glyphs: currentLineGlyphs,
7063
7066
  width: currentLineWidth
@@ -27578,4 +27581,4 @@ var ScreenSpaceRelightPipeline = class {
27578
27581
 
27579
27582
  //#endregion
27580
27583
  export { registerHeadlessFont as $, drawLottieNode as A, inputStore as B, WebGPUAudioProcessor as C, drawCaptionNode as D, colorMatrixWgsl as E, ensureDevice as F, lutStore as G, loadFBX as H, generateExtrudedTextGeometry as I, parseColor as J, measureMaxCaptionHeight as K, getHeadlessFontPath as L, drawSignalNode as M, drawSvgNode as N, drawGifNode as O, drawVideoNode as P, poseNodes as Q, getRenderer2D as R, Vector3Math as S, clearAllVideoCache as T, loadModel3D as U, jointMatrices as V, loadOBJ as W, parseMTL as X, parseFBX as Y, parseOBJ as Z, ShadowPipeline as _, Camera3D as a, getEnv as at, SlugGeometry as b, Light3D as c, NodeSurfaceProvider as d, shaderStore as et, Path3D as f, ScreenSpaceRelightPipeline as g, SSAOPipeline as h, AudioSignalComputePipeline as i, GetFontAssetUrl as it, drawParagraphNode as j, drawImageNode as k, Matrix4Math as l, Renderer3D as m, AudioLatentTrackCache as n, srtLoader as nt, EffectPipeline as o, resolveMediaSourceUrl as ot, Renderer2D as p, mediaDecoderCache as q, AudioMeshDeformPipeline as r, textureCache as rt, GlassPipeline as s, AudioLatentEngine as t, signalRegistry as tt, MotionBlurPipeline as u, SignalRegistry as v, buildWGSLSignalFn as w, SlugPipeline as x, SlugFontCache as y, initHeadlessWebGPU as z };
27581
- //# sourceMappingURL=dist-sHqWCB9M.mjs.map
27584
+ //# sourceMappingURL=dist-BQFap0wr.mjs.map