@jadujoel/web-audio-clip-node 0.1.6 → 0.1.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 (439) hide show
  1. package/README.md +77 -32
  2. package/dist/App.d.ts +6 -0
  3. package/dist/App.js +179 -0
  4. package/dist/audio/ClipNode.d.ts +2 -0
  5. package/dist/audio/ClipNode.js +6 -1
  6. package/dist/audio/processor-code.d.ts +1 -1
  7. package/dist/audio/processor-code.js +1 -1
  8. package/dist/audio/processor-kernel.js +26 -9
  9. package/dist/audio/processor.js +9 -0
  10. package/dist/audio/version.d.ts +1 -1
  11. package/dist/audio/version.js +1 -1
  12. package/dist/lib.bundle.js +3 -3
  13. package/dist/lib.bundle.js.map +3 -3
  14. package/dist/processor.js +2 -2
  15. package/dist/processor.js.map +4 -4
  16. package/dist/streaming.d.ts +6 -0
  17. package/dist/streaming.js +32 -0
  18. package/dist/workers/framed-raw-opus.d.ts +13 -0
  19. package/dist/workers/framed-raw-opus.js +68 -0
  20. package/dist/workers/mp3-decode-worker.d.ts +1 -0
  21. package/dist/workers/mp3-decode-worker.js +254 -0
  22. package/dist/workers/mp3-decode-worker.min.js +1 -0
  23. package/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
  24. package/dist/workers/ogg-opus-decode-worker.js +398 -0
  25. package/dist/workers/ogg-opus-decode-worker.min.js +1 -0
  26. package/dist/workers/opus-worker-common.d.ts +45 -0
  27. package/dist/workers/opus-worker-common.js +226 -0
  28. package/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
  29. package/dist/workers/raw-opus-framed-decode-worker.js +119 -0
  30. package/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
  31. package/dist/workers/webm-opus-decode-worker.d.ts +1 -0
  32. package/dist/workers/webm-opus-decode-worker.js +97 -0
  33. package/dist/workers/webm-opus-decode-worker.min.js +1 -0
  34. package/dist/workers/webm-opus-parser.d.ts +49 -0
  35. package/dist/workers/webm-opus-parser.js +369 -0
  36. package/dist/workers/worker-utils.d.ts +11 -0
  37. package/dist/workers/worker-utils.js +55 -0
  38. package/examples/README.md +12 -4
  39. package/examples/cdn-vanilla/README.md +10 -6
  40. package/examples/cdn-vanilla/index.html +1065 -33
  41. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/LICENSE +21 -0
  42. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/README.md +197 -0
  43. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/App.d.ts +6 -0
  44. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/App.js +179 -0
  45. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.d.ts +88 -0
  46. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.js +317 -0
  47. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.d.ts +1 -0
  48. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.js +2 -0
  49. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.d.ts +43 -0
  50. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.js +892 -0
  51. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.d.ts +1 -0
  52. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.js +103 -0
  53. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.d.ts +192 -0
  54. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.js +9 -0
  55. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.d.ts +22 -0
  56. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.js +128 -0
  57. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.d.ts +1 -0
  58. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.js +2 -0
  59. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.d.ts +6 -0
  60. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.js +17 -0
  61. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.d.ts +28 -0
  62. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.js +99 -0
  63. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.d.ts +17 -0
  64. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.js +73 -0
  65. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.d.ts +26 -0
  66. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.js +74 -0
  67. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.d.ts +10 -0
  68. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.js +44 -0
  69. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.d.ts +14 -0
  70. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.js +6 -0
  71. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.d.ts +12 -0
  72. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.js +48 -0
  73. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.d.ts +10 -0
  74. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.js +44 -0
  75. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.d.ts +10 -0
  76. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.js +50 -0
  77. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.d.ts +10 -0
  78. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.js +44 -0
  79. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.d.ts +13 -0
  80. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.js +20 -0
  81. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.d.ts +18 -0
  82. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.js +174 -0
  83. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.d.ts +14 -0
  84. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.js +9 -0
  85. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.d.ts +31 -0
  86. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.js +214 -0
  87. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.d.ts +2 -0
  88. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.js +80 -0
  89. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.d.ts +20 -0
  90. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.js +51 -0
  91. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.d.ts +1 -0
  92. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.js +17 -0
  93. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.d.ts +6 -0
  94. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.js +39 -0
  95. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.d.ts +31 -0
  96. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.js +338 -0
  97. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.d.ts +15 -0
  98. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.js +17 -0
  99. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js +6 -0
  100. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js.map +7 -0
  101. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib.d.ts +16 -0
  102. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib.js +16 -0
  103. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js +4 -0
  104. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js.map +12 -0
  105. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.d.ts +63 -0
  106. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.js +71 -0
  107. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.d.ts +6 -0
  108. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.js +32 -0
  109. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css +739 -0
  110. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css.d.ts +3 -0
  111. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.d.ts +13 -0
  112. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.js +68 -0
  113. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.d.ts +1 -0
  114. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.js +254 -0
  115. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.min.js +1 -0
  116. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
  117. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.js +398 -0
  118. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.min.js +1 -0
  119. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.d.ts +45 -0
  120. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.js +226 -0
  121. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
  122. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.js +119 -0
  123. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
  124. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.d.ts +1 -0
  125. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.js +97 -0
  126. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.min.js +1 -0
  127. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.d.ts +49 -0
  128. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.js +369 -0
  129. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.d.ts +11 -0
  130. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.js +55 -0
  131. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/package.json +104 -0
  132. package/examples/index.html +253 -7
  133. package/examples/playground/README.md +9 -0
  134. package/examples/playground/index.html +14 -0
  135. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/LICENSE +21 -0
  136. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/README.md +197 -0
  137. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/App.d.ts +6 -0
  138. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/App.js +179 -0
  139. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.d.ts +88 -0
  140. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.js +317 -0
  141. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.d.ts +1 -0
  142. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.js +2 -0
  143. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.d.ts +43 -0
  144. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.js +892 -0
  145. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.d.ts +1 -0
  146. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.js +103 -0
  147. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.d.ts +192 -0
  148. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.js +9 -0
  149. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.d.ts +22 -0
  150. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.js +128 -0
  151. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.d.ts +1 -0
  152. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.js +2 -0
  153. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.d.ts +6 -0
  154. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.js +17 -0
  155. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.d.ts +28 -0
  156. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.js +99 -0
  157. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.d.ts +17 -0
  158. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.js +73 -0
  159. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.d.ts +26 -0
  160. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.js +74 -0
  161. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.d.ts +10 -0
  162. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.js +44 -0
  163. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.d.ts +14 -0
  164. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.js +6 -0
  165. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.d.ts +12 -0
  166. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.js +48 -0
  167. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.d.ts +10 -0
  168. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.js +44 -0
  169. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.d.ts +10 -0
  170. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.js +50 -0
  171. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.d.ts +10 -0
  172. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.js +44 -0
  173. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.d.ts +13 -0
  174. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.js +20 -0
  175. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.d.ts +18 -0
  176. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.js +174 -0
  177. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.d.ts +14 -0
  178. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.js +9 -0
  179. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.d.ts +31 -0
  180. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.js +214 -0
  181. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.d.ts +2 -0
  182. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.js +80 -0
  183. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.d.ts +20 -0
  184. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.js +51 -0
  185. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.d.ts +1 -0
  186. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.js +17 -0
  187. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.d.ts +6 -0
  188. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.js +39 -0
  189. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.d.ts +31 -0
  190. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.js +338 -0
  191. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.d.ts +15 -0
  192. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.js +17 -0
  193. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js +6 -0
  194. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js.map +7 -0
  195. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib.d.ts +16 -0
  196. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib.js +16 -0
  197. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js +4 -0
  198. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js.map +12 -0
  199. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.d.ts +63 -0
  200. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.js +71 -0
  201. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.d.ts +6 -0
  202. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.js +32 -0
  203. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css +739 -0
  204. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css.d.ts +3 -0
  205. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.d.ts +13 -0
  206. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.js +68 -0
  207. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.d.ts +1 -0
  208. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.js +254 -0
  209. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.min.js +1 -0
  210. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
  211. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.js +398 -0
  212. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.min.js +1 -0
  213. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.d.ts +45 -0
  214. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.js +226 -0
  215. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
  216. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.js +119 -0
  217. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
  218. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.d.ts +1 -0
  219. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.js +97 -0
  220. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.min.js +1 -0
  221. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.d.ts +49 -0
  222. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.js +369 -0
  223. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.d.ts +11 -0
  224. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.js +55 -0
  225. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/package.json +104 -0
  226. package/examples/playground/package.json +19 -0
  227. package/examples/playground/src/App.tsx +442 -0
  228. package/examples/playground/src/main.tsx +9 -0
  229. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/LICENSE +21 -0
  230. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/README.md +197 -0
  231. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/App.d.ts +6 -0
  232. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/App.js +179 -0
  233. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.d.ts +88 -0
  234. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.js +317 -0
  235. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.d.ts +1 -0
  236. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.js +2 -0
  237. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.d.ts +43 -0
  238. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.js +892 -0
  239. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.d.ts +1 -0
  240. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.js +103 -0
  241. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.d.ts +192 -0
  242. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.js +9 -0
  243. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.d.ts +22 -0
  244. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.js +128 -0
  245. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.d.ts +1 -0
  246. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.js +2 -0
  247. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.d.ts +6 -0
  248. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.js +17 -0
  249. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.d.ts +28 -0
  250. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.js +99 -0
  251. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.d.ts +17 -0
  252. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.js +73 -0
  253. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.d.ts +26 -0
  254. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.js +74 -0
  255. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.d.ts +10 -0
  256. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.js +44 -0
  257. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.d.ts +14 -0
  258. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.js +6 -0
  259. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.d.ts +12 -0
  260. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.js +48 -0
  261. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.d.ts +10 -0
  262. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.js +44 -0
  263. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.d.ts +10 -0
  264. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.js +50 -0
  265. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.d.ts +10 -0
  266. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.js +44 -0
  267. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.d.ts +13 -0
  268. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.js +20 -0
  269. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.d.ts +18 -0
  270. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.js +174 -0
  271. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.d.ts +14 -0
  272. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.js +9 -0
  273. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.d.ts +31 -0
  274. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.js +214 -0
  275. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.d.ts +2 -0
  276. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.js +80 -0
  277. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.d.ts +20 -0
  278. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.js +51 -0
  279. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.d.ts +1 -0
  280. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.js +17 -0
  281. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.d.ts +6 -0
  282. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.js +39 -0
  283. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.d.ts +31 -0
  284. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.js +338 -0
  285. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.d.ts +15 -0
  286. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.js +17 -0
  287. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js +6 -0
  288. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js.map +7 -0
  289. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib.d.ts +16 -0
  290. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib.js +16 -0
  291. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js +4 -0
  292. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js.map +12 -0
  293. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.d.ts +63 -0
  294. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.js +71 -0
  295. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.d.ts +6 -0
  296. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.js +32 -0
  297. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css +739 -0
  298. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css.d.ts +3 -0
  299. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.d.ts +13 -0
  300. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.js +68 -0
  301. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.d.ts +1 -0
  302. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.js +254 -0
  303. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.min.js +1 -0
  304. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
  305. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.js +398 -0
  306. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.min.js +1 -0
  307. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.d.ts +45 -0
  308. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.js +226 -0
  309. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
  310. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.js +119 -0
  311. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
  312. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.d.ts +1 -0
  313. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.js +97 -0
  314. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.min.js +1 -0
  315. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.d.ts +49 -0
  316. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.js +369 -0
  317. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.d.ts +11 -0
  318. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.js +55 -0
  319. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/package.json +104 -0
  320. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/LICENSE +21 -0
  321. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/README.md +197 -0
  322. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/App.d.ts +6 -0
  323. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/App.js +179 -0
  324. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.d.ts +88 -0
  325. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.js +317 -0
  326. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.d.ts +1 -0
  327. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.js +2 -0
  328. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.d.ts +43 -0
  329. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.js +892 -0
  330. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.d.ts +1 -0
  331. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.js +103 -0
  332. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.d.ts +192 -0
  333. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.js +9 -0
  334. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.d.ts +22 -0
  335. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.js +128 -0
  336. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.d.ts +1 -0
  337. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.js +2 -0
  338. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.d.ts +6 -0
  339. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.js +17 -0
  340. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.d.ts +28 -0
  341. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.js +99 -0
  342. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.d.ts +17 -0
  343. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.js +73 -0
  344. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.d.ts +26 -0
  345. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.js +74 -0
  346. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.d.ts +10 -0
  347. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.js +44 -0
  348. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.d.ts +14 -0
  349. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.js +6 -0
  350. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.d.ts +12 -0
  351. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.js +48 -0
  352. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.d.ts +10 -0
  353. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.js +44 -0
  354. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.d.ts +10 -0
  355. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.js +50 -0
  356. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.d.ts +10 -0
  357. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.js +44 -0
  358. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.d.ts +13 -0
  359. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.js +20 -0
  360. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.d.ts +18 -0
  361. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.js +174 -0
  362. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.d.ts +14 -0
  363. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.js +9 -0
  364. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.d.ts +31 -0
  365. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.js +214 -0
  366. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.d.ts +2 -0
  367. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.js +80 -0
  368. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.d.ts +20 -0
  369. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.js +51 -0
  370. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.d.ts +1 -0
  371. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.js +17 -0
  372. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.d.ts +6 -0
  373. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.js +39 -0
  374. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.d.ts +31 -0
  375. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.js +338 -0
  376. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.d.ts +15 -0
  377. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.js +17 -0
  378. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js +6 -0
  379. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js.map +7 -0
  380. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib.d.ts +16 -0
  381. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib.js +16 -0
  382. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js +4 -0
  383. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js.map +12 -0
  384. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.d.ts +63 -0
  385. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.js +71 -0
  386. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.d.ts +6 -0
  387. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.js +32 -0
  388. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css +739 -0
  389. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css.d.ts +3 -0
  390. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.d.ts +13 -0
  391. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.js +68 -0
  392. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.d.ts +1 -0
  393. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.js +254 -0
  394. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.min.js +1 -0
  395. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
  396. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.js +398 -0
  397. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.min.js +1 -0
  398. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.d.ts +45 -0
  399. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.js +226 -0
  400. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
  401. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.js +119 -0
  402. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
  403. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.d.ts +1 -0
  404. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.js +97 -0
  405. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.min.js +1 -0
  406. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.d.ts +49 -0
  407. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.js +369 -0
  408. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.d.ts +11 -0
  409. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.js +55 -0
  410. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/package.json +104 -0
  411. package/examples/self-hosted/public/processor.js +2 -2
  412. package/examples/streaming/README.md +25 -0
  413. package/examples/streaming/build-worker.ts +49 -0
  414. package/examples/streaming/framed-raw-opus.ts +95 -0
  415. package/examples/streaming/index.html +16 -0
  416. package/examples/streaming/mp3-decode-worker.ts +326 -0
  417. package/examples/streaming/ogg-opus-decode-worker.ts +479 -0
  418. package/examples/streaming/opus-worker-common.ts +278 -0
  419. package/examples/streaming/package.json +20 -0
  420. package/examples/streaming/raw-opus-framed-decode-worker.ts +148 -0
  421. package/examples/streaming/src/App.tsx +726 -0
  422. package/examples/streaming/src/clip-node-lib.ts +33 -0
  423. package/examples/streaming/src/framedRawOpus.test.ts +74 -0
  424. package/examples/streaming/src/main.tsx +6 -0
  425. package/examples/streaming/src/react-dom-runtime.d.ts +1 -0
  426. package/examples/streaming/src/react-dom-runtime.js +1 -0
  427. package/examples/streaming/src/react-runtime.d.ts +2 -0
  428. package/examples/streaming/src/react-runtime.js +7 -0
  429. package/examples/streaming/src/streamFormat.test.ts +13 -0
  430. package/examples/streaming/src/streamFormat.ts +14 -0
  431. package/examples/streaming/src/streamTimeline.test.ts +74 -0
  432. package/examples/streaming/src/streamTimeline.ts +76 -0
  433. package/examples/streaming/src/useStreamingClipNode.ts +540 -0
  434. package/examples/streaming/src/webmOpusParser.test.ts +153 -0
  435. package/examples/streaming/tsconfig.json +19 -0
  436. package/examples/streaming/webm-opus-decode-worker.ts +123 -0
  437. package/examples/streaming/webm-opus-parser.ts +461 -0
  438. package/examples/streaming/worker-utils.ts +45 -0
  439. package/package.json +13 -2
@@ -0,0 +1,179 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useState } from "react";
3
+ import { isTempoRelativeSnap, remapTempoRelativeValue } from "./audio/utils.js";
4
+ import { ControlSection } from "./components/ControlSection.js";
5
+ import { DetuneControl } from "./components/DetuneControl.js";
6
+ import { DisplayPanel } from "./components/DisplayPanel.js";
7
+ import { FilterControl } from "./components/FilterControl.js";
8
+ import { GainControl } from "./components/GainControl.js";
9
+ import { PanControl } from "./components/PanControl.js";
10
+ import { PlaybackRateControl } from "./components/PlaybackRateControl.js";
11
+ import { PlayheadSlider } from "./components/PlayheadSlider.js";
12
+ import { TransportButtons } from "./components/TransportButtons.js";
13
+ import { controlDefs, loopControlDefs } from "./controls/controlDefs.js";
14
+ import { getActiveLinkedControls, getLinkedControlPairForControl, getLinkedControlUpdates, loopLinkedControlPairs, transportLinkedControlPairs, } from "./controls/linkedControlPairs.js";
15
+ import { useClipNode } from "./hooks/useClipNode.js";
16
+ import { useClipControls } from "./store/clipStore.js";
17
+ function buildControlUpdates(keys, value) {
18
+ return Object.fromEntries(keys.map((key) => [key, value]));
19
+ }
20
+ export function App({ useClipNodeImpl = useClipNode } = {}) {
21
+ const controls = useClipControls();
22
+ const node = useClipNodeImpl({
23
+ values: controls.values,
24
+ enabled: controls.enabled,
25
+ loop: controls.loop,
26
+ setValue: controls.setValue,
27
+ });
28
+ const [tempoDraft, setTempoDraft] = useState(() => String(controls.tempo));
29
+ const [isEditingTempo, setIsEditingTempo] = useState(false);
30
+ // Persist audioDuration into maxs state for locked controls (for localStorage persistence)
31
+ useEffect(() => {
32
+ if (node.audioDuration == null)
33
+ return;
34
+ for (const key of Object.keys(controls.maxLocked)) {
35
+ if (controls.maxLocked[key]) {
36
+ controls.setMax(key, node.audioDuration);
37
+ }
38
+ }
39
+ }, [node.audioDuration, controls.maxLocked, controls.setMax]);
40
+ useEffect(() => {
41
+ if (isEditingTempo)
42
+ return;
43
+ setTempoDraft(String(controls.tempo));
44
+ }, [controls.tempo, isEditingTempo]);
45
+ const handleValueChange = useCallback((key, val) => {
46
+ const linkedPair = getLinkedControlPairForControl(key);
47
+ if (linkedPair && controls.linkedPairs[linkedPair.key]) {
48
+ const effectiveMaxs = { ...controls.maxs };
49
+ for (const linkedKey of linkedPair.controls) {
50
+ if (controls.maxLocked[linkedKey] && node.audioDuration != null) {
51
+ effectiveMaxs[linkedKey] = node.audioDuration;
52
+ }
53
+ }
54
+ const nextValues = getLinkedControlUpdates({
55
+ pair: linkedPair,
56
+ changedKey: key,
57
+ nextValue: val,
58
+ values: controls.values,
59
+ mins: controls.mins,
60
+ maxs: effectiveMaxs,
61
+ });
62
+ controls.setValuesPartial(nextValues);
63
+ node.applyValues(nextValues);
64
+ return;
65
+ }
66
+ node.applyValue(key, val);
67
+ }, [
68
+ controls.linkedPairs,
69
+ controls.maxLocked,
70
+ controls.maxs,
71
+ controls.mins,
72
+ controls.setValuesPartial,
73
+ controls.values,
74
+ node.applyValue,
75
+ node.applyValues,
76
+ node.audioDuration,
77
+ ]);
78
+ const handleTempoChange = useCallback((nextTempo) => {
79
+ if (!Number.isFinite(nextTempo) || nextTempo <= 0)
80
+ return;
81
+ const previousTempo = controls.tempo;
82
+ if (nextTempo === previousTempo)
83
+ return;
84
+ const changedValues = {};
85
+ for (const key of Object.keys(controls.values)) {
86
+ const snap = controls.snaps[key];
87
+ if (!isTempoRelativeSnap(snap))
88
+ continue;
89
+ const effectiveMax = controls.maxLocked[key] && node.audioDuration != null
90
+ ? node.audioDuration
91
+ : controls.maxs[key];
92
+ const nextValue = remapTempoRelativeValue(controls.values[key], snap, previousTempo, nextTempo, controls.mins[key], effectiveMax);
93
+ if (nextValue !== controls.values[key]) {
94
+ changedValues[key] = nextValue;
95
+ }
96
+ }
97
+ controls.setTempoAndValues(nextTempo, changedValues);
98
+ node.applyValues(changedValues);
99
+ }, [
100
+ controls.maxLocked,
101
+ controls.maxs,
102
+ controls.mins,
103
+ controls.setTempoAndValues,
104
+ controls.snaps,
105
+ controls.tempo,
106
+ controls.values,
107
+ node.applyValues,
108
+ node.audioDuration,
109
+ ]);
110
+ const commitTempoDraft = useCallback(() => {
111
+ const nextTempo = Number(tempoDraft.trim());
112
+ setIsEditingTempo(false);
113
+ if (!Number.isFinite(nextTempo) || nextTempo <= 0) {
114
+ setTempoDraft(String(controls.tempo));
115
+ return;
116
+ }
117
+ handleTempoChange(nextTempo);
118
+ setTempoDraft(String(nextTempo));
119
+ }, [controls.tempo, handleTempoChange, tempoDraft]);
120
+ const handleSnapChange = useCallback((key, snap) => {
121
+ const linkedKeys = getActiveLinkedControls(key, controls.linkedPairs);
122
+ controls.setSnapsPartial(buildControlUpdates(linkedKeys, snap));
123
+ }, [controls.linkedPairs, controls.setSnapsPartial]);
124
+ const handleToggle = useCallback((key, on) => {
125
+ const linkedKeys = getActiveLinkedControls(key, controls.linkedPairs);
126
+ controls.setEnabledPartial(buildControlUpdates(linkedKeys, on));
127
+ for (const linkedKey of linkedKeys) {
128
+ node.applyToggle(linkedKey, on);
129
+ }
130
+ }, [controls.linkedPairs, controls.setEnabledPartial, node.applyToggle]);
131
+ const handleMinChange = useCallback((key, val) => {
132
+ const linkedKeys = getActiveLinkedControls(key, controls.linkedPairs);
133
+ controls.setMinsPartial(buildControlUpdates(linkedKeys, val));
134
+ }, [controls.linkedPairs, controls.setMinsPartial]);
135
+ const handleMaxChange = useCallback((key, val) => {
136
+ const linkedKeys = getActiveLinkedControls(key, controls.linkedPairs);
137
+ controls.setMaxsPartial(buildControlUpdates(linkedKeys, val));
138
+ }, [controls.linkedPairs, controls.setMaxsPartial]);
139
+ const handleLoopChange = useCallback((checked) => {
140
+ controls.setLoop(checked);
141
+ node.setLoopOnNode(checked);
142
+ }, [controls.setLoop, node.setLoopOnNode]);
143
+ const handleMaxLockedChange = useCallback((key, locked) => {
144
+ const linkedKeys = getActiveLinkedControls(key, controls.linkedPairs);
145
+ controls.setMaxLockedPartial(buildControlUpdates(linkedKeys, locked));
146
+ if (locked && node.audioDuration != null) {
147
+ controls.setMaxsPartial(buildControlUpdates(linkedKeys, node.audioDuration));
148
+ }
149
+ }, [
150
+ controls.linkedPairs,
151
+ controls.setMaxLockedPartial,
152
+ controls.setMaxsPartial,
153
+ node.audioDuration,
154
+ ]);
155
+ const handlePlayheadChange = useCallback((v) => handleValueChange("playhead", v), [handleValueChange]);
156
+ const handlePlaybackRateChange = useCallback((v) => handleValueChange("playbackRate", v), [handleValueChange]);
157
+ const handlePlaybackRateToggle = useCallback((on) => handleToggle("playbackRate", on), [handleToggle]);
158
+ const handleDetuneChange = useCallback((v) => handleValueChange("detune", v), [handleValueChange]);
159
+ const handleDetuneToggle = useCallback((on) => handleToggle("detune", on), [handleToggle]);
160
+ const handleGainChange = useCallback((v) => handleValueChange("gain", v), [handleValueChange]);
161
+ const handleGainToggle = useCallback((on) => handleToggle("gain", on), [handleToggle]);
162
+ const handlePanChange = useCallback((v) => handleValueChange("pan", v), [handleValueChange]);
163
+ const handlePanToggle = useCallback((on) => handleToggle("pan", on), [handleToggle]);
164
+ const handleLowpassChange = useCallback((v) => handleValueChange("lowpass", v), [handleValueChange]);
165
+ const handleLowpassToggle = useCallback((on) => handleToggle("lowpass", on), [handleToggle]);
166
+ const handleHighpassChange = useCallback((v) => handleValueChange("highpass", v), [handleValueChange]);
167
+ const handleHighpassToggle = useCallback((on) => handleToggle("highpass", on), [handleToggle]);
168
+ return (_jsxs("main", { children: [_jsx(DisplayPanel, { nodeState: node.nodeState, statusMessage: node.statusMessage, soundName: node.soundName, currentTime: node.infoCurrentTime, currentFrame: node.infoCurrentFrame, timesLooped: node.infoTimesLooped, latency: node.infoLatency, timeTaken: node.infoTimeTaken }), _jsx(TransportButtons, { nodeState: node.nodeState, onStart: node.start, onStop: node.stop, onPause: node.pause, onResume: node.resume, onDispose: node.dispose, onLog: node.logState, onLoadSound: node.loadSound }), _jsxs("fieldset", { className: "control-group tempo-group", children: [_jsx("legend", { children: "Tempo" }), _jsx("label", { htmlFor: "tempo", className: "tempo-label", children: "BPM" }), _jsx("input", { id: "tempo", type: "number", min: 20, max: 999, step: 1, value: tempoDraft, onFocus: () => setIsEditingTempo(true), onChange: (e) => setTempoDraft(e.target.value), onBlur: commitTempoDraft, onKeyDown: (e) => {
169
+ if (e.key === "Enter") {
170
+ commitTempoDraft();
171
+ e.currentTarget.blur();
172
+ }
173
+ if (e.key === "Escape") {
174
+ setIsEditingTempo(false);
175
+ setTempoDraft(String(controls.tempo));
176
+ e.currentTarget.blur();
177
+ }
178
+ }, style: { width: 70 } })] }), _jsx(PlayheadSlider, { value: controls.values.playhead, audioDuration: node.audioDuration, disabled: node.nodeState === "initial" || node.nodeState === "disposed", onChange: handlePlayheadChange }), _jsxs("section", { id: "controls", children: [_jsx(ControlSection, { legend: "Transport", defs: controlDefs, values: controls.values, snaps: controls.snaps, enabled: controls.enabled, mins: controls.mins, maxs: controls.maxs, maxLocked: controls.maxLocked, linked: controls.linkedPairs, linkedPairs: transportLinkedControlPairs, tempo: controls.tempo, audioDuration: node.audioDuration, onValueChange: handleValueChange, onToggle: handleToggle, onLinkedChange: controls.setLinkedPair, onSnapChange: handleSnapChange, onMinChange: handleMinChange, onMaxChange: handleMaxChange, onMaxLockedChange: handleMaxLockedChange }), _jsxs("fieldset", { className: "control-group", children: [_jsx("legend", { children: "Loop" }), _jsxs("div", { className: "loop-row", children: [_jsx("label", { htmlFor: "loop", children: "Loop" }), _jsx("input", { type: "checkbox", id: "loop", checked: controls.loop, onChange: (e) => handleLoopChange(e.target.checked) })] }), controls.loop && (_jsx(ControlSection, { legend: "Controls", defs: loopControlDefs, values: controls.values, snaps: controls.snaps, enabled: controls.enabled, mins: controls.mins, maxs: controls.maxs, maxLocked: controls.maxLocked, linked: controls.linkedPairs, linkedPairs: loopLinkedControlPairs, tempo: controls.tempo, audioDuration: node.audioDuration, onValueChange: handleValueChange, onToggle: handleToggle, onLinkedChange: controls.setLinkedPair, onSnapChange: handleSnapChange, onMinChange: handleMinChange, onMaxChange: handleMaxChange, onMaxLockedChange: handleMaxLockedChange }))] }), _jsxs("fieldset", { className: "control-group", children: [_jsx("legend", { children: "Parameters" }), _jsx(PlaybackRateControl, { value: controls.values.playbackRate, defaultValue: 1, enabled: controls.enabled.playbackRate, onChange: handlePlaybackRateChange, onToggle: handlePlaybackRateToggle }), _jsx(DetuneControl, { value: controls.values.detune, defaultValue: 0, enabled: controls.enabled.detune, onChange: handleDetuneChange, onToggle: handleDetuneToggle }), _jsx(GainControl, { value: controls.values.gain, defaultValue: 0, enabled: controls.enabled.gain, onChange: handleGainChange, onToggle: handleGainToggle }), _jsx(PanControl, { value: controls.values.pan, defaultValue: 0, enabled: controls.enabled.pan, onChange: handlePanChange, onToggle: handlePanToggle }), _jsx(FilterControl, { label: "Lowpass", controlKey: "lowpass", value: controls.values.lowpass, defaultValue: 16384, enabled: controls.enabled.lowpass, onChange: handleLowpassChange, onToggle: handleLowpassToggle }), _jsx(FilterControl, { label: "Highpass", controlKey: "highpass", value: controls.values.highpass, defaultValue: 32, enabled: controls.enabled.highpass, onChange: handleHighpassChange, onToggle: handleHighpassToggle })] })] })] }));
179
+ }
@@ -0,0 +1,88 @@
1
+ import type { ClipNodeState, ClipWorkletOptions, FrameData } from "./types";
2
+ export declare class ClipNode extends AudioWorkletNode {
3
+ onscheduled?: () => void;
4
+ onstarted?: () => void;
5
+ onpaused?: () => void;
6
+ onresumed?: () => void;
7
+ onended?: () => void;
8
+ onlooped?: () => void;
9
+ onstopped?: () => void;
10
+ onframe?: (data: FrameData) => void;
11
+ ondisposed?: () => void;
12
+ onstatechange?: (state: ClipNodeState) => void;
13
+ private _buffer?;
14
+ private _loopStart;
15
+ private _loopEnd;
16
+ private _loop;
17
+ private _offset;
18
+ private _playhead;
19
+ private _fadeIn;
20
+ private _fadeOut;
21
+ private _loopCrossfade;
22
+ private _duration;
23
+ private _previousState;
24
+ private _bufferWriteCursor;
25
+ private _hasStreamingPort;
26
+ timesLooped: number;
27
+ state: ClipNodeState;
28
+ cpu: number;
29
+ constructor(context: BaseAudioContext, options?: ClipWorkletOptions);
30
+ private handleMessage;
31
+ private setState;
32
+ toggleGain(value?: boolean): void;
33
+ togglePlaybackRate(value?: boolean): void;
34
+ toggleDetune(value?: boolean): void;
35
+ togglePan(value?: boolean): void;
36
+ toggleHighpass(value?: boolean): void;
37
+ toggleLowpass(value?: boolean): void;
38
+ toggleFadeIn(value?: boolean): void;
39
+ toggleFadeOut(value?: boolean): void;
40
+ toggleLoopCrossfade(value?: boolean): void;
41
+ toggleLoopStart(value?: boolean): void;
42
+ toggleLoopEnd(value?: boolean): void;
43
+ logState(): void;
44
+ get buffer(): AudioBuffer | undefined;
45
+ set buffer(ab: AudioBuffer);
46
+ transferPort(port: MessagePort): void;
47
+ initializeBuffer(totalLength: number, channels: number, options?: {
48
+ streaming?: boolean;
49
+ }): void;
50
+ replaceBufferRange(startSample: number, channelData: Float32Array[], options?: {
51
+ totalLength?: number | null;
52
+ streamEnded?: boolean;
53
+ }): void;
54
+ appendBufferRange(channelData: Float32Array[], options?: {
55
+ totalLength?: number | null;
56
+ streamEnded?: boolean;
57
+ }): void;
58
+ finalizeBuffer(totalLength?: number): void;
59
+ start(when?: number, offset?: number, duration?: number): void;
60
+ stop(when?: number, initialDelay?: number): void;
61
+ pause(when?: number): void;
62
+ resume(when?: number): void;
63
+ get loop(): boolean;
64
+ set loop(value: boolean);
65
+ get loopStart(): number;
66
+ set loopStart(value: number);
67
+ get loopEnd(): number;
68
+ set loopEnd(value: number);
69
+ get duration(): number;
70
+ set duration(value: number);
71
+ get offset(): number;
72
+ set offset(value: number);
73
+ get playhead(): number;
74
+ set playhead(value: number);
75
+ get playbackRate(): AudioParam;
76
+ get detune(): AudioParam;
77
+ get highpass(): AudioParam;
78
+ get lowpass(): AudioParam;
79
+ get gain(): AudioParam;
80
+ get pan(): AudioParam;
81
+ get fadeIn(): number;
82
+ set fadeIn(value: number);
83
+ get fadeOut(): number;
84
+ set fadeOut(value: number);
85
+ get loopCrossfade(): number;
86
+ set loopCrossfade(value: number);
87
+ dispose(): void;
88
+ }
@@ -0,0 +1,317 @@
1
+ import { audioBufferFromFloat32Array } from "./utils.js";
2
+ export class ClipNode extends AudioWorkletNode {
3
+ onscheduled;
4
+ onstarted;
5
+ onpaused;
6
+ onresumed;
7
+ onended;
8
+ onlooped;
9
+ onstopped;
10
+ onframe;
11
+ ondisposed;
12
+ onstatechange;
13
+ _buffer;
14
+ _loopStart = 0;
15
+ _loopEnd = 0;
16
+ _loop = false;
17
+ _offset = 0;
18
+ _playhead = 0;
19
+ _fadeIn = 0;
20
+ _fadeOut = 0;
21
+ _loopCrossfade = 0;
22
+ _duration = -1;
23
+ _previousState = "initial";
24
+ _bufferWriteCursor = 0;
25
+ _hasStreamingPort = false;
26
+ timesLooped = 0;
27
+ state = "initial";
28
+ cpu = 0;
29
+ constructor(context, options = {}) {
30
+ super(context, "ClipProcessor", {
31
+ numberOfInputs: options.numberOfInputs ?? 0,
32
+ outputChannelCount: options.outputChannelCount ?? [2],
33
+ processorOptions: options.processorOptions,
34
+ channelCount: options.channelCount,
35
+ channelCountMode: options.channelCountMode,
36
+ channelInterpretation: options.channelInterpretation,
37
+ numberOfOutputs: options.numberOfOutputs,
38
+ parameterData: options.parameterData,
39
+ });
40
+ this._buffer = audioBufferFromFloat32Array(this.context, options.processorOptions?.buffer);
41
+ this.port.onmessage = this.handleMessage;
42
+ }
43
+ handleMessage = (message) => {
44
+ const { type, data } = message.data;
45
+ switch (type) {
46
+ case "frame": {
47
+ const [_ct, _cf, ph, tt] = data;
48
+ this._playhead = ph;
49
+ this.cpu = tt;
50
+ this.onframe?.(data);
51
+ break;
52
+ }
53
+ case "scheduled":
54
+ this.setState("scheduled");
55
+ this.onscheduled?.();
56
+ break;
57
+ case "started":
58
+ this.setState("started");
59
+ this.onstarted?.();
60
+ break;
61
+ case "stopped":
62
+ this.setState("stopped");
63
+ this.onstopped?.();
64
+ break;
65
+ case "paused":
66
+ this.setState("paused");
67
+ this.onpaused?.();
68
+ break;
69
+ case "resume":
70
+ this.setState("resumed");
71
+ this.onresumed?.();
72
+ break;
73
+ case "ended":
74
+ this.setState("ended");
75
+ this.onended?.();
76
+ break;
77
+ case "looped":
78
+ this.timesLooped++;
79
+ this.onlooped?.();
80
+ break;
81
+ case "disposed":
82
+ this.setState("disposed");
83
+ break;
84
+ }
85
+ };
86
+ setState(newState) {
87
+ this._previousState = this.state;
88
+ this.state = newState;
89
+ if (this.state !== this._previousState) {
90
+ this.onstatechange?.(this.state);
91
+ }
92
+ }
93
+ toggleGain(value = true) {
94
+ this.port.postMessage({ type: "toggleGain", data: value });
95
+ }
96
+ togglePlaybackRate(value = true) {
97
+ this.port.postMessage({ type: "togglePlaybackRate", data: value });
98
+ }
99
+ toggleDetune(value = true) {
100
+ this.port.postMessage({ type: "toggleDetune", data: value });
101
+ }
102
+ togglePan(value = true) {
103
+ this.port.postMessage({ type: "togglePan", data: value });
104
+ }
105
+ toggleHighpass(value = true) {
106
+ this.port.postMessage({ type: "toggleHighpass", data: value });
107
+ }
108
+ toggleLowpass(value = true) {
109
+ this.port.postMessage({ type: "toggleLowpass", data: value });
110
+ }
111
+ toggleFadeIn(value = true) {
112
+ this.port.postMessage({ type: "toggleFadeIn", data: value });
113
+ }
114
+ toggleFadeOut(value = true) {
115
+ this.port.postMessage({ type: "toggleFadeOut", data: value });
116
+ }
117
+ toggleLoopCrossfade(value = true) {
118
+ this.port.postMessage({ type: "toggleLoopCrossfade", data: value });
119
+ }
120
+ toggleLoopStart(value = true) {
121
+ this.port.postMessage({ type: "toggleLoopStart", data: value });
122
+ }
123
+ toggleLoopEnd(value = true) {
124
+ this.port.postMessage({ type: "toggleLoopEnd", data: value });
125
+ }
126
+ logState() {
127
+ this.port.postMessage({ type: "logState" });
128
+ }
129
+ get buffer() {
130
+ return this._buffer;
131
+ }
132
+ set buffer(ab) {
133
+ this._buffer = ab;
134
+ this._bufferWriteCursor = ab.length;
135
+ if (this._loopStart >= ab.duration) {
136
+ this._loopStart = 0;
137
+ }
138
+ if (this._loopEnd <= this._loopStart || this._loopEnd > ab.duration) {
139
+ this._loopEnd = ab.duration;
140
+ }
141
+ const data = ab.numberOfChannels === 1
142
+ ? [ab.getChannelData(0)]
143
+ : [ab.getChannelData(0), ab.getChannelData(1)];
144
+ this.port.postMessage({ type: "buffer", data });
145
+ this.port.postMessage({ type: "loopStart", data: this._loopStart });
146
+ this.port.postMessage({ type: "loopEnd", data: this._loopEnd });
147
+ }
148
+ transferPort(port) {
149
+ this._hasStreamingPort = true;
150
+ this.port.postMessage({ type: "transferPort", data: port }, [port]);
151
+ }
152
+ initializeBuffer(totalLength, channels, options = {}) {
153
+ this._buffer = this.context.createBuffer(channels, totalLength, this.context.sampleRate);
154
+ this._bufferWriteCursor = 0;
155
+ const duration = totalLength / this.context.sampleRate;
156
+ if (this._loopStart >= duration) {
157
+ this._loopStart = 0;
158
+ }
159
+ if (this._loopEnd <= this._loopStart || this._loopEnd > duration) {
160
+ this._loopEnd = duration;
161
+ }
162
+ this.port.postMessage({
163
+ type: "bufferInit",
164
+ data: {
165
+ channels,
166
+ totalLength,
167
+ streaming: options.streaming ?? true,
168
+ },
169
+ });
170
+ this.port.postMessage({ type: "loopStart", data: this._loopStart });
171
+ this.port.postMessage({ type: "loopEnd", data: this._loopEnd });
172
+ }
173
+ replaceBufferRange(startSample, channelData, options = {}) {
174
+ this.port.postMessage({
175
+ type: "bufferRange",
176
+ data: {
177
+ startSample,
178
+ channelData,
179
+ totalLength: options.totalLength,
180
+ streamEnded: options.streamEnded,
181
+ },
182
+ });
183
+ this._bufferWriteCursor = Math.max(this._bufferWriteCursor, startSample + (channelData[0]?.length ?? 0));
184
+ }
185
+ appendBufferRange(channelData, options = {}) {
186
+ this.replaceBufferRange(this._bufferWriteCursor, channelData, options);
187
+ }
188
+ finalizeBuffer(totalLength) {
189
+ this.port.postMessage({ type: "bufferEnd", data: { totalLength } });
190
+ }
191
+ start(when, offset, duration) {
192
+ if (!this._buffer && !this._hasStreamingPort) {
193
+ console.error("Buffer not set.");
194
+ return;
195
+ }
196
+ this.port.postMessage({ type: "start", data: { when, offset, duration } });
197
+ }
198
+ stop(when = this.context.currentTime, initialDelay = 0) {
199
+ this.port.postMessage({
200
+ type: "stop",
201
+ data: when + initialDelay + this._fadeOut + 0.2,
202
+ });
203
+ }
204
+ pause(when = this.context.currentTime) {
205
+ this.port.postMessage({ type: "pause", data: when });
206
+ }
207
+ resume(when = this.context.currentTime) {
208
+ this.port.postMessage({ type: "resume", data: when });
209
+ }
210
+ get loop() {
211
+ return this._loop;
212
+ }
213
+ set loop(value) {
214
+ if (this._loop !== value) {
215
+ this._loop = value;
216
+ this.port.postMessage({ type: "loop", data: value });
217
+ }
218
+ }
219
+ get loopStart() {
220
+ return this._loopStart;
221
+ }
222
+ set loopStart(value) {
223
+ if (value !== this._loopStart) {
224
+ this._loopStart = value;
225
+ this.port.postMessage({ type: "loopStart", data: value });
226
+ }
227
+ }
228
+ get loopEnd() {
229
+ return this._loopEnd;
230
+ }
231
+ set loopEnd(value) {
232
+ if (value !== this._loopEnd) {
233
+ this._loopEnd = value;
234
+ this.port.postMessage({ type: "loopEnd", data: value });
235
+ }
236
+ }
237
+ get duration() {
238
+ return this._duration ?? this._buffer?.duration ?? -1;
239
+ }
240
+ set duration(value) {
241
+ this._duration = value;
242
+ }
243
+ get offset() {
244
+ return this._offset;
245
+ }
246
+ set offset(value) {
247
+ this._offset = value;
248
+ }
249
+ get playhead() {
250
+ return this._playhead;
251
+ }
252
+ set playhead(value) {
253
+ this.port.postMessage({ type: "playhead", data: value });
254
+ }
255
+ get playbackRate() {
256
+ // biome-ignore lint/style/noNonNullAssertion: it is definitely set in the processor
257
+ return this.parameters.get("playbackRate");
258
+ }
259
+ get detune() {
260
+ // biome-ignore lint/style/noNonNullAssertion: it is definitely set in the processor
261
+ return this.parameters.get("detune");
262
+ }
263
+ get highpass() {
264
+ // biome-ignore lint/style/noNonNullAssertion: it is definitely set in the processor
265
+ return this.parameters.get("highpass");
266
+ }
267
+ get lowpass() {
268
+ // biome-ignore lint/style/noNonNullAssertion: it is definitely set in the processor
269
+ return this.parameters.get("lowpass");
270
+ }
271
+ get gain() {
272
+ // biome-ignore lint/style/noNonNullAssertion: it is definitely set in the processor
273
+ return this.parameters.get("gain");
274
+ }
275
+ get pan() {
276
+ // biome-ignore lint/style/noNonNullAssertion: it is definitely set in the processor
277
+ return this.parameters.get("pan");
278
+ }
279
+ get fadeIn() {
280
+ return this._fadeIn;
281
+ }
282
+ set fadeIn(value) {
283
+ this._fadeIn = value;
284
+ this.port.postMessage({ type: "fadeIn", data: value });
285
+ }
286
+ get fadeOut() {
287
+ return this._fadeOut;
288
+ }
289
+ set fadeOut(value) {
290
+ this._fadeOut = value;
291
+ this.port.postMessage({ type: "fadeOut", data: value });
292
+ }
293
+ get loopCrossfade() {
294
+ return this._loopCrossfade;
295
+ }
296
+ set loopCrossfade(value) {
297
+ this._loopCrossfade = value;
298
+ this.port.postMessage({ type: "loopCrossfade", data: value });
299
+ }
300
+ dispose() {
301
+ this.port.postMessage({ type: "dispose" });
302
+ this.port.close();
303
+ this.ondisposed?.();
304
+ this._buffer = undefined;
305
+ this.onended = undefined;
306
+ this.onframe = undefined;
307
+ this.onlooped = undefined;
308
+ this.onpaused = undefined;
309
+ this.onresumed = undefined;
310
+ this.onstarted = undefined;
311
+ this.onstopped = undefined;
312
+ this.onscheduled = undefined;
313
+ this.onstatechange = undefined;
314
+ this.ondisposed = undefined;
315
+ this.state = "disposed";
316
+ }
317
+ }
@@ -0,0 +1 @@
1
+ export declare const processorCode = "var z={Initial:0,Started:1,Stopped:2,Paused:3,Scheduled:4,Ended:5,Disposed:6};var y=128;function o(V=[]){let F=V[0]?.length??0,A=F>0;return{totalLength:A?F:null,committedLength:A?F:0,streamEnded:A,streaming:!1,writtenSpans:A?[{startSample:0,endSample:F}]:[],pendingWrites:[],lowWaterThreshold:y*4,lowWaterNotified:!1,lastUnderrunSample:null}}function z0(V){return V[0]?.length??0}function a(V){return V.streamBuffer.totalLength??z0(V.buffer)}function P0(V,F){return Array.from({length:V},()=>new Float32Array(F))}function w0(V,F){let A=[...V,F].sort((J,k)=>J.startSample-k.startSample),T=[];for(let J of A){let k=T[T.length-1];if(!k||J.startSample>k.endSample){T.push({...J});continue}k.endSample=Math.max(k.endSample,J.endSample)}return T}function R0(V){let F=0;for(let A of V){if(A.startSample>F)break;F=Math.max(F,A.endSample)}return F}function B0(V,F){if(V.committedLength-Math.floor(F)>=V.lowWaterThreshold)V.lowWaterNotified=!1}function y0(V,F,A){let T=z0(V.buffer),J=V.buffer.length;if(T>=A&&J>=F)return;let k=Math.max(T,A),Q=Math.max(J,F),U=P0(Q,k);for(let X=0;X<J;X++)U[X].set(V.buffer[X].subarray(0,T));if(V.buffer=U,V.streamBuffer.totalLength==null||V.streamBuffer.totalLength<k)V.streamBuffer.totalLength=k}function _0(V,F){let A=Math.max(Math.floor(F.startSample),0),T=F.channelData[0]?.length??0,J=F.totalLength??null,k=Math.max(A+T,J??0);y0(V,Math.max(F.channelData.length,V.buffer.length,1),k);for(let Q=0;Q<F.channelData.length;Q++)V.buffer[Q].set(F.channelData[Q],A);if(J!=null)V.streamBuffer.totalLength=J;if(T>0)V.streamBuffer.writtenSpans=w0(V.streamBuffer.writtenSpans,{startSample:A,endSample:A+T}),V.streamBuffer.committedLength=R0(V.streamBuffer.writtenSpans);if(F.streamEnded===!0)V.streamBuffer.streamEnded=!0;B0(V.streamBuffer,V.playhead)}function b0(V){if(V.streamBuffer.pendingWrites.length===0)return;for(let F of V.streamBuffer.pendingWrites)_0(V,F);V.streamBuffer.pendingWrites=[]}function L0(V,F){V.buffer=F,V.streamBuffer=o(F)}function K0(V={},F){let{buffer:A=[],streamBuffer:T=o(A),duration:J=-1,loop:k=!1,loopStart:Q=0,loopEnd:U=(A[0]?.length??0)/F,loopCrossfade:X=0,playhead:$=0,offset:G=0,startWhen:Y=0,stopWhen:P=0,pauseWhen:K=0,resumeWhen:O=0,playedSamples:v=0,state:W=z.Initial,timesLooped:w=0,fadeInDuration:j=0,fadeOutDuration:Z=0,enableFadeIn:C=j>0,enableFadeOut:D=Z>0,enableLoopStart:R=!0,enableLoopEnd:l=!0,enableLoopCrossfade:b=X>0,enableHighpass:h=!0,enableLowpass:d=!0,enableGain:r=!0,enablePan:p=!0,enableDetune:e=!0,enablePlaybackRate:V0=!0}=V;return{buffer:A,streamBuffer:T,loop:k,loopStart:Q,loopEnd:U,loopCrossfade:X,duration:J,playhead:$,offset:G,startWhen:Y,stopWhen:P,pauseWhen:K,resumeWhen:O,playedSamples:v,state:W,timesLooped:w,fadeInDuration:j,fadeOutDuration:Z,enableFadeIn:C,enableFadeOut:D,enableLoopStart:R,enableLoopEnd:l,enableHighpass:h,enableLowpass:d,enableGain:r,enablePan:p,enableDetune:e,enablePlaybackRate:V0,enableLoopCrossfade:b}}function x0(V,F){return a(V)/F}function i(V,F){let A=x0(V,F);if(A<=0){V.loopStart=0,V.loopEnd=0;return}if(!Number.isFinite(V.loopStart)||V.loopStart<0)V.loopStart=0;if(V.loopStart>=A)V.loopStart=0;if(!Number.isFinite(V.loopEnd)||V.loopEnd<=V.loopStart||V.loopEnd>A)V.loopEnd=A}function A0(V,F,A){if(F===void 0)return V.offset=0,0;if(F<0)return A0(V,a(V)+F,A);if(F>(a(V)||1)-1)return A0(V,a(V)%F,A);let T=Math.floor(F*A);return V.offset=T,T}function m0(V){let{playhead:F,bufferLength:A,loop:T,loopStartSamples:J,loopEndSamples:k}=V,Q=128;if(!T&&F+128>A)Q=Math.max(A-F,0);let U=Array(Q);if(!T){for(let Y=0,P=F;Y<Q;Y++,P++)U[Y]=P;let G=F+Q;return{playhead:G,indexes:U,looped:!1,ended:G>=A}}let X=F,$=!1;for(let G=0;G<Q;G++,X++){if(X>=k)X=J+(X-k),$=!0;U[G]=X}return{indexes:U,looped:$,ended:!1,playhead:X}}function S0(V){let{playhead:F,bufferLength:A,loop:T,loopStartSamples:J,loopEndSamples:k,playbackRates:Q}=V,U=128;if(!T&&F+128>A)U=Math.max(A-F,0);let X=Array(U),$=F,G=!1;if(T){for(let Y=0;Y<U;Y++){X[Y]=Math.min(Math.max(Math.floor($),0),A-1);let P=Q[Y]??Q[0]??1;if($+=P,P>=0&&($>k||$>A))$=J,G=!0;else if(P<0&&($<J||$<0))$=k,G=!0}return{playhead:$,indexes:X,looped:G,ended:!1}}for(let Y=0;Y<U;Y++)X[Y]=Math.min(Math.max(Math.floor($),0),A-1),$+=Q[Y]??Q[0]??1;return{playhead:$,indexes:X,looped:!1,ended:$>=A||$<0}}function g0(V,F,A){let T=Math.min(V.length,F.length);for(let J=0;J<A.length;J++)for(let k=0;k<T;k++)V[k][J]=F[k][A[J]];for(let J=T;J<V.length;J++)for(let k=0;k<V[J].length;k++)V[J][k]=0;for(let J=A.length;J<V[0].length;J++)for(let k=0;k<T;k++)V[k][J]=0}function c(V){for(let F=0;F<V.length;F++)for(let A=0;A<V[F].length;A++)V[F][A]=0}function c0(V){if(V.length>=2)for(let F=0;F<V[0].length;F++)V[1][F]=V[0][F];else{let F=new Float32Array(V[0].length);for(let A=0;A<V[0].length;A++)F[A]=V[0][A];V.push(F)}}function F0(V,F){for(let A=F.length;A<V.length;A++)F[A]=new Float32Array(V[A].length);for(let A=0;A<V.length;A++)for(let T=0;T<V[A].length;T++)F[A][T]=V[A][T]}function h0(V){let F=0;for(let A=0;A<V.length;A++)for(let T=0;T<V[A].length;T++)if(Number.isNaN(V[A][T]))F++,V[A][T]=0;return F}function k0(){return[{x_1:0,x_2:0,y_1:0,y_2:0},{x_1:0,x_2:0,y_1:0,y_2:0}]}function d0(V,F){if(F.length===1){let T=F[0];if(T===1)return;for(let J of V)for(let k=0;k<J.length;k++)J[k]*=T;return}let A=F[0];for(let T of V)for(let J=0;J<T.length;J++)A=F[J]??A,T[J]*=A}function l0(V,F){let A=F[0];for(let T=0;T<V[0].length;T++){A=F[T]??A;let J=A<=0?1:1-A,k=A>=0?1:1+A;V[0][T]*=J,V[1][T]*=k}}function u0(V,F,A,T){for(let J=0;J<V.length;J++){let k=V[J],{x_1:Q,x_2:U,y_1:X,y_2:$}=T[J]??{x_1:0,x_2:0,y_1:0,y_2:0};if(F.length===1){let G=F[0];if(G>=20000)return;let Y=2*Math.PI*G/A,P=Math.sin(Y)/2,K=(1-Math.cos(Y))/2,O=1-Math.cos(Y),v=(1-Math.cos(Y))/2,W=1+P,w=-2*Math.cos(Y),j=1-P,Z=K/W,C=O/W,D=v/W,R=w/W,l=j/W;for(let b=0;b<k.length;b++){let h=k[b],d=Z*h+C*Q+D*U-R*X-l*$;U=Q,Q=h,$=X,X=d,k[b]=d}}else{let G=F[0];for(let Y=0;Y<k.length;Y++){let P=F[Y]??G,K=2*Math.PI*P/A,O=Math.sin(K)/2,v=(1-Math.cos(K))/2,W=1-Math.cos(K),w=(1-Math.cos(K))/2,j=1+O,Z=-2*Math.cos(K),C=1-O,D=k[Y],R=v/j*D+W/j*Q+w/j*U-Z/j*X-C/j*$;U=Q,Q=D,$=X,X=R,k[Y]=R}}T[J]={x_1:Q,x_2:U,y_1:X,y_2:$}}}function f0(V,F,A,T){for(let J=0;J<V.length;J++){let k=V[J],{x_1:Q,x_2:U,y_1:X,y_2:$}=T[J]??{x_1:0,x_2:0,y_1:0,y_2:0};if(F.length===1){let G=F[0];if(G<=20)return;let Y=2*Math.PI*G/A,P=Math.sin(Y)/2,K=(1+Math.cos(Y))/2,O=-(1+Math.cos(Y)),v=(1+Math.cos(Y))/2,W=1+P,w=-2*Math.cos(Y),j=1-P;for(let Z=0;Z<k.length;Z++){let C=k[Z],D=K/W*C+O/W*Q+v/W*U-w/W*X-j/W*$;U=Q,Q=C,$=X,X=D,k[Z]=D}}else{let G=F[0];for(let Y=0;Y<k.length;Y++){let P=F[Y]??G,K=2*Math.PI*P/A,O=Math.sin(K)/2,v=(1+Math.cos(K))/2,W=-(1+Math.cos(K)),w=(1+Math.cos(K))/2,j=1+O,Z=-2*Math.cos(K),C=1-O,D=k[Y],R=v/j*D+W/j*Q+w/j*U-Z/j*X-C/j*$;U=Q,Q=D,$=X,X=R,k[Y]=R}}T[J]={x_1:Q,x_2:U,y_1:X,y_2:$}}}function T0(V,F,A,T){let{type:J,data:k}=F;switch(J){case\"buffer\":return L0(V,k),i(V,T),[];case\"bufferInit\":{let Q=k;return V.buffer=P0(Q.channels,Q.totalLength),V.streamBuffer={...o(),totalLength:Q.totalLength,streamEnded:!1,streaming:Q.streaming??!0},i(V,T),[]}case\"bufferRange\":return V.streamBuffer.pendingWrites.push(k),[];case\"bufferEnd\":{let Q=k;if(Q?.totalLength!=null)V.streamBuffer.totalLength=Q.totalLength;return V.streamBuffer.streamEnded=!0,[]}case\"bufferReset\":return V.buffer=[],V.streamBuffer=o(),i(V,T),[];case\"start\":V.timesLooped=0;{let Q=k;if(V.duration=Q?.duration??-1,V.duration===-1)V.duration=V.loop?Number.MAX_SAFE_INTEGER:(V.buffer[0]?.length??0)/T;A0(V,Q?.offset,T),i(V,T),V.playhead=V.offset,V.startWhen=Q?.when??A,V.stopWhen=V.startWhen+V.duration,V.playedSamples=0,V.state=z.Scheduled}return[{type:\"scheduled\"}];case\"stop\":if(V.state===z.Ended||V.state===z.Initial)return[];return V.stopWhen=k??V.stopWhen,V.state=z.Stopped,[{type:\"stopped\"}];case\"pause\":return V.state=z.Paused,V.pauseWhen=k??A,[{type:\"paused\"}];case\"resume\":return V.state=z.Started,V.startWhen=k??A,[{type:\"resume\"}];case\"dispose\":return V.state=z.Disposed,V.buffer=[],V.streamBuffer=o(),[{type:\"disposed\"}];case\"loop\":{let Q=k,U=V.state;if(Q&&(U===z.Scheduled||U===z.Started))V.stopWhen=Number.MAX_SAFE_INTEGER,V.duration=Number.MAX_SAFE_INTEGER;if(V.loop=Q,Q)i(V,T);return[]}case\"loopStart\":return V.loopStart=k,[];case\"loopEnd\":return V.loopEnd=k,[];case\"loopCrossfade\":return V.loopCrossfade=k,V.enableLoopCrossfade=V.loopCrossfade>0,[];case\"playhead\":return V.playhead=Math.floor(k),[];case\"fadeIn\":return V.fadeInDuration=k,V.enableFadeIn=V.fadeInDuration>0,[];case\"fadeOut\":return V.fadeOutDuration=k,V.enableFadeOut=V.fadeOutDuration>0,[];case\"toggleGain\":return V.enableGain=k??!V.enableGain,[];case\"togglePan\":return V.enablePan=k??!V.enablePan,[];case\"toggleLowpass\":return V.enableLowpass=k??!V.enableLowpass,[];case\"toggleHighpass\":return V.enableHighpass=k??!V.enableHighpass,[];case\"toggleDetune\":return V.enableDetune=k??!V.enableDetune,[];case\"togglePlaybackRate\":return V.enablePlaybackRate=k??!V.enablePlaybackRate,[];case\"toggleFadeIn\":return V.enableFadeIn=k??!V.enableFadeIn,[];case\"toggleFadeOut\":return V.enableFadeOut=k??!V.enableFadeOut,[];case\"toggleLoopStart\":return V.enableLoopStart=k??!V.enableLoopStart,[];case\"toggleLoopEnd\":return V.enableLoopEnd=k??!V.enableLoopEnd,[];case\"toggleLoopCrossfade\":return V.enableLoopCrossfade=k??!V.enableLoopCrossfade,[];case\"logState\":return[]}return[]}function W0(V,F,A,T,J){let k=[],Q=V.state;if(Q===z.Disposed)return{keepAlive:!1,messages:k};if(b0(V),Q===z.Initial)return{keepAlive:!0,messages:k};if(Q===z.Ended)return c(F[0]),{keepAlive:!0,messages:k};if(Q===z.Scheduled)if(T.currentTime>=V.startWhen)Q=V.state=z.Started,k.push({type:\"started\"});else return c(F[0]),{keepAlive:!0,messages:k};else if(Q===z.Paused){if(T.currentTime>V.pauseWhen)return c(F[0]),{keepAlive:!0,messages:k}}if(T.currentTime>V.stopWhen)return c(F[0]),V.state=z.Ended,k.push({type:\"ended\"}),V.playedSamples=0,{keepAlive:!0,messages:k};let U=F[0],X=a(V);if(X===0)return c(U),{keepAlive:!0,messages:k};let{playbackRate:$,detune:G,lowpass:Y,highpass:P,gain:K,pan:O}=A,{buffer:v,loopStart:W,loopEnd:w,loopCrossfade:j,stopWhen:Z,playedSamples:C,enableLowpass:D,enableHighpass:R,enableGain:l,enablePan:b,enableDetune:h,enableFadeOut:d,enableFadeIn:r,enableLoopStart:p,enableLoopEnd:e,enableLoopCrossfade:V0,playhead:E,fadeInDuration:J0,fadeOutDuration:Q0}=V,U0=V.streamBuffer.streaming&&V.streamBuffer.committedLength<X,s=V.loop,L=U0&&s?Math.max(V.streamBuffer.committedLength,0):X,Z0=y*2;if(U0&&s&&L<Z0){c(U);for(let M=1;M<F.length;M++)F0(U,F[M]);return{keepAlive:!0,messages:k}}let u=Math.min(v.length,U.length),N0=V.duration*T.sampleRate,v0=Math.floor(T.sampleRate*j),D0=Math.max(L-y,0),x=p?Math.min(Math.floor(W*T.sampleRate),D0):0,m=e?Math.min(Math.floor(w*T.sampleRate),L):L,O0=m-x,X0=h&&G.length>0&&G[0]!==0,f=$;if(X0){let M=Math.max($.length,G.length,y);f=new Float32Array(M);for(let q=0;q<M;q++){let I=$[q]??$[$.length-1],H=G[q]??G[G.length-1];f[q]=I*2**(H/1200)}}let Y0=V.enablePlaybackRate||X0,C0=Y0&&f.length>0&&f.every((M)=>M===0);if(V.streamBuffer.streaming&&!V.streamBuffer.streamEnded&&!V.streamBuffer.lowWaterNotified&&V.streamBuffer.committedLength-Math.floor(E)<V.streamBuffer.lowWaterThreshold)k.push({type:\"bufferLowWater\",data:{playhead:Math.floor(E),committedLength:V.streamBuffer.committedLength}}),V.streamBuffer.lowWaterNotified=!0;if(C0){c(U);for(let M=1;M<F.length;M++)F0(U,F[M]);return{keepAlive:!0,messages:k}}let $0={bufferLength:L,loop:s,playhead:V.playhead,loopStartSamples:x,loopEndSamples:m,durationSamples:N0,playbackRates:f},{indexes:t,ended:M0,looped:G0,playhead:H0}=Y0?S0($0):m0($0),n=t.find((M)=>M>=V.streamBuffer.committedLength&&M<X);if(n!==void 0&&!V.streamBuffer.streamEnded&&V.streamBuffer.lastUnderrunSample!==n)k.push({type:\"bufferUnderrun\",data:{playhead:Math.floor(E),committedLength:V.streamBuffer.committedLength,requestedSample:n}}),V.streamBuffer.lastUnderrunSample=n;else if(n===void 0)V.streamBuffer.lastUnderrunSample=null;g0(U,v,t);let S=Math.min(Math.floor(j*T.sampleRate),O0),E0=s&&E>x&&E<m,I0=V0&&v0>0&&L>y;if(E0&&I0){{let M=x+S;if(S>0&&E>x&&E<M){let q=E-x,I=Math.min(Math.floor(M-E),y);for(let H=0;H<I;H++){let B=(q+H)/S,g=Math.cos(Math.PI*B/2),N=Math.floor(m-S+q+H);if(N>=0&&N<L)for(let _=0;_<u;_++)U[_][H]+=v[_][N]*g}}}{let M=m-S;if(S>0&&E>M&&E<m){let q=E-M,I=Math.min(Math.floor(m-E),y);for(let H=0;H<I;H++){let B=(q+H)/S,g=Math.sin(Math.PI*B/2),N=Math.floor(x+q+H);if(N>=0&&N<L)for(let _=0;_<u;_++)U[_][H]+=v[_][N]*g}}}}if(r&&J0>0){let M=Math.floor(J0*T.sampleRate),q=M-C;if(q>0){let I=Math.min(q,y);for(let H=0;H<I;H++){let B=(C+H)/M,g=B*B*B;for(let N=0;N<u;N++)U[N][H]*=g}}}if(d&&Q0>0){let M=Math.floor(Q0*T.sampleRate),q=Math.floor(T.sampleRate*(Z-T.currentTime));if(q<M+y)for(let I=0;I<y;I++){let H=q-I;if(H>=M)continue;let B=H<=0?0:H/M,g=B*B*B;for(let N=0;N<u;N++)U[N][I]*=g}}if(D)u0(U,Y,T.sampleRate,J.lowpass);if(R)f0(U,P,T.sampleRate,J.highpass);if(l)d0(U,K);if(u===1)c0(U);if(b)l0(U,O);if(G0)V.timesLooped++,k.push({type:\"looped\",data:V.timesLooped});if(M0)V.state=z.Ended,k.push({type:\"ended\"});V.playedSamples+=t.length,V.playhead=H0;let j0=h0(U);if(j0>0)return console.log({numNans:j0,indexes:t,playhead:H0,ended:M0,looped:G0,sourceLength:X}),{keepAlive:!0,messages:k};for(let M=1;M<F.length;M++)F0(U,F[M]);return{keepAlive:!0,messages:k}}class q0 extends AudioWorkletProcessor{static get parameterDescriptors(){return[{name:\"playbackRate\",automationRate:\"a-rate\",defaultValue:1},{name:\"detune\",automationRate:\"a-rate\",defaultValue:0},{name:\"gain\",automationRate:\"a-rate\",defaultValue:1,minValue:0},{name:\"pan\",automationRate:\"a-rate\",defaultValue:0},{name:\"highpass\",automationRate:\"a-rate\",defaultValue:20,minValue:20,maxValue:20000},{name:\"lowpass\",automationRate:\"a-rate\",defaultValue:20000,minValue:20,maxValue:20000}]}properties;filterState={lowpass:k0(),highpass:k0()};lastFrameTime=0;constructor(V){super(V);this.properties=K0(V?.processorOptions,sampleRate),this.port.onmessage=(F)=>{if(F.data.type===\"transferPort\"){let T=F.data.data;T.onmessage=(J)=>{let k=T0(this.properties,J.data,currentTime,sampleRate);for(let Q of k)this.port.postMessage(Q)};return}let A=T0(this.properties,F.data,currentTime,sampleRate);for(let T of A)this.port.postMessage(T);if(this.properties.state===z.Disposed)this.port.close()}}process(V,F,A){try{let T=W0(this.properties,F,A,{currentTime,currentFrame,sampleRate},this.filterState);for(let k of T.messages)this.port.postMessage(k);let J=currentTime-this.lastFrameTime;return this.lastFrameTime=currentTime,this.port.postMessage({type:\"frame\",data:[currentTime,currentFrame,Math.floor(this.properties.playhead),J*1000]}),T.keepAlive}catch(T){return this.port.postMessage({type:\"processorError\",data:{error:String(T),state:this.properties.state,bufferChannels:this.properties.buffer?.length,bufferLength:this.properties.buffer?.[0]?.length,paramKeys:Object.keys(A),hasPlaybackRate:!!A.playbackRate,hasDetune:!!A.detune,hasGain:!!A.gain,hasPan:!!A.pan,outputChannels:F[0]?.length}}),!0}}}registerProcessor(\"ClipProcessor\",q0);\n\n//# debugId=CA160104FA867FAC64756E2164756E21\n//# sourceMappingURL=processor.js.map\n";
@@ -0,0 +1,2 @@
1
+ // AUTO-GENERATED — do not edit. Run 'bun run build:lib' to regenerate.
2
+ export const processorCode = "var z={Initial:0,Started:1,Stopped:2,Paused:3,Scheduled:4,Ended:5,Disposed:6};var y=128;function o(V=[]){let F=V[0]?.length??0,A=F>0;return{totalLength:A?F:null,committedLength:A?F:0,streamEnded:A,streaming:!1,writtenSpans:A?[{startSample:0,endSample:F}]:[],pendingWrites:[],lowWaterThreshold:y*4,lowWaterNotified:!1,lastUnderrunSample:null}}function z0(V){return V[0]?.length??0}function a(V){return V.streamBuffer.totalLength??z0(V.buffer)}function P0(V,F){return Array.from({length:V},()=>new Float32Array(F))}function w0(V,F){let A=[...V,F].sort((J,k)=>J.startSample-k.startSample),T=[];for(let J of A){let k=T[T.length-1];if(!k||J.startSample>k.endSample){T.push({...J});continue}k.endSample=Math.max(k.endSample,J.endSample)}return T}function R0(V){let F=0;for(let A of V){if(A.startSample>F)break;F=Math.max(F,A.endSample)}return F}function B0(V,F){if(V.committedLength-Math.floor(F)>=V.lowWaterThreshold)V.lowWaterNotified=!1}function y0(V,F,A){let T=z0(V.buffer),J=V.buffer.length;if(T>=A&&J>=F)return;let k=Math.max(T,A),Q=Math.max(J,F),U=P0(Q,k);for(let X=0;X<J;X++)U[X].set(V.buffer[X].subarray(0,T));if(V.buffer=U,V.streamBuffer.totalLength==null||V.streamBuffer.totalLength<k)V.streamBuffer.totalLength=k}function _0(V,F){let A=Math.max(Math.floor(F.startSample),0),T=F.channelData[0]?.length??0,J=F.totalLength??null,k=Math.max(A+T,J??0);y0(V,Math.max(F.channelData.length,V.buffer.length,1),k);for(let Q=0;Q<F.channelData.length;Q++)V.buffer[Q].set(F.channelData[Q],A);if(J!=null)V.streamBuffer.totalLength=J;if(T>0)V.streamBuffer.writtenSpans=w0(V.streamBuffer.writtenSpans,{startSample:A,endSample:A+T}),V.streamBuffer.committedLength=R0(V.streamBuffer.writtenSpans);if(F.streamEnded===!0)V.streamBuffer.streamEnded=!0;B0(V.streamBuffer,V.playhead)}function b0(V){if(V.streamBuffer.pendingWrites.length===0)return;for(let F of V.streamBuffer.pendingWrites)_0(V,F);V.streamBuffer.pendingWrites=[]}function L0(V,F){V.buffer=F,V.streamBuffer=o(F)}function K0(V={},F){let{buffer:A=[],streamBuffer:T=o(A),duration:J=-1,loop:k=!1,loopStart:Q=0,loopEnd:U=(A[0]?.length??0)/F,loopCrossfade:X=0,playhead:$=0,offset:G=0,startWhen:Y=0,stopWhen:P=0,pauseWhen:K=0,resumeWhen:O=0,playedSamples:v=0,state:W=z.Initial,timesLooped:w=0,fadeInDuration:j=0,fadeOutDuration:Z=0,enableFadeIn:C=j>0,enableFadeOut:D=Z>0,enableLoopStart:R=!0,enableLoopEnd:l=!0,enableLoopCrossfade:b=X>0,enableHighpass:h=!0,enableLowpass:d=!0,enableGain:r=!0,enablePan:p=!0,enableDetune:e=!0,enablePlaybackRate:V0=!0}=V;return{buffer:A,streamBuffer:T,loop:k,loopStart:Q,loopEnd:U,loopCrossfade:X,duration:J,playhead:$,offset:G,startWhen:Y,stopWhen:P,pauseWhen:K,resumeWhen:O,playedSamples:v,state:W,timesLooped:w,fadeInDuration:j,fadeOutDuration:Z,enableFadeIn:C,enableFadeOut:D,enableLoopStart:R,enableLoopEnd:l,enableHighpass:h,enableLowpass:d,enableGain:r,enablePan:p,enableDetune:e,enablePlaybackRate:V0,enableLoopCrossfade:b}}function x0(V,F){return a(V)/F}function i(V,F){let A=x0(V,F);if(A<=0){V.loopStart=0,V.loopEnd=0;return}if(!Number.isFinite(V.loopStart)||V.loopStart<0)V.loopStart=0;if(V.loopStart>=A)V.loopStart=0;if(!Number.isFinite(V.loopEnd)||V.loopEnd<=V.loopStart||V.loopEnd>A)V.loopEnd=A}function A0(V,F,A){if(F===void 0)return V.offset=0,0;if(F<0)return A0(V,a(V)+F,A);if(F>(a(V)||1)-1)return A0(V,a(V)%F,A);let T=Math.floor(F*A);return V.offset=T,T}function m0(V){let{playhead:F,bufferLength:A,loop:T,loopStartSamples:J,loopEndSamples:k}=V,Q=128;if(!T&&F+128>A)Q=Math.max(A-F,0);let U=Array(Q);if(!T){for(let Y=0,P=F;Y<Q;Y++,P++)U[Y]=P;let G=F+Q;return{playhead:G,indexes:U,looped:!1,ended:G>=A}}let X=F,$=!1;for(let G=0;G<Q;G++,X++){if(X>=k)X=J+(X-k),$=!0;U[G]=X}return{indexes:U,looped:$,ended:!1,playhead:X}}function S0(V){let{playhead:F,bufferLength:A,loop:T,loopStartSamples:J,loopEndSamples:k,playbackRates:Q}=V,U=128;if(!T&&F+128>A)U=Math.max(A-F,0);let X=Array(U),$=F,G=!1;if(T){for(let Y=0;Y<U;Y++){X[Y]=Math.min(Math.max(Math.floor($),0),A-1);let P=Q[Y]??Q[0]??1;if($+=P,P>=0&&($>k||$>A))$=J,G=!0;else if(P<0&&($<J||$<0))$=k,G=!0}return{playhead:$,indexes:X,looped:G,ended:!1}}for(let Y=0;Y<U;Y++)X[Y]=Math.min(Math.max(Math.floor($),0),A-1),$+=Q[Y]??Q[0]??1;return{playhead:$,indexes:X,looped:!1,ended:$>=A||$<0}}function g0(V,F,A){let T=Math.min(V.length,F.length);for(let J=0;J<A.length;J++)for(let k=0;k<T;k++)V[k][J]=F[k][A[J]];for(let J=T;J<V.length;J++)for(let k=0;k<V[J].length;k++)V[J][k]=0;for(let J=A.length;J<V[0].length;J++)for(let k=0;k<T;k++)V[k][J]=0}function c(V){for(let F=0;F<V.length;F++)for(let A=0;A<V[F].length;A++)V[F][A]=0}function c0(V){if(V.length>=2)for(let F=0;F<V[0].length;F++)V[1][F]=V[0][F];else{let F=new Float32Array(V[0].length);for(let A=0;A<V[0].length;A++)F[A]=V[0][A];V.push(F)}}function F0(V,F){for(let A=F.length;A<V.length;A++)F[A]=new Float32Array(V[A].length);for(let A=0;A<V.length;A++)for(let T=0;T<V[A].length;T++)F[A][T]=V[A][T]}function h0(V){let F=0;for(let A=0;A<V.length;A++)for(let T=0;T<V[A].length;T++)if(Number.isNaN(V[A][T]))F++,V[A][T]=0;return F}function k0(){return[{x_1:0,x_2:0,y_1:0,y_2:0},{x_1:0,x_2:0,y_1:0,y_2:0}]}function d0(V,F){if(F.length===1){let T=F[0];if(T===1)return;for(let J of V)for(let k=0;k<J.length;k++)J[k]*=T;return}let A=F[0];for(let T of V)for(let J=0;J<T.length;J++)A=F[J]??A,T[J]*=A}function l0(V,F){let A=F[0];for(let T=0;T<V[0].length;T++){A=F[T]??A;let J=A<=0?1:1-A,k=A>=0?1:1+A;V[0][T]*=J,V[1][T]*=k}}function u0(V,F,A,T){for(let J=0;J<V.length;J++){let k=V[J],{x_1:Q,x_2:U,y_1:X,y_2:$}=T[J]??{x_1:0,x_2:0,y_1:0,y_2:0};if(F.length===1){let G=F[0];if(G>=20000)return;let Y=2*Math.PI*G/A,P=Math.sin(Y)/2,K=(1-Math.cos(Y))/2,O=1-Math.cos(Y),v=(1-Math.cos(Y))/2,W=1+P,w=-2*Math.cos(Y),j=1-P,Z=K/W,C=O/W,D=v/W,R=w/W,l=j/W;for(let b=0;b<k.length;b++){let h=k[b],d=Z*h+C*Q+D*U-R*X-l*$;U=Q,Q=h,$=X,X=d,k[b]=d}}else{let G=F[0];for(let Y=0;Y<k.length;Y++){let P=F[Y]??G,K=2*Math.PI*P/A,O=Math.sin(K)/2,v=(1-Math.cos(K))/2,W=1-Math.cos(K),w=(1-Math.cos(K))/2,j=1+O,Z=-2*Math.cos(K),C=1-O,D=k[Y],R=v/j*D+W/j*Q+w/j*U-Z/j*X-C/j*$;U=Q,Q=D,$=X,X=R,k[Y]=R}}T[J]={x_1:Q,x_2:U,y_1:X,y_2:$}}}function f0(V,F,A,T){for(let J=0;J<V.length;J++){let k=V[J],{x_1:Q,x_2:U,y_1:X,y_2:$}=T[J]??{x_1:0,x_2:0,y_1:0,y_2:0};if(F.length===1){let G=F[0];if(G<=20)return;let Y=2*Math.PI*G/A,P=Math.sin(Y)/2,K=(1+Math.cos(Y))/2,O=-(1+Math.cos(Y)),v=(1+Math.cos(Y))/2,W=1+P,w=-2*Math.cos(Y),j=1-P;for(let Z=0;Z<k.length;Z++){let C=k[Z],D=K/W*C+O/W*Q+v/W*U-w/W*X-j/W*$;U=Q,Q=C,$=X,X=D,k[Z]=D}}else{let G=F[0];for(let Y=0;Y<k.length;Y++){let P=F[Y]??G,K=2*Math.PI*P/A,O=Math.sin(K)/2,v=(1+Math.cos(K))/2,W=-(1+Math.cos(K)),w=(1+Math.cos(K))/2,j=1+O,Z=-2*Math.cos(K),C=1-O,D=k[Y],R=v/j*D+W/j*Q+w/j*U-Z/j*X-C/j*$;U=Q,Q=D,$=X,X=R,k[Y]=R}}T[J]={x_1:Q,x_2:U,y_1:X,y_2:$}}}function T0(V,F,A,T){let{type:J,data:k}=F;switch(J){case\"buffer\":return L0(V,k),i(V,T),[];case\"bufferInit\":{let Q=k;return V.buffer=P0(Q.channels,Q.totalLength),V.streamBuffer={...o(),totalLength:Q.totalLength,streamEnded:!1,streaming:Q.streaming??!0},i(V,T),[]}case\"bufferRange\":return V.streamBuffer.pendingWrites.push(k),[];case\"bufferEnd\":{let Q=k;if(Q?.totalLength!=null)V.streamBuffer.totalLength=Q.totalLength;return V.streamBuffer.streamEnded=!0,[]}case\"bufferReset\":return V.buffer=[],V.streamBuffer=o(),i(V,T),[];case\"start\":V.timesLooped=0;{let Q=k;if(V.duration=Q?.duration??-1,V.duration===-1)V.duration=V.loop?Number.MAX_SAFE_INTEGER:(V.buffer[0]?.length??0)/T;A0(V,Q?.offset,T),i(V,T),V.playhead=V.offset,V.startWhen=Q?.when??A,V.stopWhen=V.startWhen+V.duration,V.playedSamples=0,V.state=z.Scheduled}return[{type:\"scheduled\"}];case\"stop\":if(V.state===z.Ended||V.state===z.Initial)return[];return V.stopWhen=k??V.stopWhen,V.state=z.Stopped,[{type:\"stopped\"}];case\"pause\":return V.state=z.Paused,V.pauseWhen=k??A,[{type:\"paused\"}];case\"resume\":return V.state=z.Started,V.startWhen=k??A,[{type:\"resume\"}];case\"dispose\":return V.state=z.Disposed,V.buffer=[],V.streamBuffer=o(),[{type:\"disposed\"}];case\"loop\":{let Q=k,U=V.state;if(Q&&(U===z.Scheduled||U===z.Started))V.stopWhen=Number.MAX_SAFE_INTEGER,V.duration=Number.MAX_SAFE_INTEGER;if(V.loop=Q,Q)i(V,T);return[]}case\"loopStart\":return V.loopStart=k,[];case\"loopEnd\":return V.loopEnd=k,[];case\"loopCrossfade\":return V.loopCrossfade=k,V.enableLoopCrossfade=V.loopCrossfade>0,[];case\"playhead\":return V.playhead=Math.floor(k),[];case\"fadeIn\":return V.fadeInDuration=k,V.enableFadeIn=V.fadeInDuration>0,[];case\"fadeOut\":return V.fadeOutDuration=k,V.enableFadeOut=V.fadeOutDuration>0,[];case\"toggleGain\":return V.enableGain=k??!V.enableGain,[];case\"togglePan\":return V.enablePan=k??!V.enablePan,[];case\"toggleLowpass\":return V.enableLowpass=k??!V.enableLowpass,[];case\"toggleHighpass\":return V.enableHighpass=k??!V.enableHighpass,[];case\"toggleDetune\":return V.enableDetune=k??!V.enableDetune,[];case\"togglePlaybackRate\":return V.enablePlaybackRate=k??!V.enablePlaybackRate,[];case\"toggleFadeIn\":return V.enableFadeIn=k??!V.enableFadeIn,[];case\"toggleFadeOut\":return V.enableFadeOut=k??!V.enableFadeOut,[];case\"toggleLoopStart\":return V.enableLoopStart=k??!V.enableLoopStart,[];case\"toggleLoopEnd\":return V.enableLoopEnd=k??!V.enableLoopEnd,[];case\"toggleLoopCrossfade\":return V.enableLoopCrossfade=k??!V.enableLoopCrossfade,[];case\"logState\":return[]}return[]}function W0(V,F,A,T,J){let k=[],Q=V.state;if(Q===z.Disposed)return{keepAlive:!1,messages:k};if(b0(V),Q===z.Initial)return{keepAlive:!0,messages:k};if(Q===z.Ended)return c(F[0]),{keepAlive:!0,messages:k};if(Q===z.Scheduled)if(T.currentTime>=V.startWhen)Q=V.state=z.Started,k.push({type:\"started\"});else return c(F[0]),{keepAlive:!0,messages:k};else if(Q===z.Paused){if(T.currentTime>V.pauseWhen)return c(F[0]),{keepAlive:!0,messages:k}}if(T.currentTime>V.stopWhen)return c(F[0]),V.state=z.Ended,k.push({type:\"ended\"}),V.playedSamples=0,{keepAlive:!0,messages:k};let U=F[0],X=a(V);if(X===0)return c(U),{keepAlive:!0,messages:k};let{playbackRate:$,detune:G,lowpass:Y,highpass:P,gain:K,pan:O}=A,{buffer:v,loopStart:W,loopEnd:w,loopCrossfade:j,stopWhen:Z,playedSamples:C,enableLowpass:D,enableHighpass:R,enableGain:l,enablePan:b,enableDetune:h,enableFadeOut:d,enableFadeIn:r,enableLoopStart:p,enableLoopEnd:e,enableLoopCrossfade:V0,playhead:E,fadeInDuration:J0,fadeOutDuration:Q0}=V,U0=V.streamBuffer.streaming&&V.streamBuffer.committedLength<X,s=V.loop,L=U0&&s?Math.max(V.streamBuffer.committedLength,0):X,Z0=y*2;if(U0&&s&&L<Z0){c(U);for(let M=1;M<F.length;M++)F0(U,F[M]);return{keepAlive:!0,messages:k}}let u=Math.min(v.length,U.length),N0=V.duration*T.sampleRate,v0=Math.floor(T.sampleRate*j),D0=Math.max(L-y,0),x=p?Math.min(Math.floor(W*T.sampleRate),D0):0,m=e?Math.min(Math.floor(w*T.sampleRate),L):L,O0=m-x,X0=h&&G.length>0&&G[0]!==0,f=$;if(X0){let M=Math.max($.length,G.length,y);f=new Float32Array(M);for(let q=0;q<M;q++){let I=$[q]??$[$.length-1],H=G[q]??G[G.length-1];f[q]=I*2**(H/1200)}}let Y0=V.enablePlaybackRate||X0,C0=Y0&&f.length>0&&f.every((M)=>M===0);if(V.streamBuffer.streaming&&!V.streamBuffer.streamEnded&&!V.streamBuffer.lowWaterNotified&&V.streamBuffer.committedLength-Math.floor(E)<V.streamBuffer.lowWaterThreshold)k.push({type:\"bufferLowWater\",data:{playhead:Math.floor(E),committedLength:V.streamBuffer.committedLength}}),V.streamBuffer.lowWaterNotified=!0;if(C0){c(U);for(let M=1;M<F.length;M++)F0(U,F[M]);return{keepAlive:!0,messages:k}}let $0={bufferLength:L,loop:s,playhead:V.playhead,loopStartSamples:x,loopEndSamples:m,durationSamples:N0,playbackRates:f},{indexes:t,ended:M0,looped:G0,playhead:H0}=Y0?S0($0):m0($0),n=t.find((M)=>M>=V.streamBuffer.committedLength&&M<X);if(n!==void 0&&!V.streamBuffer.streamEnded&&V.streamBuffer.lastUnderrunSample!==n)k.push({type:\"bufferUnderrun\",data:{playhead:Math.floor(E),committedLength:V.streamBuffer.committedLength,requestedSample:n}}),V.streamBuffer.lastUnderrunSample=n;else if(n===void 0)V.streamBuffer.lastUnderrunSample=null;g0(U,v,t);let S=Math.min(Math.floor(j*T.sampleRate),O0),E0=s&&E>x&&E<m,I0=V0&&v0>0&&L>y;if(E0&&I0){{let M=x+S;if(S>0&&E>x&&E<M){let q=E-x,I=Math.min(Math.floor(M-E),y);for(let H=0;H<I;H++){let B=(q+H)/S,g=Math.cos(Math.PI*B/2),N=Math.floor(m-S+q+H);if(N>=0&&N<L)for(let _=0;_<u;_++)U[_][H]+=v[_][N]*g}}}{let M=m-S;if(S>0&&E>M&&E<m){let q=E-M,I=Math.min(Math.floor(m-E),y);for(let H=0;H<I;H++){let B=(q+H)/S,g=Math.sin(Math.PI*B/2),N=Math.floor(x+q+H);if(N>=0&&N<L)for(let _=0;_<u;_++)U[_][H]+=v[_][N]*g}}}}if(r&&J0>0){let M=Math.floor(J0*T.sampleRate),q=M-C;if(q>0){let I=Math.min(q,y);for(let H=0;H<I;H++){let B=(C+H)/M,g=B*B*B;for(let N=0;N<u;N++)U[N][H]*=g}}}if(d&&Q0>0){let M=Math.floor(Q0*T.sampleRate),q=Math.floor(T.sampleRate*(Z-T.currentTime));if(q<M+y)for(let I=0;I<y;I++){let H=q-I;if(H>=M)continue;let B=H<=0?0:H/M,g=B*B*B;for(let N=0;N<u;N++)U[N][I]*=g}}if(D)u0(U,Y,T.sampleRate,J.lowpass);if(R)f0(U,P,T.sampleRate,J.highpass);if(l)d0(U,K);if(u===1)c0(U);if(b)l0(U,O);if(G0)V.timesLooped++,k.push({type:\"looped\",data:V.timesLooped});if(M0)V.state=z.Ended,k.push({type:\"ended\"});V.playedSamples+=t.length,V.playhead=H0;let j0=h0(U);if(j0>0)return console.log({numNans:j0,indexes:t,playhead:H0,ended:M0,looped:G0,sourceLength:X}),{keepAlive:!0,messages:k};for(let M=1;M<F.length;M++)F0(U,F[M]);return{keepAlive:!0,messages:k}}class q0 extends AudioWorkletProcessor{static get parameterDescriptors(){return[{name:\"playbackRate\",automationRate:\"a-rate\",defaultValue:1},{name:\"detune\",automationRate:\"a-rate\",defaultValue:0},{name:\"gain\",automationRate:\"a-rate\",defaultValue:1,minValue:0},{name:\"pan\",automationRate:\"a-rate\",defaultValue:0},{name:\"highpass\",automationRate:\"a-rate\",defaultValue:20,minValue:20,maxValue:20000},{name:\"lowpass\",automationRate:\"a-rate\",defaultValue:20000,minValue:20,maxValue:20000}]}properties;filterState={lowpass:k0(),highpass:k0()};lastFrameTime=0;constructor(V){super(V);this.properties=K0(V?.processorOptions,sampleRate),this.port.onmessage=(F)=>{if(F.data.type===\"transferPort\"){let T=F.data.data;T.onmessage=(J)=>{let k=T0(this.properties,J.data,currentTime,sampleRate);for(let Q of k)this.port.postMessage(Q)};return}let A=T0(this.properties,F.data,currentTime,sampleRate);for(let T of A)this.port.postMessage(T);if(this.properties.state===z.Disposed)this.port.close()}}process(V,F,A){try{let T=W0(this.properties,F,A,{currentTime,currentFrame,sampleRate},this.filterState);for(let k of T.messages)this.port.postMessage(k);let J=currentTime-this.lastFrameTime;return this.lastFrameTime=currentTime,this.port.postMessage({type:\"frame\",data:[currentTime,currentFrame,Math.floor(this.properties.playhead),J*1000]}),T.keepAlive}catch(T){return this.port.postMessage({type:\"processorError\",data:{error:String(T),state:this.properties.state,bufferChannels:this.properties.buffer?.length,bufferLength:this.properties.buffer?.[0]?.length,paramKeys:Object.keys(A),hasPlaybackRate:!!A.playbackRate,hasDetune:!!A.detune,hasGain:!!A.gain,hasPan:!!A.pan,outputChannels:F[0]?.length}}),!0}}}registerProcessor(\"ClipProcessor\",q0);\n\n//# debugId=CA160104FA867FAC64756E2164756E21\n//# sourceMappingURL=processor.js.map\n";