@jadujoel/web-audio-clip-node 0.1.7 → 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 (432) hide show
  1. package/dist/App.d.ts +6 -0
  2. package/dist/App.js +179 -0
  3. package/dist/audio/processor-code.d.ts +1 -1
  4. package/dist/audio/processor-code.js +1 -1
  5. package/dist/audio/processor-kernel.js +23 -9
  6. package/dist/audio/version.d.ts +1 -1
  7. package/dist/audio/version.js +1 -1
  8. package/dist/lib.bundle.js +3 -3
  9. package/dist/lib.bundle.js.map +3 -3
  10. package/dist/processor.js +2 -2
  11. package/dist/processor.js.map +3 -3
  12. package/dist/streaming.d.ts +6 -0
  13. package/dist/streaming.js +32 -0
  14. package/dist/workers/framed-raw-opus.d.ts +13 -0
  15. package/dist/workers/framed-raw-opus.js +68 -0
  16. package/dist/workers/mp3-decode-worker.d.ts +1 -0
  17. package/dist/workers/mp3-decode-worker.js +254 -0
  18. package/dist/workers/mp3-decode-worker.min.js +1 -0
  19. package/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
  20. package/dist/workers/ogg-opus-decode-worker.js +398 -0
  21. package/dist/workers/ogg-opus-decode-worker.min.js +1 -0
  22. package/dist/workers/opus-worker-common.d.ts +45 -0
  23. package/dist/workers/opus-worker-common.js +226 -0
  24. package/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
  25. package/dist/workers/raw-opus-framed-decode-worker.js +119 -0
  26. package/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
  27. package/dist/workers/webm-opus-decode-worker.d.ts +1 -0
  28. package/dist/workers/webm-opus-decode-worker.js +97 -0
  29. package/dist/workers/webm-opus-decode-worker.min.js +1 -0
  30. package/dist/workers/webm-opus-parser.d.ts +49 -0
  31. package/dist/workers/webm-opus-parser.js +369 -0
  32. package/dist/workers/worker-utils.d.ts +11 -0
  33. package/dist/workers/worker-utils.js +55 -0
  34. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/LICENSE +21 -0
  35. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/README.md +197 -0
  36. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/App.d.ts +6 -0
  37. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/App.js +179 -0
  38. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.d.ts +88 -0
  39. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.js +317 -0
  40. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.d.ts +1 -0
  41. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.js +2 -0
  42. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.d.ts +43 -0
  43. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.js +892 -0
  44. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.d.ts +1 -0
  45. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.js +103 -0
  46. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.d.ts +192 -0
  47. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.js +9 -0
  48. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.d.ts +22 -0
  49. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.js +128 -0
  50. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.d.ts +1 -0
  51. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.js +2 -0
  52. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.d.ts +6 -0
  53. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.js +17 -0
  54. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.d.ts +28 -0
  55. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.js +99 -0
  56. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.d.ts +17 -0
  57. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.js +73 -0
  58. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.d.ts +26 -0
  59. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.js +74 -0
  60. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.d.ts +10 -0
  61. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.js +44 -0
  62. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.d.ts +14 -0
  63. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.js +6 -0
  64. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.d.ts +12 -0
  65. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.js +48 -0
  66. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.d.ts +10 -0
  67. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.js +44 -0
  68. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.d.ts +10 -0
  69. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.js +50 -0
  70. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.d.ts +10 -0
  71. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.js +44 -0
  72. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.d.ts +13 -0
  73. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.js +20 -0
  74. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.d.ts +18 -0
  75. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.js +174 -0
  76. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.d.ts +14 -0
  77. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.js +9 -0
  78. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.d.ts +31 -0
  79. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.js +214 -0
  80. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.d.ts +2 -0
  81. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.js +80 -0
  82. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.d.ts +20 -0
  83. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.js +51 -0
  84. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.d.ts +1 -0
  85. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.js +17 -0
  86. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.d.ts +6 -0
  87. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.js +39 -0
  88. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.d.ts +31 -0
  89. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.js +338 -0
  90. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.d.ts +15 -0
  91. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.js +17 -0
  92. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js +6 -0
  93. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js.map +7 -0
  94. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib.d.ts +16 -0
  95. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib.js +16 -0
  96. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js +4 -0
  97. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js.map +12 -0
  98. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.d.ts +63 -0
  99. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.js +71 -0
  100. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.d.ts +6 -0
  101. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.js +32 -0
  102. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css +739 -0
  103. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css.d.ts +3 -0
  104. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.d.ts +13 -0
  105. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.js +68 -0
  106. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.d.ts +1 -0
  107. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.js +254 -0
  108. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.min.js +1 -0
  109. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
  110. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.js +398 -0
  111. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.min.js +1 -0
  112. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.d.ts +45 -0
  113. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.js +226 -0
  114. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
  115. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.js +119 -0
  116. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
  117. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.d.ts +1 -0
  118. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.js +97 -0
  119. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.min.js +1 -0
  120. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.d.ts +49 -0
  121. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.js +369 -0
  122. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.d.ts +11 -0
  123. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.js +55 -0
  124. package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/package.json +104 -0
  125. package/examples/index.html +253 -8
  126. package/examples/playground/README.md +9 -0
  127. package/examples/playground/index.html +14 -0
  128. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/LICENSE +21 -0
  129. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/README.md +197 -0
  130. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/App.d.ts +6 -0
  131. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/App.js +179 -0
  132. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.d.ts +88 -0
  133. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.js +317 -0
  134. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.d.ts +1 -0
  135. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.js +2 -0
  136. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.d.ts +43 -0
  137. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.js +892 -0
  138. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.d.ts +1 -0
  139. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.js +103 -0
  140. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.d.ts +192 -0
  141. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.js +9 -0
  142. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.d.ts +22 -0
  143. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.js +128 -0
  144. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.d.ts +1 -0
  145. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.js +2 -0
  146. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.d.ts +6 -0
  147. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.js +17 -0
  148. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.d.ts +28 -0
  149. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.js +99 -0
  150. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.d.ts +17 -0
  151. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.js +73 -0
  152. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.d.ts +26 -0
  153. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.js +74 -0
  154. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.d.ts +10 -0
  155. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.js +44 -0
  156. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.d.ts +14 -0
  157. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.js +6 -0
  158. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.d.ts +12 -0
  159. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.js +48 -0
  160. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.d.ts +10 -0
  161. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.js +44 -0
  162. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.d.ts +10 -0
  163. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.js +50 -0
  164. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.d.ts +10 -0
  165. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.js +44 -0
  166. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.d.ts +13 -0
  167. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.js +20 -0
  168. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.d.ts +18 -0
  169. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.js +174 -0
  170. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.d.ts +14 -0
  171. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.js +9 -0
  172. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.d.ts +31 -0
  173. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.js +214 -0
  174. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.d.ts +2 -0
  175. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.js +80 -0
  176. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.d.ts +20 -0
  177. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.js +51 -0
  178. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.d.ts +1 -0
  179. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.js +17 -0
  180. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.d.ts +6 -0
  181. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.js +39 -0
  182. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.d.ts +31 -0
  183. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.js +338 -0
  184. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.d.ts +15 -0
  185. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.js +17 -0
  186. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js +6 -0
  187. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js.map +7 -0
  188. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib.d.ts +16 -0
  189. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib.js +16 -0
  190. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js +4 -0
  191. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js.map +12 -0
  192. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.d.ts +63 -0
  193. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.js +71 -0
  194. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.d.ts +6 -0
  195. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.js +32 -0
  196. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css +739 -0
  197. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css.d.ts +3 -0
  198. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.d.ts +13 -0
  199. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.js +68 -0
  200. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.d.ts +1 -0
  201. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.js +254 -0
  202. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.min.js +1 -0
  203. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
  204. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.js +398 -0
  205. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.min.js +1 -0
  206. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.d.ts +45 -0
  207. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.js +226 -0
  208. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
  209. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.js +119 -0
  210. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
  211. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.d.ts +1 -0
  212. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.js +97 -0
  213. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.min.js +1 -0
  214. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.d.ts +49 -0
  215. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.js +369 -0
  216. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.d.ts +11 -0
  217. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.js +55 -0
  218. package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/package.json +104 -0
  219. package/examples/playground/package.json +19 -0
  220. package/examples/playground/src/App.tsx +442 -0
  221. package/examples/playground/src/main.tsx +9 -0
  222. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/LICENSE +21 -0
  223. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/README.md +197 -0
  224. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/App.d.ts +6 -0
  225. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/App.js +179 -0
  226. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.d.ts +88 -0
  227. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.js +317 -0
  228. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.d.ts +1 -0
  229. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.js +2 -0
  230. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.d.ts +43 -0
  231. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.js +892 -0
  232. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.d.ts +1 -0
  233. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.js +103 -0
  234. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.d.ts +192 -0
  235. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.js +9 -0
  236. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.d.ts +22 -0
  237. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.js +128 -0
  238. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.d.ts +1 -0
  239. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.js +2 -0
  240. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.d.ts +6 -0
  241. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.js +17 -0
  242. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.d.ts +28 -0
  243. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.js +99 -0
  244. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.d.ts +17 -0
  245. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.js +73 -0
  246. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.d.ts +26 -0
  247. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.js +74 -0
  248. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.d.ts +10 -0
  249. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.js +44 -0
  250. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.d.ts +14 -0
  251. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.js +6 -0
  252. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.d.ts +12 -0
  253. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.js +48 -0
  254. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.d.ts +10 -0
  255. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.js +44 -0
  256. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.d.ts +10 -0
  257. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.js +50 -0
  258. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.d.ts +10 -0
  259. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.js +44 -0
  260. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.d.ts +13 -0
  261. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.js +20 -0
  262. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.d.ts +18 -0
  263. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.js +174 -0
  264. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.d.ts +14 -0
  265. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.js +9 -0
  266. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.d.ts +31 -0
  267. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.js +214 -0
  268. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.d.ts +2 -0
  269. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.js +80 -0
  270. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.d.ts +20 -0
  271. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.js +51 -0
  272. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.d.ts +1 -0
  273. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.js +17 -0
  274. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.d.ts +6 -0
  275. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.js +39 -0
  276. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.d.ts +31 -0
  277. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.js +338 -0
  278. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.d.ts +15 -0
  279. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.js +17 -0
  280. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js +6 -0
  281. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js.map +7 -0
  282. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib.d.ts +16 -0
  283. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib.js +16 -0
  284. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js +4 -0
  285. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js.map +12 -0
  286. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.d.ts +63 -0
  287. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.js +71 -0
  288. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.d.ts +6 -0
  289. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.js +32 -0
  290. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css +739 -0
  291. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css.d.ts +3 -0
  292. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.d.ts +13 -0
  293. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.js +68 -0
  294. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.d.ts +1 -0
  295. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.js +254 -0
  296. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.min.js +1 -0
  297. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
  298. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.js +398 -0
  299. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.min.js +1 -0
  300. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.d.ts +45 -0
  301. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.js +226 -0
  302. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
  303. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.js +119 -0
  304. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
  305. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.d.ts +1 -0
  306. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.js +97 -0
  307. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.min.js +1 -0
  308. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.d.ts +49 -0
  309. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.js +369 -0
  310. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.d.ts +11 -0
  311. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.js +55 -0
  312. package/examples/react/node_modules/@jadujoel/web-audio-clip-node/package.json +104 -0
  313. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/LICENSE +21 -0
  314. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/README.md +197 -0
  315. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/App.d.ts +6 -0
  316. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/App.js +179 -0
  317. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.d.ts +88 -0
  318. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.js +317 -0
  319. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.d.ts +1 -0
  320. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.js +2 -0
  321. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.d.ts +43 -0
  322. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.js +892 -0
  323. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.d.ts +1 -0
  324. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.js +103 -0
  325. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.d.ts +192 -0
  326. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.js +9 -0
  327. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.d.ts +22 -0
  328. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.js +128 -0
  329. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.d.ts +1 -0
  330. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.js +2 -0
  331. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.d.ts +6 -0
  332. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.js +17 -0
  333. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.d.ts +28 -0
  334. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.js +99 -0
  335. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.d.ts +17 -0
  336. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.js +73 -0
  337. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.d.ts +26 -0
  338. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.js +74 -0
  339. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.d.ts +10 -0
  340. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.js +44 -0
  341. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.d.ts +14 -0
  342. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.js +6 -0
  343. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.d.ts +12 -0
  344. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.js +48 -0
  345. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.d.ts +10 -0
  346. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.js +44 -0
  347. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.d.ts +10 -0
  348. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.js +50 -0
  349. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.d.ts +10 -0
  350. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.js +44 -0
  351. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.d.ts +13 -0
  352. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.js +20 -0
  353. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.d.ts +18 -0
  354. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.js +174 -0
  355. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.d.ts +14 -0
  356. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.js +9 -0
  357. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.d.ts +31 -0
  358. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.js +214 -0
  359. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.d.ts +2 -0
  360. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.js +80 -0
  361. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.d.ts +20 -0
  362. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.js +51 -0
  363. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.d.ts +1 -0
  364. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.js +17 -0
  365. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.d.ts +6 -0
  366. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.js +39 -0
  367. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.d.ts +31 -0
  368. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.js +338 -0
  369. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.d.ts +15 -0
  370. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.js +17 -0
  371. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js +6 -0
  372. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js.map +7 -0
  373. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib.d.ts +16 -0
  374. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib.js +16 -0
  375. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js +4 -0
  376. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js.map +12 -0
  377. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.d.ts +63 -0
  378. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.js +71 -0
  379. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.d.ts +6 -0
  380. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.js +32 -0
  381. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css +739 -0
  382. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css.d.ts +3 -0
  383. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.d.ts +13 -0
  384. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.js +68 -0
  385. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.d.ts +1 -0
  386. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.js +254 -0
  387. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.min.js +1 -0
  388. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
  389. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.js +398 -0
  390. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.min.js +1 -0
  391. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.d.ts +45 -0
  392. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.js +226 -0
  393. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
  394. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.js +119 -0
  395. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
  396. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.d.ts +1 -0
  397. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.js +97 -0
  398. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.min.js +1 -0
  399. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.d.ts +49 -0
  400. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.js +369 -0
  401. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.d.ts +11 -0
  402. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.js +55 -0
  403. package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/package.json +104 -0
  404. package/examples/self-hosted/public/processor.js +2 -2
  405. package/examples/streaming/build-worker.ts +45 -17
  406. package/examples/streaming/framed-raw-opus.ts +95 -0
  407. package/examples/streaming/index.html +4 -199
  408. package/examples/streaming/{decode-worker.ts → mp3-decode-worker.ts} +62 -44
  409. package/examples/streaming/ogg-opus-decode-worker.ts +479 -0
  410. package/examples/streaming/opus-worker-common.ts +278 -0
  411. package/examples/streaming/package.json +9 -1
  412. package/examples/streaming/raw-opus-framed-decode-worker.ts +148 -0
  413. package/examples/streaming/src/App.tsx +726 -0
  414. package/examples/streaming/src/clip-node-lib.ts +33 -0
  415. package/examples/streaming/src/framedRawOpus.test.ts +74 -0
  416. package/examples/streaming/src/main.tsx +6 -0
  417. package/examples/streaming/src/react-dom-runtime.d.ts +1 -0
  418. package/examples/streaming/src/react-dom-runtime.js +1 -0
  419. package/examples/streaming/src/react-runtime.d.ts +2 -0
  420. package/examples/streaming/src/react-runtime.js +7 -0
  421. package/examples/streaming/src/streamFormat.test.ts +13 -0
  422. package/examples/streaming/src/streamFormat.ts +14 -0
  423. package/examples/streaming/src/streamTimeline.test.ts +74 -0
  424. package/examples/streaming/src/streamTimeline.ts +76 -0
  425. package/examples/streaming/src/useStreamingClipNode.ts +540 -0
  426. package/examples/streaming/src/webmOpusParser.test.ts +153 -0
  427. package/examples/streaming/tsconfig.json +19 -0
  428. package/examples/streaming/webm-opus-decode-worker.ts +123 -0
  429. package/examples/streaming/webm-opus-parser.ts +461 -0
  430. package/examples/streaming/worker-utils.ts +45 -0
  431. package/package.json +13 -2
  432. package/examples/streaming/main.ts +0 -276
@@ -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,15 +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
- <li><a href="streaming">Streaming</a></li>
15
- </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>
16
261
  </body>
17
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 {};