@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,11 @@
1
+ export declare function concat(a: Uint8Array, b: Uint8Array): Uint8Array;
2
+ interface EstimateTotalSamplesInput {
3
+ totalBytes: number | null;
4
+ bitrate: number | null;
5
+ sourceSampleRate: number;
6
+ targetSampleRate: number;
7
+ }
8
+ export declare function estimateTotalSamplesFromContentLength({ totalBytes, bitrate, sourceSampleRate, targetSampleRate, }: EstimateTotalSamplesInput): number | null;
9
+ export declare function resampleChannel(src: Float32Array, srcRate: number, dstRate: number): Float32Array;
10
+ export declare function createThrottleStream(bytesPerSec: number): TransformStream<Uint8Array, Uint8Array>;
11
+ export {};
@@ -0,0 +1,55 @@
1
+ export function concat(a, b) {
2
+ const out = new Uint8Array(a.length + b.length);
3
+ out.set(a);
4
+ out.set(b, a.length);
5
+ return out;
6
+ }
7
+ const FALLBACK_BITRATE_BPS = 128_000;
8
+ export function estimateTotalSamplesFromContentLength({ totalBytes, bitrate, sourceSampleRate, targetSampleRate, }) {
9
+ if (totalBytes == null || totalBytes <= 0)
10
+ return null;
11
+ if (sourceSampleRate <= 0 || targetSampleRate <= 0)
12
+ return null;
13
+ const safeBitrate = bitrate != null && Number.isFinite(bitrate) && bitrate > 0
14
+ ? bitrate
15
+ : FALLBACK_BITRATE_BPS;
16
+ const durationSeconds = (totalBytes * 8) / safeBitrate;
17
+ if (!Number.isFinite(durationSeconds) || durationSeconds <= 0)
18
+ return null;
19
+ const totalSamples = Math.ceil(durationSeconds * targetSampleRate);
20
+ return Number.isFinite(totalSamples) && totalSamples > 0
21
+ ? totalSamples
22
+ : null;
23
+ }
24
+ export function resampleChannel(src, srcRate, dstRate) {
25
+ if (srcRate === dstRate)
26
+ return src;
27
+ const ratio = srcRate / dstRate;
28
+ const dstLen = Math.round(src.length / ratio);
29
+ const dst = new Float32Array(dstLen);
30
+ for (let i = 0; i < dstLen; i++) {
31
+ const srcPos = i * ratio;
32
+ const idx = Math.floor(srcPos);
33
+ const frac = srcPos - idx;
34
+ const a = src[idx] ?? 0;
35
+ const b = src[Math.min(idx + 1, src.length - 1)] ?? 0;
36
+ dst[i] = a + frac * (b - a);
37
+ }
38
+ return dst;
39
+ }
40
+ export function createThrottleStream(bytesPerSec) {
41
+ let totalBytes = 0;
42
+ const startTime = performance.now();
43
+ return new TransformStream({
44
+ async transform(chunk, controller) {
45
+ totalBytes += chunk.length;
46
+ const elapsed = (performance.now() - startTime) / 1000;
47
+ const expected = totalBytes / bytesPerSec;
48
+ const delay = expected - elapsed;
49
+ if (delay > 0) {
50
+ await new Promise((resolve) => setTimeout(resolve, delay * 1000));
51
+ }
52
+ controller.enqueue(chunk);
53
+ },
54
+ });
55
+ }
@@ -0,0 +1,104 @@
1
+ {
2
+ "name": "@jadujoel/web-audio-clip-node",
3
+ "version": "0.1.8",
4
+ "type": "module",
5
+ "description": "Full-featured AudioWorklet clip player with playback rate, detune, gain, pan, filters, looping, fades, crossfade, and streaming buffer support. React components included.",
6
+ "keywords": [
7
+ "web-audio",
8
+ "audioworklet",
9
+ "audio",
10
+ "clip",
11
+ "player",
12
+ "dsp",
13
+ "react",
14
+ "worklet"
15
+ ],
16
+ "author": "joel.lof@icloud.com",
17
+ "license": "MIT",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/jadujoel/web-audio-clip-node.git"
21
+ },
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/lib.d.ts",
25
+ "import": "./dist/lib.js"
26
+ },
27
+ "./bundle": "./dist/lib.bundle.js",
28
+ "./react": {
29
+ "types": "./dist/lib-react.d.ts",
30
+ "import": "./dist/lib-react.js"
31
+ },
32
+ "./streaming": {
33
+ "types": "./dist/streaming.d.ts",
34
+ "import": "./dist/streaming.js"
35
+ },
36
+ "./processor": "./dist/processor.js",
37
+ "./styles.css": {
38
+ "types": "./dist/styles.css.d.ts",
39
+ "default": "./dist/styles.css"
40
+ }
41
+ },
42
+ "main": "./dist/lib.js",
43
+ "types": "./dist/lib.d.ts",
44
+ "files": [
45
+ "dist",
46
+ "README.md",
47
+ "LICENSE",
48
+ "examples"
49
+ ],
50
+ "sideEffects": false,
51
+ "scripts": {
52
+ "build": "bun build.ts",
53
+ "build:lib": "bun build.ts --lib",
54
+ "build:webpage": "bun build.ts --webpage",
55
+ "dev": "bun serve-webpage.ts",
56
+ "examples": "bun examples.ts",
57
+ "lint": "biome check",
58
+ "serve-webpage": "bun serve-webpage.ts",
59
+ "test": "bun test",
60
+ "test:e2e": "bunx playwright test",
61
+ "test:e2e:chromium": "bunx playwright test --project=chromium",
62
+ "test:e2e:firefox": "bunx playwright test --project=firefox",
63
+ "test:e2e:webkit": "bunx playwright test --project=webkit",
64
+ "typecheck": "tsc --noEmit",
65
+ "validate": "bun run build && bun run lint && bun run typecheck && bun test",
66
+ "prepublishOnly": "bun run build:lib"
67
+ },
68
+ "peerDependencies": {
69
+ "react": ">=18",
70
+ "react-dom": ">=18",
71
+ "zustand": ">=4"
72
+ },
73
+ "peerDependenciesMeta": {
74
+ "react": {
75
+ "optional": true
76
+ },
77
+ "react-dom": {
78
+ "optional": true
79
+ },
80
+ "zustand": {
81
+ "optional": true
82
+ }
83
+ },
84
+ "devDependencies": {
85
+ "@biomejs/biome": "2.4.11",
86
+ "@playwright/test": "1.59.1",
87
+ "@testing-library/dom": "10.4.1",
88
+ "@testing-library/react": "16.3.2",
89
+ "@types/react": "19.2.14",
90
+ "@types/react-dom": "19.2.3",
91
+ "bun-types": "1.3.12",
92
+ "happy-dom": "20.8.9",
93
+ "isomorphic-web-audio-api": "1.0.2",
94
+ "react": "19.2.5",
95
+ "react-dom": "19.2.5",
96
+ "zustand": "5.0.12"
97
+ },
98
+ "publishConfig": {
99
+ "access": "public"
100
+ },
101
+ "patchedDependencies": {
102
+ "node-web-audio-api@1.0.9": "patches/node-web-audio-api@1.0.9.patch"
103
+ }
104
+ }
@@ -3,14 +3,260 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Examples</title>
6
+ <meta name="theme-color" content="#2b2b2b" />
7
+ <meta name="description" content="Examples for @jadujoel/web-audio-clip-node — a custom Audio Worklet Node for playing audio clips." />
8
+ <title>web-audio-clip-node — Examples</title>
9
+ <style>
10
+ :root {
11
+ --color-bg: #2b2b2b;
12
+ --color-surface: #3a3a3a;
13
+ --color-surface-hover: #424242;
14
+ --color-text: #e8e8e8;
15
+ --color-text-muted: #999;
16
+ --color-accent: #5b9bd5;
17
+ --color-accent-dim: rgba(91, 155, 213, 0.15);
18
+ --color-border: #555;
19
+ --color-border-subtle: #444;
20
+ --radius-sm: 6px;
21
+ --radius-md: 10px;
22
+ --radius-lg: 14px;
23
+ }
24
+
25
+ *, *::before, *::after { box-sizing: border-box; }
26
+
27
+ body {
28
+ background-color: var(--color-bg);
29
+ color: var(--color-text);
30
+ font-family: system-ui, -apple-system, sans-serif;
31
+ font-size: 16px;
32
+ margin: 0;
33
+ padding: 0;
34
+ min-height: 100dvh;
35
+ display: flex;
36
+ flex-direction: column;
37
+ -webkit-font-smoothing: antialiased;
38
+ }
39
+
40
+ main {
41
+ max-width: 740px;
42
+ width: 100%;
43
+ margin: 0 auto;
44
+ padding: 48px 20px 64px;
45
+ flex: 1;
46
+ }
47
+
48
+ header {
49
+ margin-bottom: 40px;
50
+ }
51
+
52
+ .eyebrow {
53
+ font-size: 0.75rem;
54
+ font-weight: 600;
55
+ letter-spacing: 0.1em;
56
+ text-transform: uppercase;
57
+ color: var(--color-accent);
58
+ margin: 0 0 10px;
59
+ }
60
+
61
+ h1 {
62
+ font-size: clamp(1.6rem, 5vw, 2.2rem);
63
+ font-weight: 700;
64
+ margin: 0 0 12px;
65
+ line-height: 1.2;
66
+ letter-spacing: -0.02em;
67
+ }
68
+
69
+ .subtitle {
70
+ color: var(--color-text-muted);
71
+ font-size: 1rem;
72
+ margin: 0;
73
+ line-height: 1.55;
74
+ max-width: 52ch;
75
+ }
76
+
77
+ .grid {
78
+ display: grid;
79
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
80
+ gap: 14px;
81
+ list-style: none;
82
+ margin: 0;
83
+ padding: 0;
84
+ }
85
+
86
+ .card {
87
+ background: var(--color-surface);
88
+ border: 1px solid var(--color-border-subtle);
89
+ border-radius: var(--radius-lg);
90
+ transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;
91
+ }
92
+
93
+ .card:hover {
94
+ background: var(--color-surface-hover);
95
+ border-color: var(--color-border);
96
+ transform: translateY(-2px);
97
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);
98
+ }
99
+
100
+ .card a {
101
+ display: flex;
102
+ flex-direction: column;
103
+ gap: 6px;
104
+ padding: 20px 22px;
105
+ text-decoration: none;
106
+ color: inherit;
107
+ height: 100%;
108
+ }
109
+
110
+ .card-header {
111
+ display: flex;
112
+ align-items: center;
113
+ gap: 10px;
114
+ }
115
+
116
+ .card-icon {
117
+ font-size: 1.25rem;
118
+ line-height: 1;
119
+ flex-shrink: 0;
120
+ }
121
+
122
+ .card-title {
123
+ font-size: 1rem;
124
+ font-weight: 600;
125
+ color: var(--color-text);
126
+ display: flex;
127
+ align-items: center;
128
+ gap: 6px;
129
+ }
130
+
131
+ .card-title .arrow {
132
+ color: var(--color-accent);
133
+ opacity: 0;
134
+ transform: translateX(-4px);
135
+ transition: opacity 0.15s ease, transform 0.15s ease;
136
+ font-size: 0.9em;
137
+ }
138
+
139
+ .card:hover .card-title .arrow {
140
+ opacity: 1;
141
+ transform: translateX(0);
142
+ }
143
+
144
+ .card-desc {
145
+ font-size: 0.875rem;
146
+ color: var(--color-text-muted);
147
+ line-height: 1.5;
148
+ margin: 0;
149
+ }
150
+
151
+ .badge {
152
+ font-size: 0.65rem;
153
+ font-weight: 600;
154
+ text-transform: uppercase;
155
+ letter-spacing: 0.06em;
156
+ padding: 2px 7px;
157
+ border-radius: 999px;
158
+ background: var(--color-accent-dim);
159
+ color: var(--color-accent);
160
+ border: 1px solid rgba(91, 155, 213, 0.25);
161
+ white-space: nowrap;
162
+ align-self: flex-start;
163
+ margin-top: 2px;
164
+ }
165
+
166
+ footer {
167
+ text-align: center;
168
+ padding: 24px 20px;
169
+ color: var(--color-text-muted);
170
+ font-size: 0.8125rem;
171
+ border-top: 1px solid var(--color-border-subtle);
172
+ }
173
+
174
+ footer a {
175
+ color: var(--color-accent);
176
+ text-decoration: none;
177
+ }
178
+
179
+ footer a:hover {
180
+ text-decoration: underline;
181
+ }
182
+ </style>
7
183
  </head>
8
184
  <body>
9
- <ul>
10
- <li><a href="cdn-vanilla">Vanilla</a>
11
- <li><a href="esm-bundler">ESM Bundler</a></li>
12
- <li><a href="react">React</a></li>
13
- <li><a href="self-hosted">Self Hosted</a></li>
14
- </ul>
185
+ <main>
186
+ <header>
187
+ <p class="eyebrow">@jadujoel/web-audio-clip-node</p>
188
+ <h1>Examples</h1>
189
+ <p class="subtitle">Six integration paths for the custom Audio Worklet Node — from a zero-build CDN snippet to a full streaming React app.</p>
190
+ </header>
191
+
192
+ <ul class="grid">
193
+ <li class="card">
194
+ <a href="playground">
195
+ <div class="card-header">
196
+ <span class="card-icon">🎛️</span>
197
+ <span class="card-title">Playground<span class="arrow">→</span></span>
198
+ </div>
199
+ <p class="card-desc">Full-featured interactive demo showcasing all controls, parameters, linked pairs, tempo, and loop settings.</p>
200
+ <span class="badge">Bun · React</span>
201
+ </a>
202
+ </li>
203
+ <li class="card">
204
+ <a href="cdn-vanilla">
205
+ <div class="card-header">
206
+ <span class="card-icon">🌐</span>
207
+ <span class="card-title">CDN Vanilla<span class="arrow">→</span></span>
208
+ </div>
209
+ <p class="card-desc">Single HTML file. No build step — loads the jsDelivr bundle directly and plays a generated demo clip.</p>
210
+ <span class="badge">No build</span>
211
+ </a>
212
+ </li>
213
+ <li class="card">
214
+ <a href="esm-bundler">
215
+ <div class="card-header">
216
+ <span class="card-icon">📦</span>
217
+ <span class="card-title">ESM Bundler<span class="arrow">→</span></span>
218
+ </div>
219
+ <p class="card-desc">Bun + TypeScript importing the package as an ES module. Standard bundler workflow.</p>
220
+ <span class="badge">Bun</span>
221
+ </a>
222
+ </li>
223
+ <li class="card">
224
+ <a href="react">
225
+ <div class="card-header">
226
+ <span class="card-icon">⚛️</span>
227
+ <span class="card-title">React<span class="arrow">→</span></span>
228
+ </div>
229
+ <p class="card-desc">Bun + React using the built-in hooks and UI controls — the full interactive demo.</p>
230
+ <span class="badge">Bun · React</span>
231
+ </a>
232
+ </li>
233
+ <li class="card">
234
+ <a href="self-hosted">
235
+ <div class="card-header">
236
+ <span class="card-icon">🗄️</span>
237
+ <span class="card-title">Self-Hosted<span class="arrow">→</span></span>
238
+ </div>
239
+ <p class="card-desc">Serve your own <code>processor.js</code> via <code>getProcessorModuleUrl()</code> for full control over asset hosting.</p>
240
+ <span class="badge">Bun</span>
241
+ </a>
242
+ </li>
243
+ <li class="card">
244
+ <a href="streaming">
245
+ <div class="card-header">
246
+ <span class="card-icon">🎵</span>
247
+ <span class="card-title">Streaming<span class="arrow">→</span></span>
248
+ </div>
249
+ <p class="card-desc">Decode and buffer audio on-the-fly from a network stream via a dedicated Worker — minimal latency start.</p>
250
+ <span class="badge">Bun · Worker</span>
251
+ </a>
252
+ </li>
253
+ </ul>
254
+ </main>
255
+
256
+ <footer>
257
+ <a href="https://github.com/jadujoel/web-audio-clip-node" target="_blank" rel="noopener noreferrer">GitHub</a>
258
+ &nbsp;·&nbsp;
259
+ <a href="https://www.npmjs.com/package/@jadujoel/web-audio-clip-node" target="_blank" rel="noopener noreferrer">npm</a>
260
+ </footer>
15
261
  </body>
16
262
  </html>
@@ -0,0 +1,9 @@
1
+ # Playground
2
+
3
+ Full-featured interactive demo of all ClipNode controls, parameters, and features.
4
+ Uses the published `@jadujoel/web-audio-clip-node` package.
5
+
6
+ ```bash
7
+ bun install
8
+ bun run dev
9
+ ```
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="theme-color" content="#404040">
7
+ <meta name="description" content="Full-featured interactive playground for @jadujoel/web-audio-clip-node.">
8
+ <title>ClipNode – Playground</title>
9
+ </head>
10
+ <body>
11
+ <div id="root"></div>
12
+ <script type="module" src="./src/main.tsx"></script>
13
+ </body>
14
+ </html>
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Joel Löf
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,197 @@
1
+ # @jadujoel/web-audio-clip-node
2
+
3
+ AudioWorklet clip playback for the Web Audio API with pause/resume, reusable start, buffer hot-swap, loop callbacks, loop crossfade, real-time sample playhead control, and sample-accurate fades — without extra nodes.
4
+
5
+ Live demo: https://jadujoel.github.io/web-audio-clip-node/
6
+
7
+ ## Why this library
8
+
9
+ `AudioBufferSourceNode` is good at one-shot playback, but it does not give you some things clip-based apps usually need:
10
+
11
+ - **Pause and resume** — `AudioBufferSourceNode` has no pause; you must stop and recreate
12
+ - **Reusable start** — call `start()` again after `stop()` without creating a new node
13
+ - **Buffer hot-swap** — assign a new `AudioBuffer` to a playing node and it switches seamlessly
14
+ - **Loop callback** when the playhead wraps (`onlooped`)
15
+ - **Loop crossfade** built into the source itself
16
+ - **Real-time playhead** get/set access in samples
17
+ - **Sample-accurate fade in / fade out** without wiring extra gain nodes around every source
18
+
19
+ `ClipNode` is aimed at those missing pieces while staying small enough to drop into a plain browser app.
20
+
21
+ ## Try It Fast
22
+
23
+ - Open the live playground: https://jadujoel.github.io/web-audio-clip-node/
24
+ - Run all local examples from the repo root with `bun run examples`
25
+ - Try the zero-install example in [examples/cdn-vanilla](examples/cdn-vanilla/)
26
+
27
+ ## Features
28
+
29
+ - AudioWorklet-based clip playback with explicit transport control
30
+ - **Pause / resume** and **reusable start** — no need to recreate the node after stopping
31
+ - **Buffer hot-swap** — assign `clip.buffer` on a live node and it switches immediately
32
+ - `onlooped` callback support so you can react when the clip wraps
33
+ - Loop start, loop end, and loop crossfade on the node itself
34
+ - Real-time playhead readback and sample-accurate seeking via `clip.playhead`
35
+ - Sample-accurate fade in and fade out without external helper nodes
36
+ - Playback rate from `-2` to `2`, including reverse playback
37
+ - Detune, gain, stereo pan, highpass, and lowpass controls
38
+ - Streaming buffer support for incremental writes
39
+ - Optional React hooks and ready-made controls
40
+
41
+ ## Install
42
+
43
+ ```sh
44
+ npm install @jadujoel/web-audio-clip-node
45
+ ```
46
+
47
+ ## Quick Start
48
+
49
+ ```ts
50
+ import { ClipNode, getProcessorBlobUrl } from "@jadujoel/web-audio-clip-node";
51
+
52
+ const ctx = new AudioContext();
53
+ await ctx.audioWorklet.addModule(getProcessorBlobUrl());
54
+
55
+ const clip = new ClipNode(ctx);
56
+ clip.connect(ctx.destination);
57
+
58
+ const response = await fetch("/audio/clip.opus");
59
+ const buffer = await ctx.decodeAudioData(await response.arrayBuffer());
60
+
61
+ clip.buffer = buffer;
62
+ clip.loop = true;
63
+ clip.loopStart = 0.5;
64
+ clip.loopEnd = 1.75;
65
+ clip.loopCrossfade = 0.04;
66
+ clip.fadeIn = 0.01;
67
+ clip.fadeOut = 0.08;
68
+ clip.onlooped = () => {
69
+ console.log("looped at sample", clip.playhead);
70
+ };
71
+
72
+ clip.playbackRate.value = 1;
73
+ clip.playhead = 24_000;
74
+ clip.start();
75
+ ```
76
+
77
+ `clip.playhead` is read and written in samples, so you can scrub to an exact frame position while playback is active.
78
+
79
+ ## React Quick Start
80
+
81
+ ```tsx
82
+ import {
83
+ GainControl,
84
+ PlaybackRateControl,
85
+ TransportButtons,
86
+ useClipControls,
87
+ useClipNode,
88
+ } from "@jadujoel/web-audio-clip-node/react";
89
+ import "@jadujoel/web-audio-clip-node/styles.css";
90
+
91
+ function Player() {
92
+ const controls = useClipControls();
93
+ const clip = useClipNode({
94
+ values: controls.values,
95
+ enabled: controls.enabled,
96
+ loop: controls.loop,
97
+ setValue: controls.setValue,
98
+ });
99
+
100
+ return (
101
+ <>
102
+ <TransportButtons
103
+ nodeState={clip.nodeState}
104
+ onStart={clip.start}
105
+ onStop={clip.stop}
106
+ onPause={clip.pause}
107
+ onResume={clip.resume}
108
+ onDispose={clip.dispose}
109
+ onLog={clip.logState}
110
+ onLoadSound={clip.loadSound}
111
+ />
112
+ <PlaybackRateControl
113
+ value={controls.values.playbackRate}
114
+ defaultValue={1}
115
+ enabled={controls.enabled.playbackRate}
116
+ onChange={(value) => {
117
+ controls.setValue("playbackRate", value);
118
+ clip.applyValue("playbackRate", value);
119
+ }}
120
+ onToggle={(enabled) => {
121
+ controls.setEnabled("playbackRate", enabled);
122
+ clip.applyToggle("playbackRate", enabled);
123
+ }}
124
+ />
125
+ <GainControl
126
+ value={controls.values.gain}
127
+ defaultValue={0}
128
+ enabled={controls.enabled.gain}
129
+ onChange={(value) => {
130
+ controls.setValue("gain", value);
131
+ clip.applyValue("gain", value);
132
+ }}
133
+ onToggle={(enabled) => {
134
+ controls.setEnabled("gain", enabled);
135
+ clip.applyToggle("gain", enabled);
136
+ }}
137
+ />
138
+ </>
139
+ );
140
+ }
141
+ ```
142
+
143
+ ## CDN Usage
144
+
145
+ Use the bundled entry point when you want a single browser import and load the processor from jsDelivr with `getProcessorCdnUrl()`.
146
+
147
+ ```html
148
+ <script type="module">
149
+ import {
150
+ ClipNode,
151
+ getProcessorCdnUrl,
152
+ } from "https://cdn.jsdelivr.net/npm/@jadujoel/web-audio-clip-node@0.1.6/dist/lib.bundle.js";
153
+
154
+ const ctx = new AudioContext();
155
+ await ctx.audioWorklet.addModule(getProcessorCdnUrl("0.1.6"));
156
+
157
+ const clip = new ClipNode(ctx);
158
+ clip.connect(ctx.destination);
159
+ </script>
160
+ ```
161
+
162
+ The full no-bundler demo lives in [examples/cdn-vanilla](examples/cdn-vanilla/).
163
+
164
+ That demo foregrounds the non-standard capabilities: pause/resume, restarting without recreating the node, buffer hot-swap, loop count callbacks, loop crossfade, and direct playhead seeking in samples.
165
+
166
+ ## Processor Loading Options
167
+
168
+ | Method | Function | Use case |
169
+ |--------|----------|----------|
170
+ | Blob URL | `getProcessorBlobUrl()` | Default for package consumers who want zero setup |
171
+ | CDN | `getProcessorCdnUrl("0.1.6")` | Plain browser usage via jsDelivr |
172
+ | Self-hosted | `getProcessorModuleUrl(baseUrl)` | You serve `processor.js` from your own app |
173
+
174
+ ## Entry Points
175
+
176
+ | Entry point | Import path | Contents |
177
+ |-------------|-------------|----------|
178
+ | Core | `@jadujoel/web-audio-clip-node` | `ClipNode`, types, utilities, controls, processor kernel |
179
+ | Bundle | `@jadujoel/web-audio-clip-node/bundle` | Single-file ESM bundle for CDN or browser module usage |
180
+ | React | `@jadujoel/web-audio-clip-node/react` | Store, hooks, and UI components |
181
+ | Processor | `@jadujoel/web-audio-clip-node/processor` | Standalone worklet script |
182
+ | Styles | `@jadujoel/web-audio-clip-node/styles.css` | CSS for the React components |
183
+
184
+ ## Examples
185
+
186
+ The [examples](examples/) directory covers the main integration styles.
187
+
188
+ | Example | Description | Build step? |
189
+ |---------|-------------|-------------|
190
+ | [cdn-vanilla](examples/cdn-vanilla/) | Single HTML file using the CDN bundle and processor URL | No |
191
+ | [esm-bundler](examples/esm-bundler/) | Vite + TypeScript app importing the package directly | Yes |
192
+ | [react](examples/react/) | Vite + React with the included hooks and controls | Yes |
193
+ | [self-hosted](examples/self-hosted/) | Vite app serving `processor.js` locally via `getProcessorModuleUrl()` | Yes |
194
+
195
+ ## License
196
+
197
+ MIT
@@ -0,0 +1,6 @@
1
+ import { useClipNode } from "./hooks/useClipNode";
2
+ interface AppProps {
3
+ useClipNodeImpl?: typeof useClipNode;
4
+ }
5
+ export declare function App({ useClipNodeImpl }?: AppProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};