@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,103 @@
1
+ // AudioWorklet processor — runs in AudioWorkletGlobalScope
2
+ // Bundled separately and served at /processor.js
3
+ // This is a thin shell — all DSP logic lives in processor-kernel.ts
4
+ import { createFilterState, getProperties, handleProcessorMessage, processBlock, } from "./processor-kernel.js";
5
+ import { State } from "./types.js";
6
+ class ClipProcessor extends AudioWorkletProcessor {
7
+ static get parameterDescriptors() {
8
+ return [
9
+ {
10
+ name: "playbackRate",
11
+ automationRate: "a-rate",
12
+ defaultValue: 1.0,
13
+ },
14
+ { name: "detune", automationRate: "a-rate", defaultValue: 0 },
15
+ {
16
+ name: "gain",
17
+ automationRate: "a-rate",
18
+ defaultValue: 1,
19
+ minValue: 0,
20
+ },
21
+ { name: "pan", automationRate: "a-rate", defaultValue: 0 },
22
+ {
23
+ name: "highpass",
24
+ automationRate: "a-rate",
25
+ defaultValue: 20,
26
+ minValue: 20,
27
+ maxValue: 20000,
28
+ },
29
+ {
30
+ name: "lowpass",
31
+ automationRate: "a-rate",
32
+ defaultValue: 20000,
33
+ minValue: 20,
34
+ maxValue: 20000,
35
+ },
36
+ ];
37
+ }
38
+ properties;
39
+ filterState = {
40
+ lowpass: createFilterState(),
41
+ highpass: createFilterState(),
42
+ };
43
+ lastFrameTime = 0;
44
+ constructor(options) {
45
+ super(options);
46
+ this.properties = getProperties(options?.processorOptions, sampleRate);
47
+ this.port.onmessage = (ev) => {
48
+ if (ev.data.type === "transferPort") {
49
+ const port = ev.data.data;
50
+ port.onmessage = (portEv) => {
51
+ const messages = handleProcessorMessage(this.properties, portEv.data, currentTime, sampleRate);
52
+ for (const msg of messages)
53
+ this.port.postMessage(msg);
54
+ };
55
+ return;
56
+ }
57
+ const messages = handleProcessorMessage(this.properties, ev.data, currentTime, sampleRate);
58
+ for (const msg of messages)
59
+ this.port.postMessage(msg);
60
+ if (this.properties.state === State.Disposed)
61
+ this.port.close();
62
+ };
63
+ }
64
+ process(_inputs, outputs, parameters) {
65
+ try {
66
+ const result = processBlock(this.properties, outputs, parameters, { currentTime, currentFrame, sampleRate }, this.filterState);
67
+ for (const msg of result.messages)
68
+ this.port.postMessage(msg);
69
+ // Frame reporting
70
+ const timeTaken = currentTime - this.lastFrameTime;
71
+ this.lastFrameTime = currentTime;
72
+ this.port.postMessage({
73
+ type: "frame",
74
+ data: [
75
+ currentTime,
76
+ currentFrame,
77
+ Math.floor(this.properties.playhead),
78
+ timeTaken * 1000,
79
+ ],
80
+ });
81
+ return result.keepAlive;
82
+ }
83
+ catch (e) {
84
+ this.port.postMessage({
85
+ type: "processorError",
86
+ data: {
87
+ error: String(e),
88
+ state: this.properties.state,
89
+ bufferChannels: this.properties.buffer?.length,
90
+ bufferLength: this.properties.buffer?.[0]?.length,
91
+ paramKeys: Object.keys(parameters),
92
+ hasPlaybackRate: !!parameters.playbackRate,
93
+ hasDetune: !!parameters.detune,
94
+ hasGain: !!parameters.gain,
95
+ hasPan: !!parameters.pan,
96
+ outputChannels: outputs[0]?.length,
97
+ },
98
+ });
99
+ return true;
100
+ }
101
+ }
102
+ }
103
+ registerProcessor("ClipProcessor", ClipProcessor);
@@ -0,0 +1,192 @@
1
+ export declare const State: {
2
+ readonly Initial: 0;
3
+ readonly Started: 1;
4
+ readonly Stopped: 2;
5
+ readonly Paused: 3;
6
+ readonly Scheduled: 4;
7
+ readonly Ended: 5;
8
+ readonly Disposed: 6;
9
+ };
10
+ export type ClipProcessorState = (typeof State)[keyof typeof State];
11
+ export interface ClipProcessorOptions {
12
+ buffer?: Float32Array[];
13
+ streamBuffer?: StreamBufferState;
14
+ loop?: boolean;
15
+ loopStart?: number;
16
+ loopEnd?: number;
17
+ loopCrossfade?: number;
18
+ offset?: number;
19
+ duration?: number;
20
+ playhead?: number;
21
+ state?: ClipProcessorState;
22
+ startWhen?: number;
23
+ stopWhen?: number;
24
+ pauseWhen?: number;
25
+ resumeWhen?: number;
26
+ playedSamples?: number;
27
+ timesLooped?: number;
28
+ fadeInDuration?: number;
29
+ fadeOutDuration?: number;
30
+ enableFadeIn?: boolean;
31
+ enableFadeOut?: boolean;
32
+ enableLoopStart?: boolean;
33
+ enableLoopEnd?: boolean;
34
+ enableLoopCrossfade?: boolean;
35
+ enableGain?: boolean;
36
+ enablePan?: boolean;
37
+ enableHighpass?: boolean;
38
+ enableLowpass?: boolean;
39
+ enableDetune?: boolean;
40
+ enablePlaybackRate?: boolean;
41
+ }
42
+ export interface ClipWorkletOptions extends AudioWorkletNodeOptions {
43
+ processorOptions?: ClipProcessorOptions;
44
+ }
45
+ export type ClipNodeState = "initial" | "scheduled" | "started" | "stopped" | "paused" | "resumed" | "ended" | "disposed";
46
+ export type FrameData = readonly [
47
+ currentTime: number,
48
+ currentFrame: number,
49
+ playhead: number,
50
+ timeTaken: number
51
+ ];
52
+ export type ClipProcessorToggleMessageType = "toggleFadeIn" | "toggleFadeOut" | "toggleLoopStart" | "toggleLoopEnd" | "toggleLoopCrossfade" | "toggleGain" | "togglePan" | "toggleHighpass" | "toggleLowpass" | "toggleDetune" | "togglePlaybackRate";
53
+ export interface ClipProcessorOnmessageEvent {
54
+ readonly data: ClipProcessorMessageRx;
55
+ }
56
+ export type ClipProcessorOnmessage = (ev: ClipProcessorOnmessageEvent) => void;
57
+ export interface ProcessorWorkletOptions extends AudioWorkletNodeOptions {
58
+ readonly processorOptions?: ClipProcessorOptions;
59
+ }
60
+ export interface ClipProcessorStateMap {
61
+ readonly Initial: 0;
62
+ readonly Started: 1;
63
+ readonly Stopped: 2;
64
+ readonly Paused: 3;
65
+ readonly Scheduled: 4;
66
+ readonly Ended: 5;
67
+ readonly Disposed: 6;
68
+ }
69
+ export type ClipProcessorMessageRx = ClipProcessorBufferMessageRx | ClipProcessorBufferInitMessageRx | ClipProcessorBufferRangeMessageRx | ClipProcessorBufferEndMessageRx | ClipProcessorBufferResetMessageRx | ClipProcessorStartMessageRx | ClipProcessorStopMessageRx | ClipProcessorPauseMessageRx | ClipProcessorResumeMessageRx | ClipProcessorDisposeMessageRx | ClipProcessorLoopMessageRx | ClipProcessorLoopStartMessageRx | ClipProcessorLoopEndMessageRx | ClipProcessorPlayheadMessageRx | ClipProcessorFadeInMessageRx | ClipProcessorFadeOutMessageRx | ClipProcessorLoopCrossfadeMessageRx | ClipProcessorToggleMessageRx | ClipProcessorLogStateMessageRx;
70
+ export type ClipProcessorMessageType = "buffer" | "bufferInit" | "bufferRange" | "bufferEnd" | "bufferReset" | "start" | "stop" | "pause" | "resume" | "dispose" | "loop" | "loopStart" | "loopEnd" | "playhead" | "playbackRate" | "offset" | "fadeIn" | "fadeOut" | "loopCrossfade" | ClipProcessorToggleMessageType | "logState";
71
+ export interface ClipProcessorLogStateMessageRx {
72
+ readonly type: "logState";
73
+ readonly data?: never;
74
+ }
75
+ export interface ClipProcessorToggleMessageRx {
76
+ readonly type: ClipProcessorToggleMessageType;
77
+ readonly data?: boolean;
78
+ }
79
+ export interface ClipProcessorBufferMessageRx {
80
+ readonly type: "buffer";
81
+ readonly data: Float32Array[];
82
+ }
83
+ export interface StreamBufferSpan {
84
+ startSample: number;
85
+ endSample: number;
86
+ }
87
+ export interface BufferRangeWrite {
88
+ readonly startSample: number;
89
+ readonly channelData: Float32Array[];
90
+ readonly totalLength?: number | null;
91
+ readonly streamEnded?: boolean;
92
+ }
93
+ export interface StreamBufferState {
94
+ totalLength: number | null;
95
+ committedLength: number;
96
+ streamEnded: boolean;
97
+ streaming: boolean;
98
+ writtenSpans: StreamBufferSpan[];
99
+ pendingWrites: BufferRangeWrite[];
100
+ lowWaterThreshold: number;
101
+ lowWaterNotified: boolean;
102
+ lastUnderrunSample: number | null;
103
+ }
104
+ export interface ClipProcessorBufferInitMessageRx {
105
+ readonly type: "bufferInit";
106
+ readonly data: {
107
+ readonly channels: number;
108
+ readonly totalLength: number;
109
+ readonly streaming?: boolean;
110
+ };
111
+ }
112
+ export interface ClipProcessorBufferRangeMessageRx {
113
+ readonly type: "bufferRange";
114
+ readonly data: BufferRangeWrite;
115
+ }
116
+ export interface ClipProcessorBufferEndMessageRx {
117
+ readonly type: "bufferEnd";
118
+ readonly data?: {
119
+ readonly totalLength?: number;
120
+ };
121
+ }
122
+ export interface ClipProcessorBufferResetMessageRx {
123
+ readonly type: "bufferReset";
124
+ readonly data?: never;
125
+ }
126
+ export interface ClipProcessorStartMessageRx {
127
+ readonly type: "start";
128
+ readonly data?: {
129
+ readonly duration?: number;
130
+ readonly offset?: number;
131
+ readonly when?: number;
132
+ };
133
+ }
134
+ export interface ClipProcessorStopMessageRx {
135
+ readonly type: "stop";
136
+ readonly data?: number;
137
+ }
138
+ export interface ClipProcessorPauseMessageRx {
139
+ readonly type: "pause";
140
+ readonly data?: number;
141
+ }
142
+ export interface ClipProcessorResumeMessageRx {
143
+ readonly type: "resume";
144
+ readonly data?: number;
145
+ }
146
+ export interface ClipProcessorDisposeMessageRx {
147
+ readonly type: "dispose";
148
+ readonly data?: never;
149
+ }
150
+ export interface ClipProcessorLoopMessageRx {
151
+ readonly type: "loop";
152
+ readonly data: boolean;
153
+ }
154
+ export interface ClipProcessorLoopStartMessageRx {
155
+ readonly type: "loopStart";
156
+ readonly data: number;
157
+ }
158
+ export interface ClipProcessorLoopEndMessageRx {
159
+ readonly type: "loopEnd";
160
+ readonly data: number;
161
+ }
162
+ export interface ClipProcessorPlayheadMessageRx {
163
+ readonly type: "playhead";
164
+ readonly data: number;
165
+ }
166
+ export interface ClipProcessorFadeInMessageRx {
167
+ readonly type: "fadeIn";
168
+ readonly data: number;
169
+ }
170
+ export interface ClipProcessorFadeOutMessageRx {
171
+ readonly type: "fadeOut";
172
+ readonly data: number;
173
+ }
174
+ export interface ClipProcessorLoopCrossfadeMessageRx {
175
+ readonly type: "loopCrossfade";
176
+ readonly data: number;
177
+ }
178
+ export interface BlockParameters {
179
+ readonly playhead: number;
180
+ readonly durationSamples: number;
181
+ readonly loop: boolean;
182
+ readonly loopStartSamples: number;
183
+ readonly loopEndSamples: number;
184
+ readonly bufferLength: number;
185
+ readonly playbackRates: Float32Array;
186
+ }
187
+ export interface BlockReturnState {
188
+ readonly playhead: number;
189
+ readonly ended: boolean;
190
+ readonly looped: boolean;
191
+ readonly indexes: number[];
192
+ }
@@ -0,0 +1,9 @@
1
+ export const State = {
2
+ Initial: 0,
3
+ Started: 1,
4
+ Stopped: 2,
5
+ Paused: 3,
6
+ Scheduled: 4,
7
+ Ended: 5,
8
+ Disposed: 6,
9
+ };
@@ -0,0 +1,22 @@
1
+ export declare function dbFromLin(lin: number): number;
2
+ export declare function linFromDb(db: number): number;
3
+ declare const TEMPO_RELATIVE_SNAPS: readonly ["beat", "bar", "8th", "16th"];
4
+ export type TempoRelativeSnap = (typeof TEMPO_RELATIVE_SNAPS)[number];
5
+ export declare function isTempoRelativeSnap(snap: string): snap is TempoRelativeSnap;
6
+ export declare function getTempoSnapInterval(snap: string, tempo: number): number | null;
7
+ export declare function remapTempoRelativeValue(value: number, snap: string, oldTempo: number, newTempo: number, min: number, max: number): number;
8
+ export declare function getSnappedValue(value: number, snap: string, tempo: number): number;
9
+ export interface SliderPreset {
10
+ snaps?: number[];
11
+ ticks?: number[];
12
+ min?: number;
13
+ max?: number;
14
+ skew?: number;
15
+ step?: number;
16
+ logarithmic?: boolean;
17
+ }
18
+ export declare const presets: Record<string, SliderPreset>;
19
+ export declare function float32ArrayFromAudioBuffer(buffer: AudioBuffer): Float32Array[];
20
+ export declare function audioBufferFromFloat32Array(context: BaseAudioContext, data?: Float32Array[]): AudioBuffer | undefined;
21
+ export declare function generateSnapPoints(snap: string, tempo: number, min: number, max: number): number[];
22
+ export {};
@@ -0,0 +1,128 @@
1
+ export function dbFromLin(lin) {
2
+ return Math.max(20 * Math.log10(lin), -1000);
3
+ }
4
+ export function linFromDb(db) {
5
+ return 10 ** (db / 20);
6
+ }
7
+ const TEMPO_RELATIVE_SNAPS = ["beat", "bar", "8th", "16th"];
8
+ function clamp(value, min, max) {
9
+ return Math.min(Math.max(value, min), max);
10
+ }
11
+ export function isTempoRelativeSnap(snap) {
12
+ return TEMPO_RELATIVE_SNAPS.includes(snap);
13
+ }
14
+ export function getTempoSnapInterval(snap, tempo) {
15
+ if (!Number.isFinite(tempo) || tempo <= 0)
16
+ return null;
17
+ const secondsPerBeat = 60 / tempo;
18
+ switch (snap) {
19
+ case "beat":
20
+ return secondsPerBeat;
21
+ case "bar":
22
+ return secondsPerBeat * 4;
23
+ case "8th":
24
+ return secondsPerBeat / 2;
25
+ case "16th":
26
+ return secondsPerBeat / 4;
27
+ default:
28
+ return null;
29
+ }
30
+ }
31
+ export function remapTempoRelativeValue(value, snap, oldTempo, newTempo, min, max) {
32
+ if (!isTempoRelativeSnap(snap)) {
33
+ return clamp(value, min, max);
34
+ }
35
+ if (value < 0) {
36
+ return clamp(value, min, max);
37
+ }
38
+ const oldInterval = getTempoSnapInterval(snap, oldTempo);
39
+ const newInterval = getTempoSnapInterval(snap, newTempo);
40
+ if (oldInterval == null || newInterval == null) {
41
+ return clamp(value, min, max);
42
+ }
43
+ const count = Math.round(value / oldInterval);
44
+ return clamp(count * newInterval, min, max);
45
+ }
46
+ export function getSnappedValue(value, snap, tempo) {
47
+ const interval = getTempoSnapInterval(snap, tempo);
48
+ if (interval != null) {
49
+ return Math.round(value / interval) * interval;
50
+ }
51
+ switch (snap) {
52
+ case "int":
53
+ return Math.round(value);
54
+ default:
55
+ return value;
56
+ }
57
+ }
58
+ export const presets = {
59
+ hertz: {
60
+ snaps: [32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384],
61
+ ticks: [64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384],
62
+ min: 32,
63
+ max: 16384,
64
+ logarithmic: true,
65
+ },
66
+ decibel: {
67
+ ticks: [-48, -24, -12, -6, -3, 0],
68
+ min: -60,
69
+ max: 0,
70
+ skew: 1,
71
+ },
72
+ cents: {
73
+ snaps: Array.from({ length: 49 }, (_, i) => (i - 24) * 100), // semitones: -2400..2400 by 100
74
+ ticks: [-2400, -1200, 0, 1200, 2400],
75
+ min: -2400,
76
+ max: 2400,
77
+ skew: 1,
78
+ step: 1,
79
+ },
80
+ playbackRate: {
81
+ snaps: [-2, -1, -0.5, 0, 0.5, 1, 1.5, 2],
82
+ ticks: [-2, -1, 0, 1, 2],
83
+ min: -2,
84
+ max: 2,
85
+ skew: 1,
86
+ },
87
+ gain: {
88
+ snaps: [-60, -48, -36, -24, -18, -12, -9, -6, -3, -1, 0],
89
+ ticks: [-48, -24, -12, -6, -3, 0],
90
+ min: -100,
91
+ max: 0,
92
+ skew: 6,
93
+ },
94
+ pan: {
95
+ snaps: [-1, -0.75, -0.5, -0.25, 0, 0.25, 0.5, 0.75, 1],
96
+ ticks: [-1, -0.5, 0, 0.5, 1],
97
+ min: -1,
98
+ max: 1,
99
+ skew: 1,
100
+ },
101
+ };
102
+ export function float32ArrayFromAudioBuffer(buffer) {
103
+ return buffer.numberOfChannels === 1
104
+ ? [buffer.getChannelData(0)]
105
+ : [buffer.getChannelData(0), buffer.getChannelData(1)];
106
+ }
107
+ export function audioBufferFromFloat32Array(context, data) {
108
+ if (!data || data.length === 0)
109
+ return undefined;
110
+ const buffer = context.createBuffer(data.length, data[0].length, context.sampleRate);
111
+ for (let i = 0; i < data.length; i++) {
112
+ buffer.copyToChannel(new Float32Array(data[i]), i);
113
+ }
114
+ return buffer;
115
+ }
116
+ export function generateSnapPoints(snap, tempo, min, max) {
117
+ const interval = getTempoSnapInterval(snap, tempo) ?? (snap === "int" ? 1 : null);
118
+ if (interval == null)
119
+ return [];
120
+ if (interval <= 0)
121
+ return [];
122
+ const points = [];
123
+ const start = Math.ceil(min / interval) * interval;
124
+ for (let v = start; v <= max; v += interval) {
125
+ points.push(Math.round(v * 1e10) / 1e10);
126
+ }
127
+ return points;
128
+ }
@@ -0,0 +1 @@
1
+ export declare const VERSION = "0.1.8";
@@ -0,0 +1,2 @@
1
+ // AUTO-GENERATED — do not edit. Run 'bun run build:lib' to regenerate.
2
+ export const VERSION = "0.1.8";
@@ -0,0 +1,6 @@
1
+ /** Blob URL from embedded processor code. Zero-config, default for npm users. */
2
+ export declare function getProcessorBlobUrl(): string;
3
+ /** jsDelivr CDN URL. For script-tag / no-bundler usage. */
4
+ export declare function getProcessorCdnUrl(version?: string): string;
5
+ /** Custom URL relative to a base. For self-hosted processor.js. */
6
+ export declare function getProcessorModuleUrl(baseUrl?: string): string;
@@ -0,0 +1,17 @@
1
+ import { processorCode } from "./processor-code.js";
2
+ import { VERSION } from "./version.js";
3
+ const PACKAGE_NAME = "@jadujoel/web-audio-clip-node";
4
+ const PACKAGE_VERSION = VERSION;
5
+ /** Blob URL from embedded processor code. Zero-config, default for npm users. */
6
+ export function getProcessorBlobUrl() {
7
+ const blob = new Blob([processorCode], { type: "text/javascript" });
8
+ return URL.createObjectURL(blob);
9
+ }
10
+ /** jsDelivr CDN URL. For script-tag / no-bundler usage. */
11
+ export function getProcessorCdnUrl(version = PACKAGE_VERSION) {
12
+ return `https://cdn.jsdelivr.net/npm/${PACKAGE_NAME}@${version}/dist/processor.js`;
13
+ }
14
+ /** Custom URL relative to a base. For self-hosted processor.js. */
15
+ export function getProcessorModuleUrl(baseUrl = document.baseURI) {
16
+ return new URL("./processor.js", baseUrl).toString();
17
+ }
@@ -0,0 +1,28 @@
1
+ export interface AudioControlProps {
2
+ label: string;
3
+ controlKey?: string;
4
+ min: number;
5
+ max: number;
6
+ value: number;
7
+ defaultValue?: number;
8
+ step?: number;
9
+ tempo?: number;
10
+ snap?: string;
11
+ preset?: string;
12
+ title?: string;
13
+ enabled?: boolean;
14
+ hasToggle?: boolean;
15
+ hasSnap?: boolean;
16
+ hasMaxLock?: boolean;
17
+ audioDuration?: number | null;
18
+ maxLocked?: boolean;
19
+ onChange?: (value: number) => void;
20
+ onToggle?: (enabled: boolean) => void;
21
+ onSnapChange?: (snap: string) => void;
22
+ onMinChange?: (val: number) => void;
23
+ onMaxChange?: (val: number) => void;
24
+ onMaxLockedChange?: (locked: boolean) => void;
25
+ }
26
+ declare function AudioControlInner({ label, controlKey, min: propMin, max: propMax, value, defaultValue, step, tempo, snap, preset, title, enabled, hasToggle, hasSnap, hasMaxLock, audioDuration, maxLocked, onChange, onToggle, onSnapChange, onMinChange, onMaxChange, onMaxLockedChange, }: AudioControlProps): import("react/jsx-runtime").JSX.Element;
27
+ export declare const AudioControl: import("react").MemoExoticComponent<typeof AudioControlInner>;
28
+ export {};
@@ -0,0 +1,99 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo, useCallback, useId, useMemo, useRef, useState } from "react";
3
+ import { generateSnapPoints, getSnappedValue, presets } from "../audio/utils.js";
4
+ import { formatTickLabel, formatValueText } from "../controls/formatValueText.js";
5
+ import { ContextMenu } from "./ContextMenu.js";
6
+ import { SnappableSlider } from "./SnappableSlider.js";
7
+ function AudioControlInner({ label, controlKey, min: propMin, max: propMax, value, defaultValue, step, tempo = 120, snap = "none", preset, title, enabled = true, hasToggle = false, hasSnap = false, hasMaxLock = false, audioDuration, maxLocked = false, onChange, onToggle, onSnapChange, onMinChange, onMaxChange, onMaxLockedChange, }) {
8
+ const [isEditing, setIsEditing] = useState(false);
9
+ const [editText, setEditText] = useState("");
10
+ const [ctxMenu, setCtxMenu] = useState(null);
11
+ const inputRef = useRef(null);
12
+ const labelId = useId();
13
+ const presetConfig = preset ? presets[preset] : undefined;
14
+ const resolvedMin = presetConfig?.min ?? propMin;
15
+ const resolvedMax = presetConfig?.max ?? propMax;
16
+ const tempoSnaps = snap !== "none" && !preset
17
+ ? generateSnapPoints(snap, tempo, resolvedMin, resolvedMax)
18
+ : [];
19
+ const resolvedSnaps = presetConfig?.snaps ?? tempoSnaps;
20
+ const resolvedTicks = presetConfig?.ticks ?? [];
21
+ const resolvedSkew = presetConfig?.skew ?? 1;
22
+ const resolvedStep = step ?? presetConfig?.step;
23
+ const resolvedLogarithmic = presetConfig?.logarithmic ?? false;
24
+ const handleSliderChange = useCallback((rawValue) => {
25
+ if (!enabled)
26
+ return;
27
+ const snapped = getSnappedValue(rawValue, snap, tempo);
28
+ onChange?.(snapped);
29
+ }, [snap, tempo, onChange, enabled]);
30
+ const displayValue = formatValueText(value, controlKey, snap, tempo);
31
+ const tickFormatter = useMemo(() => {
32
+ if (preset || !controlKey)
33
+ return undefined;
34
+ return (v) => formatTickLabel(v, controlKey, snap, tempo);
35
+ }, [preset, controlKey, snap, tempo]);
36
+ const startEditing = useCallback(() => {
37
+ setEditText(String(value));
38
+ setIsEditing(true);
39
+ queueMicrotask(() => {
40
+ inputRef.current?.select();
41
+ });
42
+ }, [value]);
43
+ const commitEdit = useCallback(() => {
44
+ setIsEditing(false);
45
+ const parsed = Number.parseFloat(editText);
46
+ if (Number.isFinite(parsed)) {
47
+ const clamped = Math.min(Math.max(parsed, resolvedMin), resolvedMax);
48
+ onChange?.(clamped);
49
+ }
50
+ }, [editText, resolvedMin, resolvedMax, onChange]);
51
+ const cancelEdit = useCallback(() => {
52
+ setIsEditing(false);
53
+ }, []);
54
+ const handleEditKeyDown = useCallback((e) => {
55
+ if (e.key === "Enter") {
56
+ e.preventDefault();
57
+ commitEdit();
58
+ }
59
+ else if (e.key === "Escape") {
60
+ e.preventDefault();
61
+ cancelEdit();
62
+ }
63
+ }, [commitEdit, cancelEdit]);
64
+ const handleContextMenu = useCallback((e) => {
65
+ if (!hasSnap)
66
+ return;
67
+ e.preventDefault();
68
+ setCtxMenu({ x: e.clientX, y: e.clientY });
69
+ }, [hasSnap]);
70
+ return (_jsxs("div", { className: `audio-control${hasToggle && !enabled ? " audio-control--disabled" : ""}`, title: title, onContextMenu: handleContextMenu, children: [hasToggle && (_jsx("input", { type: "checkbox", className: "control-toggle", checked: enabled, onChange: (e) => onToggle?.(e.target.checked) })), !hasToggle && _jsx("span", { className: "control-toggle-placeholder" }), _jsx("span", { className: "control-label", id: labelId, children: label }), _jsx(SnappableSlider, { min: resolvedMin, max: resolvedMax, value: value, skew: resolvedSkew, step: resolvedStep, defaultValue: defaultValue, enableSnap: snap !== "none", snaps: resolvedSnaps, ticks: resolvedTicks, logarithmic: resolvedLogarithmic, disabled: hasToggle && !enabled, labelId: labelId, valueText: displayValue, formatTick: tickFormatter, onChange: handleSliderChange }), isEditing ? (_jsx("input", { ref: inputRef, type: "text", className: "control-output control-output--editing", value: editText, onChange: (e) => setEditText(e.target.value), onBlur: commitEdit, onKeyDown: handleEditKeyDown })) : (_jsx("button", { type: "button", className: "control-output", onClick: startEditing, children: displayValue })), ctxMenu && (_jsx(ContextMenu, { x: ctxMenu.x, y: ctxMenu.y, snap: snap, snapMode: preset ? "preset" : "tempo", min: propMin, max: propMax, maxLocked: maxLocked, showMaxLock: hasMaxLock, audioDuration: audioDuration ?? null, onSnapChange: (s) => {
71
+ onSnapChange?.(s);
72
+ }, onMinChange: (v) => onMinChange?.(v), onMaxChange: (v) => onMaxChange?.(v), onMaxLockedChange: (locked) => onMaxLockedChange?.(locked), onClose: () => setCtxMenu(null) }))] }));
73
+ }
74
+ function areAudioControlPropsEqual(prev, next) {
75
+ return (prev.label === next.label &&
76
+ prev.controlKey === next.controlKey &&
77
+ prev.min === next.min &&
78
+ prev.max === next.max &&
79
+ prev.value === next.value &&
80
+ prev.defaultValue === next.defaultValue &&
81
+ prev.step === next.step &&
82
+ prev.tempo === next.tempo &&
83
+ prev.snap === next.snap &&
84
+ prev.preset === next.preset &&
85
+ prev.title === next.title &&
86
+ prev.enabled === next.enabled &&
87
+ prev.hasToggle === next.hasToggle &&
88
+ prev.hasSnap === next.hasSnap &&
89
+ prev.hasMaxLock === next.hasMaxLock &&
90
+ prev.audioDuration === next.audioDuration &&
91
+ prev.maxLocked === next.maxLocked &&
92
+ prev.onChange === next.onChange &&
93
+ prev.onToggle === next.onToggle &&
94
+ prev.onSnapChange === next.onSnapChange &&
95
+ prev.onMinChange === next.onMinChange &&
96
+ prev.onMaxChange === next.onMaxChange &&
97
+ prev.onMaxLockedChange === next.onMaxLockedChange);
98
+ }
99
+ export const AudioControl = memo(AudioControlInner, areAudioControlPropsEqual);
@@ -0,0 +1,17 @@
1
+ export interface ContextMenuProps {
2
+ x: number;
3
+ y: number;
4
+ snap: string;
5
+ snapMode?: "tempo" | "preset";
6
+ min: number;
7
+ max: number;
8
+ maxLocked?: boolean;
9
+ showMaxLock?: boolean;
10
+ audioDuration: number | null;
11
+ onSnapChange: (snap: string) => void;
12
+ onMinChange: (val: number) => void;
13
+ onMaxChange: (val: number) => void;
14
+ onMaxLockedChange?: (locked: boolean) => void;
15
+ onClose: () => void;
16
+ }
17
+ export declare function ContextMenu({ x, y, snap, snapMode, min, max, maxLocked, showMaxLock, audioDuration, onSnapChange, onMinChange, onMaxChange, onMaxLockedChange, onClose, }: ContextMenuProps): import("react").ReactPortal;