@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.
- package/README.md +77 -32
- package/dist/App.d.ts +6 -0
- package/dist/App.js +179 -0
- package/dist/audio/ClipNode.d.ts +2 -0
- package/dist/audio/ClipNode.js +6 -1
- package/dist/audio/processor-code.d.ts +1 -1
- package/dist/audio/processor-code.js +1 -1
- package/dist/audio/processor-kernel.js +26 -9
- package/dist/audio/processor.js +9 -0
- package/dist/audio/version.d.ts +1 -1
- package/dist/audio/version.js +1 -1
- package/dist/lib.bundle.js +3 -3
- package/dist/lib.bundle.js.map +3 -3
- package/dist/processor.js +2 -2
- package/dist/processor.js.map +4 -4
- package/dist/streaming.d.ts +6 -0
- package/dist/streaming.js +32 -0
- package/dist/workers/framed-raw-opus.d.ts +13 -0
- package/dist/workers/framed-raw-opus.js +68 -0
- package/dist/workers/mp3-decode-worker.d.ts +1 -0
- package/dist/workers/mp3-decode-worker.js +254 -0
- package/dist/workers/mp3-decode-worker.min.js +1 -0
- package/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
- package/dist/workers/ogg-opus-decode-worker.js +398 -0
- package/dist/workers/ogg-opus-decode-worker.min.js +1 -0
- package/dist/workers/opus-worker-common.d.ts +45 -0
- package/dist/workers/opus-worker-common.js +226 -0
- package/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
- package/dist/workers/raw-opus-framed-decode-worker.js +119 -0
- package/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
- package/dist/workers/webm-opus-decode-worker.d.ts +1 -0
- package/dist/workers/webm-opus-decode-worker.js +97 -0
- package/dist/workers/webm-opus-decode-worker.min.js +1 -0
- package/dist/workers/webm-opus-parser.d.ts +49 -0
- package/dist/workers/webm-opus-parser.js +369 -0
- package/dist/workers/worker-utils.d.ts +11 -0
- package/dist/workers/worker-utils.js +55 -0
- package/examples/README.md +12 -4
- package/examples/cdn-vanilla/README.md +10 -6
- package/examples/cdn-vanilla/index.html +1065 -33
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/LICENSE +21 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/README.md +197 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/App.d.ts +6 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/App.js +179 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.d.ts +88 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.js +317 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.d.ts +1 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.js +2 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.d.ts +43 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.js +892 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.d.ts +1 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.js +103 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.d.ts +192 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.js +9 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.d.ts +22 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.js +128 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.d.ts +1 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.js +2 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.d.ts +6 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.js +17 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.d.ts +28 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.js +99 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.d.ts +17 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.js +73 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.d.ts +26 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.js +74 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.d.ts +10 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.js +44 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.d.ts +14 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.js +6 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.d.ts +12 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.js +48 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.d.ts +10 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.js +44 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.d.ts +10 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.js +50 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.d.ts +10 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.js +44 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.d.ts +13 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.js +20 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.d.ts +18 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.js +174 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.d.ts +14 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.js +9 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.d.ts +31 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.js +214 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.d.ts +2 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.js +80 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.d.ts +20 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.js +51 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.d.ts +1 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.js +17 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.d.ts +6 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.js +39 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.d.ts +31 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.js +338 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.d.ts +15 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.js +17 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js +6 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js.map +7 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib.d.ts +16 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/lib.js +16 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js +4 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js.map +12 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.d.ts +63 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.js +71 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.d.ts +6 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.js +32 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css +739 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css.d.ts +3 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.d.ts +13 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.js +68 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.d.ts +1 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.js +254 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.min.js +1 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.js +398 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.min.js +1 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.d.ts +45 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.js +226 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.js +119 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.d.ts +1 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.js +97 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.min.js +1 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.d.ts +49 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.js +369 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.d.ts +11 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.js +55 -0
- package/examples/esm-bundler/node_modules/@jadujoel/web-audio-clip-node/package.json +104 -0
- package/examples/index.html +253 -7
- package/examples/playground/README.md +9 -0
- package/examples/playground/index.html +14 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/LICENSE +21 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/README.md +197 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/App.d.ts +6 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/App.js +179 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.d.ts +88 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.js +317 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.d.ts +1 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.js +2 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.d.ts +43 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.js +892 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.d.ts +1 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.js +103 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.d.ts +192 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.js +9 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.d.ts +22 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.js +128 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.d.ts +1 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.js +2 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.d.ts +6 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.js +17 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.d.ts +28 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.js +99 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.d.ts +17 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.js +73 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.d.ts +26 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.js +74 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.d.ts +10 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.js +44 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.d.ts +14 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.js +6 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.d.ts +12 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.js +48 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.d.ts +10 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.js +44 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.d.ts +10 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.js +50 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.d.ts +10 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.js +44 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.d.ts +13 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.js +20 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.d.ts +18 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.js +174 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.d.ts +14 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.js +9 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.d.ts +31 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.js +214 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.d.ts +2 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.js +80 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.d.ts +20 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.js +51 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.d.ts +1 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.js +17 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.d.ts +6 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.js +39 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.d.ts +31 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.js +338 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.d.ts +15 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.js +17 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js +6 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js.map +7 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib.d.ts +16 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/lib.js +16 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js +4 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js.map +12 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.d.ts +63 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.js +71 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.d.ts +6 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.js +32 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css +739 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css.d.ts +3 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.d.ts +13 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.js +68 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.d.ts +1 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.js +254 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.min.js +1 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.js +398 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.min.js +1 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.d.ts +45 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.js +226 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.js +119 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.d.ts +1 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.js +97 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.min.js +1 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.d.ts +49 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.js +369 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.d.ts +11 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.js +55 -0
- package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/package.json +104 -0
- package/examples/playground/package.json +19 -0
- package/examples/playground/src/App.tsx +442 -0
- package/examples/playground/src/main.tsx +9 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/LICENSE +21 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/README.md +197 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/App.d.ts +6 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/App.js +179 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.d.ts +88 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.js +317 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.d.ts +1 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.js +2 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.d.ts +43 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.js +892 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.d.ts +1 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.js +103 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.d.ts +192 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.js +9 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.d.ts +22 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.js +128 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.d.ts +1 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.js +2 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.d.ts +6 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.js +17 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.d.ts +28 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.js +99 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.d.ts +17 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.js +73 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.d.ts +26 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.js +74 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.d.ts +10 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.js +44 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.d.ts +14 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.js +6 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.d.ts +12 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.js +48 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.d.ts +10 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.js +44 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.d.ts +10 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.js +50 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.d.ts +10 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.js +44 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.d.ts +13 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.js +20 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.d.ts +18 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.js +174 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.d.ts +14 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.js +9 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.d.ts +31 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.js +214 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.d.ts +2 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.js +80 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.d.ts +20 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.js +51 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.d.ts +1 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.js +17 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.d.ts +6 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.js +39 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.d.ts +31 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.js +338 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.d.ts +15 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.js +17 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js +6 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js.map +7 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib.d.ts +16 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/lib.js +16 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js +4 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js.map +12 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.d.ts +63 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.js +71 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.d.ts +6 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.js +32 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css +739 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css.d.ts +3 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.d.ts +13 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.js +68 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.d.ts +1 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.js +254 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.min.js +1 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.js +398 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.min.js +1 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.d.ts +45 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.js +226 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.js +119 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.d.ts +1 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.js +97 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.min.js +1 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.d.ts +49 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.js +369 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.d.ts +11 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.js +55 -0
- package/examples/react/node_modules/@jadujoel/web-audio-clip-node/package.json +104 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/LICENSE +21 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/README.md +197 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/App.d.ts +6 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/App.js +179 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.d.ts +88 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.js +317 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.d.ts +1 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.js +2 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.d.ts +43 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-kernel.js +892 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.d.ts +1 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor.js +103 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.d.ts +192 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/types.js +9 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.d.ts +22 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/utils.js +128 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.d.ts +1 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/version.js +2 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.d.ts +6 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/audio/workletUrl.js +17 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.d.ts +28 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/AudioControl.js +99 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.d.ts +17 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/ContextMenu.js +73 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.d.ts +26 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/ControlSection.js +74 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.d.ts +10 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/DetuneControl.js +44 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.d.ts +14 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/DisplayPanel.js +6 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.d.ts +12 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/FilterControl.js +48 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.d.ts +10 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/GainControl.js +44 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.d.ts +10 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PanControl.js +50 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.d.ts +10 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlaybackRateControl.js +44 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.d.ts +13 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/PlayheadSlider.js +20 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.d.ts +18 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/SnappableSlider.js +174 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.d.ts +14 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/components/TransportButtons.js +9 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.d.ts +31 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/controlDefs.js +214 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.d.ts +2 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/formatValueText.js +80 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.d.ts +20 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/controls/linkedControlPairs.js +51 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.d.ts +1 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/data/cache.js +17 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.d.ts +6 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/data/fileStore.js +39 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.d.ts +31 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/hooks/useClipNode.js +338 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.d.ts +15 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib-react.js +17 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js +6 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib.bundle.js.map +7 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib.d.ts +16 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/lib.js +16 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js +4 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/processor.js.map +12 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.d.ts +63 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/store/clipStore.js +71 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.d.ts +6 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/streaming.js +32 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css +739 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/styles.css.d.ts +3 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.d.ts +13 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/framed-raw-opus.js +68 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.d.ts +1 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.js +254 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/mp3-decode-worker.min.js +1 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.d.ts +1 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.js +398 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/ogg-opus-decode-worker.min.js +1 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.d.ts +45 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/opus-worker-common.js +226 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.d.ts +1 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.js +119 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/raw-opus-framed-decode-worker.min.js +1 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.d.ts +1 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.js +97 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-decode-worker.min.js +1 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.d.ts +49 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/webm-opus-parser.js +369 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.d.ts +11 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/dist/workers/worker-utils.js +55 -0
- package/examples/self-hosted/node_modules/@jadujoel/web-audio-clip-node/package.json +104 -0
- package/examples/self-hosted/public/processor.js +2 -2
- package/examples/streaming/README.md +25 -0
- package/examples/streaming/build-worker.ts +49 -0
- package/examples/streaming/framed-raw-opus.ts +95 -0
- package/examples/streaming/index.html +16 -0
- package/examples/streaming/mp3-decode-worker.ts +326 -0
- package/examples/streaming/ogg-opus-decode-worker.ts +479 -0
- package/examples/streaming/opus-worker-common.ts +278 -0
- package/examples/streaming/package.json +20 -0
- package/examples/streaming/raw-opus-framed-decode-worker.ts +148 -0
- package/examples/streaming/src/App.tsx +726 -0
- package/examples/streaming/src/clip-node-lib.ts +33 -0
- package/examples/streaming/src/framedRawOpus.test.ts +74 -0
- package/examples/streaming/src/main.tsx +6 -0
- package/examples/streaming/src/react-dom-runtime.d.ts +1 -0
- package/examples/streaming/src/react-dom-runtime.js +1 -0
- package/examples/streaming/src/react-runtime.d.ts +2 -0
- package/examples/streaming/src/react-runtime.js +7 -0
- package/examples/streaming/src/streamFormat.test.ts +13 -0
- package/examples/streaming/src/streamFormat.ts +14 -0
- package/examples/streaming/src/streamTimeline.test.ts +74 -0
- package/examples/streaming/src/streamTimeline.ts +76 -0
- package/examples/streaming/src/useStreamingClipNode.ts +540 -0
- package/examples/streaming/src/webmOpusParser.test.ts +153 -0
- package/examples/streaming/tsconfig.json +19 -0
- package/examples/streaming/webm-opus-decode-worker.ts +123 -0
- package/examples/streaming/webm-opus-parser.ts +461 -0
- package/examples/streaming/worker-utils.ts +45 -0
- package/package.json +13 -2
|
@@ -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,179 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState } from "react";
|
|
3
|
+
import { isTempoRelativeSnap, remapTempoRelativeValue } from "./audio/utils.js";
|
|
4
|
+
import { ControlSection } from "./components/ControlSection.js";
|
|
5
|
+
import { DetuneControl } from "./components/DetuneControl.js";
|
|
6
|
+
import { DisplayPanel } from "./components/DisplayPanel.js";
|
|
7
|
+
import { FilterControl } from "./components/FilterControl.js";
|
|
8
|
+
import { GainControl } from "./components/GainControl.js";
|
|
9
|
+
import { PanControl } from "./components/PanControl.js";
|
|
10
|
+
import { PlaybackRateControl } from "./components/PlaybackRateControl.js";
|
|
11
|
+
import { PlayheadSlider } from "./components/PlayheadSlider.js";
|
|
12
|
+
import { TransportButtons } from "./components/TransportButtons.js";
|
|
13
|
+
import { controlDefs, loopControlDefs } from "./controls/controlDefs.js";
|
|
14
|
+
import { getActiveLinkedControls, getLinkedControlPairForControl, getLinkedControlUpdates, loopLinkedControlPairs, transportLinkedControlPairs, } from "./controls/linkedControlPairs.js";
|
|
15
|
+
import { useClipNode } from "./hooks/useClipNode.js";
|
|
16
|
+
import { useClipControls } from "./store/clipStore.js";
|
|
17
|
+
function buildControlUpdates(keys, value) {
|
|
18
|
+
return Object.fromEntries(keys.map((key) => [key, value]));
|
|
19
|
+
}
|
|
20
|
+
export function App({ useClipNodeImpl = useClipNode } = {}) {
|
|
21
|
+
const controls = useClipControls();
|
|
22
|
+
const node = useClipNodeImpl({
|
|
23
|
+
values: controls.values,
|
|
24
|
+
enabled: controls.enabled,
|
|
25
|
+
loop: controls.loop,
|
|
26
|
+
setValue: controls.setValue,
|
|
27
|
+
});
|
|
28
|
+
const [tempoDraft, setTempoDraft] = useState(() => String(controls.tempo));
|
|
29
|
+
const [isEditingTempo, setIsEditingTempo] = useState(false);
|
|
30
|
+
// Persist audioDuration into maxs state for locked controls (for localStorage persistence)
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (node.audioDuration == null)
|
|
33
|
+
return;
|
|
34
|
+
for (const key of Object.keys(controls.maxLocked)) {
|
|
35
|
+
if (controls.maxLocked[key]) {
|
|
36
|
+
controls.setMax(key, node.audioDuration);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}, [node.audioDuration, controls.maxLocked, controls.setMax]);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
if (isEditingTempo)
|
|
42
|
+
return;
|
|
43
|
+
setTempoDraft(String(controls.tempo));
|
|
44
|
+
}, [controls.tempo, isEditingTempo]);
|
|
45
|
+
const handleValueChange = useCallback((key, val) => {
|
|
46
|
+
const linkedPair = getLinkedControlPairForControl(key);
|
|
47
|
+
if (linkedPair && controls.linkedPairs[linkedPair.key]) {
|
|
48
|
+
const effectiveMaxs = { ...controls.maxs };
|
|
49
|
+
for (const linkedKey of linkedPair.controls) {
|
|
50
|
+
if (controls.maxLocked[linkedKey] && node.audioDuration != null) {
|
|
51
|
+
effectiveMaxs[linkedKey] = node.audioDuration;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const nextValues = getLinkedControlUpdates({
|
|
55
|
+
pair: linkedPair,
|
|
56
|
+
changedKey: key,
|
|
57
|
+
nextValue: val,
|
|
58
|
+
values: controls.values,
|
|
59
|
+
mins: controls.mins,
|
|
60
|
+
maxs: effectiveMaxs,
|
|
61
|
+
});
|
|
62
|
+
controls.setValuesPartial(nextValues);
|
|
63
|
+
node.applyValues(nextValues);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
node.applyValue(key, val);
|
|
67
|
+
}, [
|
|
68
|
+
controls.linkedPairs,
|
|
69
|
+
controls.maxLocked,
|
|
70
|
+
controls.maxs,
|
|
71
|
+
controls.mins,
|
|
72
|
+
controls.setValuesPartial,
|
|
73
|
+
controls.values,
|
|
74
|
+
node.applyValue,
|
|
75
|
+
node.applyValues,
|
|
76
|
+
node.audioDuration,
|
|
77
|
+
]);
|
|
78
|
+
const handleTempoChange = useCallback((nextTempo) => {
|
|
79
|
+
if (!Number.isFinite(nextTempo) || nextTempo <= 0)
|
|
80
|
+
return;
|
|
81
|
+
const previousTempo = controls.tempo;
|
|
82
|
+
if (nextTempo === previousTempo)
|
|
83
|
+
return;
|
|
84
|
+
const changedValues = {};
|
|
85
|
+
for (const key of Object.keys(controls.values)) {
|
|
86
|
+
const snap = controls.snaps[key];
|
|
87
|
+
if (!isTempoRelativeSnap(snap))
|
|
88
|
+
continue;
|
|
89
|
+
const effectiveMax = controls.maxLocked[key] && node.audioDuration != null
|
|
90
|
+
? node.audioDuration
|
|
91
|
+
: controls.maxs[key];
|
|
92
|
+
const nextValue = remapTempoRelativeValue(controls.values[key], snap, previousTempo, nextTempo, controls.mins[key], effectiveMax);
|
|
93
|
+
if (nextValue !== controls.values[key]) {
|
|
94
|
+
changedValues[key] = nextValue;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
controls.setTempoAndValues(nextTempo, changedValues);
|
|
98
|
+
node.applyValues(changedValues);
|
|
99
|
+
}, [
|
|
100
|
+
controls.maxLocked,
|
|
101
|
+
controls.maxs,
|
|
102
|
+
controls.mins,
|
|
103
|
+
controls.setTempoAndValues,
|
|
104
|
+
controls.snaps,
|
|
105
|
+
controls.tempo,
|
|
106
|
+
controls.values,
|
|
107
|
+
node.applyValues,
|
|
108
|
+
node.audioDuration,
|
|
109
|
+
]);
|
|
110
|
+
const commitTempoDraft = useCallback(() => {
|
|
111
|
+
const nextTempo = Number(tempoDraft.trim());
|
|
112
|
+
setIsEditingTempo(false);
|
|
113
|
+
if (!Number.isFinite(nextTempo) || nextTempo <= 0) {
|
|
114
|
+
setTempoDraft(String(controls.tempo));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
handleTempoChange(nextTempo);
|
|
118
|
+
setTempoDraft(String(nextTempo));
|
|
119
|
+
}, [controls.tempo, handleTempoChange, tempoDraft]);
|
|
120
|
+
const handleSnapChange = useCallback((key, snap) => {
|
|
121
|
+
const linkedKeys = getActiveLinkedControls(key, controls.linkedPairs);
|
|
122
|
+
controls.setSnapsPartial(buildControlUpdates(linkedKeys, snap));
|
|
123
|
+
}, [controls.linkedPairs, controls.setSnapsPartial]);
|
|
124
|
+
const handleToggle = useCallback((key, on) => {
|
|
125
|
+
const linkedKeys = getActiveLinkedControls(key, controls.linkedPairs);
|
|
126
|
+
controls.setEnabledPartial(buildControlUpdates(linkedKeys, on));
|
|
127
|
+
for (const linkedKey of linkedKeys) {
|
|
128
|
+
node.applyToggle(linkedKey, on);
|
|
129
|
+
}
|
|
130
|
+
}, [controls.linkedPairs, controls.setEnabledPartial, node.applyToggle]);
|
|
131
|
+
const handleMinChange = useCallback((key, val) => {
|
|
132
|
+
const linkedKeys = getActiveLinkedControls(key, controls.linkedPairs);
|
|
133
|
+
controls.setMinsPartial(buildControlUpdates(linkedKeys, val));
|
|
134
|
+
}, [controls.linkedPairs, controls.setMinsPartial]);
|
|
135
|
+
const handleMaxChange = useCallback((key, val) => {
|
|
136
|
+
const linkedKeys = getActiveLinkedControls(key, controls.linkedPairs);
|
|
137
|
+
controls.setMaxsPartial(buildControlUpdates(linkedKeys, val));
|
|
138
|
+
}, [controls.linkedPairs, controls.setMaxsPartial]);
|
|
139
|
+
const handleLoopChange = useCallback((checked) => {
|
|
140
|
+
controls.setLoop(checked);
|
|
141
|
+
node.setLoopOnNode(checked);
|
|
142
|
+
}, [controls.setLoop, node.setLoopOnNode]);
|
|
143
|
+
const handleMaxLockedChange = useCallback((key, locked) => {
|
|
144
|
+
const linkedKeys = getActiveLinkedControls(key, controls.linkedPairs);
|
|
145
|
+
controls.setMaxLockedPartial(buildControlUpdates(linkedKeys, locked));
|
|
146
|
+
if (locked && node.audioDuration != null) {
|
|
147
|
+
controls.setMaxsPartial(buildControlUpdates(linkedKeys, node.audioDuration));
|
|
148
|
+
}
|
|
149
|
+
}, [
|
|
150
|
+
controls.linkedPairs,
|
|
151
|
+
controls.setMaxLockedPartial,
|
|
152
|
+
controls.setMaxsPartial,
|
|
153
|
+
node.audioDuration,
|
|
154
|
+
]);
|
|
155
|
+
const handlePlayheadChange = useCallback((v) => handleValueChange("playhead", v), [handleValueChange]);
|
|
156
|
+
const handlePlaybackRateChange = useCallback((v) => handleValueChange("playbackRate", v), [handleValueChange]);
|
|
157
|
+
const handlePlaybackRateToggle = useCallback((on) => handleToggle("playbackRate", on), [handleToggle]);
|
|
158
|
+
const handleDetuneChange = useCallback((v) => handleValueChange("detune", v), [handleValueChange]);
|
|
159
|
+
const handleDetuneToggle = useCallback((on) => handleToggle("detune", on), [handleToggle]);
|
|
160
|
+
const handleGainChange = useCallback((v) => handleValueChange("gain", v), [handleValueChange]);
|
|
161
|
+
const handleGainToggle = useCallback((on) => handleToggle("gain", on), [handleToggle]);
|
|
162
|
+
const handlePanChange = useCallback((v) => handleValueChange("pan", v), [handleValueChange]);
|
|
163
|
+
const handlePanToggle = useCallback((on) => handleToggle("pan", on), [handleToggle]);
|
|
164
|
+
const handleLowpassChange = useCallback((v) => handleValueChange("lowpass", v), [handleValueChange]);
|
|
165
|
+
const handleLowpassToggle = useCallback((on) => handleToggle("lowpass", on), [handleToggle]);
|
|
166
|
+
const handleHighpassChange = useCallback((v) => handleValueChange("highpass", v), [handleValueChange]);
|
|
167
|
+
const handleHighpassToggle = useCallback((on) => handleToggle("highpass", on), [handleToggle]);
|
|
168
|
+
return (_jsxs("main", { children: [_jsx(DisplayPanel, { nodeState: node.nodeState, statusMessage: node.statusMessage, soundName: node.soundName, currentTime: node.infoCurrentTime, currentFrame: node.infoCurrentFrame, timesLooped: node.infoTimesLooped, latency: node.infoLatency, timeTaken: node.infoTimeTaken }), _jsx(TransportButtons, { nodeState: node.nodeState, onStart: node.start, onStop: node.stop, onPause: node.pause, onResume: node.resume, onDispose: node.dispose, onLog: node.logState, onLoadSound: node.loadSound }), _jsxs("fieldset", { className: "control-group tempo-group", children: [_jsx("legend", { children: "Tempo" }), _jsx("label", { htmlFor: "tempo", className: "tempo-label", children: "BPM" }), _jsx("input", { id: "tempo", type: "number", min: 20, max: 999, step: 1, value: tempoDraft, onFocus: () => setIsEditingTempo(true), onChange: (e) => setTempoDraft(e.target.value), onBlur: commitTempoDraft, onKeyDown: (e) => {
|
|
169
|
+
if (e.key === "Enter") {
|
|
170
|
+
commitTempoDraft();
|
|
171
|
+
e.currentTarget.blur();
|
|
172
|
+
}
|
|
173
|
+
if (e.key === "Escape") {
|
|
174
|
+
setIsEditingTempo(false);
|
|
175
|
+
setTempoDraft(String(controls.tempo));
|
|
176
|
+
e.currentTarget.blur();
|
|
177
|
+
}
|
|
178
|
+
}, style: { width: 70 } })] }), _jsx(PlayheadSlider, { value: controls.values.playhead, audioDuration: node.audioDuration, disabled: node.nodeState === "initial" || node.nodeState === "disposed", onChange: handlePlayheadChange }), _jsxs("section", { id: "controls", children: [_jsx(ControlSection, { legend: "Transport", defs: controlDefs, values: controls.values, snaps: controls.snaps, enabled: controls.enabled, mins: controls.mins, maxs: controls.maxs, maxLocked: controls.maxLocked, linked: controls.linkedPairs, linkedPairs: transportLinkedControlPairs, tempo: controls.tempo, audioDuration: node.audioDuration, onValueChange: handleValueChange, onToggle: handleToggle, onLinkedChange: controls.setLinkedPair, onSnapChange: handleSnapChange, onMinChange: handleMinChange, onMaxChange: handleMaxChange, onMaxLockedChange: handleMaxLockedChange }), _jsxs("fieldset", { className: "control-group", children: [_jsx("legend", { children: "Loop" }), _jsxs("div", { className: "loop-row", children: [_jsx("label", { htmlFor: "loop", children: "Loop" }), _jsx("input", { type: "checkbox", id: "loop", checked: controls.loop, onChange: (e) => handleLoopChange(e.target.checked) })] }), controls.loop && (_jsx(ControlSection, { legend: "Controls", defs: loopControlDefs, values: controls.values, snaps: controls.snaps, enabled: controls.enabled, mins: controls.mins, maxs: controls.maxs, maxLocked: controls.maxLocked, linked: controls.linkedPairs, linkedPairs: loopLinkedControlPairs, tempo: controls.tempo, audioDuration: node.audioDuration, onValueChange: handleValueChange, onToggle: handleToggle, onLinkedChange: controls.setLinkedPair, onSnapChange: handleSnapChange, onMinChange: handleMinChange, onMaxChange: handleMaxChange, onMaxLockedChange: handleMaxLockedChange }))] }), _jsxs("fieldset", { className: "control-group", children: [_jsx("legend", { children: "Parameters" }), _jsx(PlaybackRateControl, { value: controls.values.playbackRate, defaultValue: 1, enabled: controls.enabled.playbackRate, onChange: handlePlaybackRateChange, onToggle: handlePlaybackRateToggle }), _jsx(DetuneControl, { value: controls.values.detune, defaultValue: 0, enabled: controls.enabled.detune, onChange: handleDetuneChange, onToggle: handleDetuneToggle }), _jsx(GainControl, { value: controls.values.gain, defaultValue: 0, enabled: controls.enabled.gain, onChange: handleGainChange, onToggle: handleGainToggle }), _jsx(PanControl, { value: controls.values.pan, defaultValue: 0, enabled: controls.enabled.pan, onChange: handlePanChange, onToggle: handlePanToggle }), _jsx(FilterControl, { label: "Lowpass", controlKey: "lowpass", value: controls.values.lowpass, defaultValue: 16384, enabled: controls.enabled.lowpass, onChange: handleLowpassChange, onToggle: handleLowpassToggle }), _jsx(FilterControl, { label: "Highpass", controlKey: "highpass", value: controls.values.highpass, defaultValue: 32, enabled: controls.enabled.highpass, onChange: handleHighpassChange, onToggle: handleHighpassToggle })] })] })] }));
|
|
179
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { ClipNodeState, ClipWorkletOptions, FrameData } from "./types";
|
|
2
|
+
export declare class ClipNode extends AudioWorkletNode {
|
|
3
|
+
onscheduled?: () => void;
|
|
4
|
+
onstarted?: () => void;
|
|
5
|
+
onpaused?: () => void;
|
|
6
|
+
onresumed?: () => void;
|
|
7
|
+
onended?: () => void;
|
|
8
|
+
onlooped?: () => void;
|
|
9
|
+
onstopped?: () => void;
|
|
10
|
+
onframe?: (data: FrameData) => void;
|
|
11
|
+
ondisposed?: () => void;
|
|
12
|
+
onstatechange?: (state: ClipNodeState) => void;
|
|
13
|
+
private _buffer?;
|
|
14
|
+
private _loopStart;
|
|
15
|
+
private _loopEnd;
|
|
16
|
+
private _loop;
|
|
17
|
+
private _offset;
|
|
18
|
+
private _playhead;
|
|
19
|
+
private _fadeIn;
|
|
20
|
+
private _fadeOut;
|
|
21
|
+
private _loopCrossfade;
|
|
22
|
+
private _duration;
|
|
23
|
+
private _previousState;
|
|
24
|
+
private _bufferWriteCursor;
|
|
25
|
+
private _hasStreamingPort;
|
|
26
|
+
timesLooped: number;
|
|
27
|
+
state: ClipNodeState;
|
|
28
|
+
cpu: number;
|
|
29
|
+
constructor(context: BaseAudioContext, options?: ClipWorkletOptions);
|
|
30
|
+
private handleMessage;
|
|
31
|
+
private setState;
|
|
32
|
+
toggleGain(value?: boolean): void;
|
|
33
|
+
togglePlaybackRate(value?: boolean): void;
|
|
34
|
+
toggleDetune(value?: boolean): void;
|
|
35
|
+
togglePan(value?: boolean): void;
|
|
36
|
+
toggleHighpass(value?: boolean): void;
|
|
37
|
+
toggleLowpass(value?: boolean): void;
|
|
38
|
+
toggleFadeIn(value?: boolean): void;
|
|
39
|
+
toggleFadeOut(value?: boolean): void;
|
|
40
|
+
toggleLoopCrossfade(value?: boolean): void;
|
|
41
|
+
toggleLoopStart(value?: boolean): void;
|
|
42
|
+
toggleLoopEnd(value?: boolean): void;
|
|
43
|
+
logState(): void;
|
|
44
|
+
get buffer(): AudioBuffer | undefined;
|
|
45
|
+
set buffer(ab: AudioBuffer);
|
|
46
|
+
transferPort(port: MessagePort): void;
|
|
47
|
+
initializeBuffer(totalLength: number, channels: number, options?: {
|
|
48
|
+
streaming?: boolean;
|
|
49
|
+
}): void;
|
|
50
|
+
replaceBufferRange(startSample: number, channelData: Float32Array[], options?: {
|
|
51
|
+
totalLength?: number | null;
|
|
52
|
+
streamEnded?: boolean;
|
|
53
|
+
}): void;
|
|
54
|
+
appendBufferRange(channelData: Float32Array[], options?: {
|
|
55
|
+
totalLength?: number | null;
|
|
56
|
+
streamEnded?: boolean;
|
|
57
|
+
}): void;
|
|
58
|
+
finalizeBuffer(totalLength?: number): void;
|
|
59
|
+
start(when?: number, offset?: number, duration?: number): void;
|
|
60
|
+
stop(when?: number, initialDelay?: number): void;
|
|
61
|
+
pause(when?: number): void;
|
|
62
|
+
resume(when?: number): void;
|
|
63
|
+
get loop(): boolean;
|
|
64
|
+
set loop(value: boolean);
|
|
65
|
+
get loopStart(): number;
|
|
66
|
+
set loopStart(value: number);
|
|
67
|
+
get loopEnd(): number;
|
|
68
|
+
set loopEnd(value: number);
|
|
69
|
+
get duration(): number;
|
|
70
|
+
set duration(value: number);
|
|
71
|
+
get offset(): number;
|
|
72
|
+
set offset(value: number);
|
|
73
|
+
get playhead(): number;
|
|
74
|
+
set playhead(value: number);
|
|
75
|
+
get playbackRate(): AudioParam;
|
|
76
|
+
get detune(): AudioParam;
|
|
77
|
+
get highpass(): AudioParam;
|
|
78
|
+
get lowpass(): AudioParam;
|
|
79
|
+
get gain(): AudioParam;
|
|
80
|
+
get pan(): AudioParam;
|
|
81
|
+
get fadeIn(): number;
|
|
82
|
+
set fadeIn(value: number);
|
|
83
|
+
get fadeOut(): number;
|
|
84
|
+
set fadeOut(value: number);
|
|
85
|
+
get loopCrossfade(): number;
|
|
86
|
+
set loopCrossfade(value: number);
|
|
87
|
+
dispose(): void;
|
|
88
|
+
}
|