@jadujoel/web-audio-clip-node 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App.d.ts +6 -0
- package/dist/App.js +179 -0
- package/dist/audio/processor-code.d.ts +1 -1
- package/dist/audio/processor-code.js +1 -1
- package/dist/audio/processor-kernel.js +23 -9
- 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 +3 -3
- 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/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 -8
- 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/build-worker.ts +45 -17
- package/examples/streaming/framed-raw-opus.ts +95 -0
- package/examples/streaming/index.html +4 -199
- package/examples/streaming/{decode-worker.ts → mp3-decode-worker.ts} +62 -44
- package/examples/streaming/ogg-opus-decode-worker.ts +479 -0
- package/examples/streaming/opus-worker-common.ts +278 -0
- package/examples/streaming/package.json +9 -1
- 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
- package/examples/streaming/main.ts +0 -276
|
@@ -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
|
+
}
|
package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/ClipNode.d.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { ClipNodeState, ClipWorkletOptions, FrameData } from "./types";
|
|
2
|
+
export declare class ClipNode extends AudioWorkletNode {
|
|
3
|
+
onscheduled?: () => void;
|
|
4
|
+
onstarted?: () => void;
|
|
5
|
+
onpaused?: () => void;
|
|
6
|
+
onresumed?: () => void;
|
|
7
|
+
onended?: () => void;
|
|
8
|
+
onlooped?: () => void;
|
|
9
|
+
onstopped?: () => void;
|
|
10
|
+
onframe?: (data: FrameData) => void;
|
|
11
|
+
ondisposed?: () => void;
|
|
12
|
+
onstatechange?: (state: ClipNodeState) => void;
|
|
13
|
+
private _buffer?;
|
|
14
|
+
private _loopStart;
|
|
15
|
+
private _loopEnd;
|
|
16
|
+
private _loop;
|
|
17
|
+
private _offset;
|
|
18
|
+
private _playhead;
|
|
19
|
+
private _fadeIn;
|
|
20
|
+
private _fadeOut;
|
|
21
|
+
private _loopCrossfade;
|
|
22
|
+
private _duration;
|
|
23
|
+
private _previousState;
|
|
24
|
+
private _bufferWriteCursor;
|
|
25
|
+
private _hasStreamingPort;
|
|
26
|
+
timesLooped: number;
|
|
27
|
+
state: ClipNodeState;
|
|
28
|
+
cpu: number;
|
|
29
|
+
constructor(context: BaseAudioContext, options?: ClipWorkletOptions);
|
|
30
|
+
private handleMessage;
|
|
31
|
+
private setState;
|
|
32
|
+
toggleGain(value?: boolean): void;
|
|
33
|
+
togglePlaybackRate(value?: boolean): void;
|
|
34
|
+
toggleDetune(value?: boolean): void;
|
|
35
|
+
togglePan(value?: boolean): void;
|
|
36
|
+
toggleHighpass(value?: boolean): void;
|
|
37
|
+
toggleLowpass(value?: boolean): void;
|
|
38
|
+
toggleFadeIn(value?: boolean): void;
|
|
39
|
+
toggleFadeOut(value?: boolean): void;
|
|
40
|
+
toggleLoopCrossfade(value?: boolean): void;
|
|
41
|
+
toggleLoopStart(value?: boolean): void;
|
|
42
|
+
toggleLoopEnd(value?: boolean): void;
|
|
43
|
+
logState(): void;
|
|
44
|
+
get buffer(): AudioBuffer | undefined;
|
|
45
|
+
set buffer(ab: AudioBuffer);
|
|
46
|
+
transferPort(port: MessagePort): void;
|
|
47
|
+
initializeBuffer(totalLength: number, channels: number, options?: {
|
|
48
|
+
streaming?: boolean;
|
|
49
|
+
}): void;
|
|
50
|
+
replaceBufferRange(startSample: number, channelData: Float32Array[], options?: {
|
|
51
|
+
totalLength?: number | null;
|
|
52
|
+
streamEnded?: boolean;
|
|
53
|
+
}): void;
|
|
54
|
+
appendBufferRange(channelData: Float32Array[], options?: {
|
|
55
|
+
totalLength?: number | null;
|
|
56
|
+
streamEnded?: boolean;
|
|
57
|
+
}): void;
|
|
58
|
+
finalizeBuffer(totalLength?: number): void;
|
|
59
|
+
start(when?: number, offset?: number, duration?: number): void;
|
|
60
|
+
stop(when?: number, initialDelay?: number): void;
|
|
61
|
+
pause(when?: number): void;
|
|
62
|
+
resume(when?: number): void;
|
|
63
|
+
get loop(): boolean;
|
|
64
|
+
set loop(value: boolean);
|
|
65
|
+
get loopStart(): number;
|
|
66
|
+
set loopStart(value: number);
|
|
67
|
+
get loopEnd(): number;
|
|
68
|
+
set loopEnd(value: number);
|
|
69
|
+
get duration(): number;
|
|
70
|
+
set duration(value: number);
|
|
71
|
+
get offset(): number;
|
|
72
|
+
set offset(value: number);
|
|
73
|
+
get playhead(): number;
|
|
74
|
+
set playhead(value: number);
|
|
75
|
+
get playbackRate(): AudioParam;
|
|
76
|
+
get detune(): AudioParam;
|
|
77
|
+
get highpass(): AudioParam;
|
|
78
|
+
get lowpass(): AudioParam;
|
|
79
|
+
get gain(): AudioParam;
|
|
80
|
+
get pan(): AudioParam;
|
|
81
|
+
get fadeIn(): number;
|
|
82
|
+
set fadeIn(value: number);
|
|
83
|
+
get fadeOut(): number;
|
|
84
|
+
set fadeOut(value: number);
|
|
85
|
+
get loopCrossfade(): number;
|
|
86
|
+
set loopCrossfade(value: number);
|
|
87
|
+
dispose(): void;
|
|
88
|
+
}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import { audioBufferFromFloat32Array } from "./utils.js";
|
|
2
|
+
export class ClipNode extends AudioWorkletNode {
|
|
3
|
+
onscheduled;
|
|
4
|
+
onstarted;
|
|
5
|
+
onpaused;
|
|
6
|
+
onresumed;
|
|
7
|
+
onended;
|
|
8
|
+
onlooped;
|
|
9
|
+
onstopped;
|
|
10
|
+
onframe;
|
|
11
|
+
ondisposed;
|
|
12
|
+
onstatechange;
|
|
13
|
+
_buffer;
|
|
14
|
+
_loopStart = 0;
|
|
15
|
+
_loopEnd = 0;
|
|
16
|
+
_loop = false;
|
|
17
|
+
_offset = 0;
|
|
18
|
+
_playhead = 0;
|
|
19
|
+
_fadeIn = 0;
|
|
20
|
+
_fadeOut = 0;
|
|
21
|
+
_loopCrossfade = 0;
|
|
22
|
+
_duration = -1;
|
|
23
|
+
_previousState = "initial";
|
|
24
|
+
_bufferWriteCursor = 0;
|
|
25
|
+
_hasStreamingPort = false;
|
|
26
|
+
timesLooped = 0;
|
|
27
|
+
state = "initial";
|
|
28
|
+
cpu = 0;
|
|
29
|
+
constructor(context, options = {}) {
|
|
30
|
+
super(context, "ClipProcessor", {
|
|
31
|
+
numberOfInputs: options.numberOfInputs ?? 0,
|
|
32
|
+
outputChannelCount: options.outputChannelCount ?? [2],
|
|
33
|
+
processorOptions: options.processorOptions,
|
|
34
|
+
channelCount: options.channelCount,
|
|
35
|
+
channelCountMode: options.channelCountMode,
|
|
36
|
+
channelInterpretation: options.channelInterpretation,
|
|
37
|
+
numberOfOutputs: options.numberOfOutputs,
|
|
38
|
+
parameterData: options.parameterData,
|
|
39
|
+
});
|
|
40
|
+
this._buffer = audioBufferFromFloat32Array(this.context, options.processorOptions?.buffer);
|
|
41
|
+
this.port.onmessage = this.handleMessage;
|
|
42
|
+
}
|
|
43
|
+
handleMessage = (message) => {
|
|
44
|
+
const { type, data } = message.data;
|
|
45
|
+
switch (type) {
|
|
46
|
+
case "frame": {
|
|
47
|
+
const [_ct, _cf, ph, tt] = data;
|
|
48
|
+
this._playhead = ph;
|
|
49
|
+
this.cpu = tt;
|
|
50
|
+
this.onframe?.(data);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
case "scheduled":
|
|
54
|
+
this.setState("scheduled");
|
|
55
|
+
this.onscheduled?.();
|
|
56
|
+
break;
|
|
57
|
+
case "started":
|
|
58
|
+
this.setState("started");
|
|
59
|
+
this.onstarted?.();
|
|
60
|
+
break;
|
|
61
|
+
case "stopped":
|
|
62
|
+
this.setState("stopped");
|
|
63
|
+
this.onstopped?.();
|
|
64
|
+
break;
|
|
65
|
+
case "paused":
|
|
66
|
+
this.setState("paused");
|
|
67
|
+
this.onpaused?.();
|
|
68
|
+
break;
|
|
69
|
+
case "resume":
|
|
70
|
+
this.setState("resumed");
|
|
71
|
+
this.onresumed?.();
|
|
72
|
+
break;
|
|
73
|
+
case "ended":
|
|
74
|
+
this.setState("ended");
|
|
75
|
+
this.onended?.();
|
|
76
|
+
break;
|
|
77
|
+
case "looped":
|
|
78
|
+
this.timesLooped++;
|
|
79
|
+
this.onlooped?.();
|
|
80
|
+
break;
|
|
81
|
+
case "disposed":
|
|
82
|
+
this.setState("disposed");
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
setState(newState) {
|
|
87
|
+
this._previousState = this.state;
|
|
88
|
+
this.state = newState;
|
|
89
|
+
if (this.state !== this._previousState) {
|
|
90
|
+
this.onstatechange?.(this.state);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
toggleGain(value = true) {
|
|
94
|
+
this.port.postMessage({ type: "toggleGain", data: value });
|
|
95
|
+
}
|
|
96
|
+
togglePlaybackRate(value = true) {
|
|
97
|
+
this.port.postMessage({ type: "togglePlaybackRate", data: value });
|
|
98
|
+
}
|
|
99
|
+
toggleDetune(value = true) {
|
|
100
|
+
this.port.postMessage({ type: "toggleDetune", data: value });
|
|
101
|
+
}
|
|
102
|
+
togglePan(value = true) {
|
|
103
|
+
this.port.postMessage({ type: "togglePan", data: value });
|
|
104
|
+
}
|
|
105
|
+
toggleHighpass(value = true) {
|
|
106
|
+
this.port.postMessage({ type: "toggleHighpass", data: value });
|
|
107
|
+
}
|
|
108
|
+
toggleLowpass(value = true) {
|
|
109
|
+
this.port.postMessage({ type: "toggleLowpass", data: value });
|
|
110
|
+
}
|
|
111
|
+
toggleFadeIn(value = true) {
|
|
112
|
+
this.port.postMessage({ type: "toggleFadeIn", data: value });
|
|
113
|
+
}
|
|
114
|
+
toggleFadeOut(value = true) {
|
|
115
|
+
this.port.postMessage({ type: "toggleFadeOut", data: value });
|
|
116
|
+
}
|
|
117
|
+
toggleLoopCrossfade(value = true) {
|
|
118
|
+
this.port.postMessage({ type: "toggleLoopCrossfade", data: value });
|
|
119
|
+
}
|
|
120
|
+
toggleLoopStart(value = true) {
|
|
121
|
+
this.port.postMessage({ type: "toggleLoopStart", data: value });
|
|
122
|
+
}
|
|
123
|
+
toggleLoopEnd(value = true) {
|
|
124
|
+
this.port.postMessage({ type: "toggleLoopEnd", data: value });
|
|
125
|
+
}
|
|
126
|
+
logState() {
|
|
127
|
+
this.port.postMessage({ type: "logState" });
|
|
128
|
+
}
|
|
129
|
+
get buffer() {
|
|
130
|
+
return this._buffer;
|
|
131
|
+
}
|
|
132
|
+
set buffer(ab) {
|
|
133
|
+
this._buffer = ab;
|
|
134
|
+
this._bufferWriteCursor = ab.length;
|
|
135
|
+
if (this._loopStart >= ab.duration) {
|
|
136
|
+
this._loopStart = 0;
|
|
137
|
+
}
|
|
138
|
+
if (this._loopEnd <= this._loopStart || this._loopEnd > ab.duration) {
|
|
139
|
+
this._loopEnd = ab.duration;
|
|
140
|
+
}
|
|
141
|
+
const data = ab.numberOfChannels === 1
|
|
142
|
+
? [ab.getChannelData(0)]
|
|
143
|
+
: [ab.getChannelData(0), ab.getChannelData(1)];
|
|
144
|
+
this.port.postMessage({ type: "buffer", data });
|
|
145
|
+
this.port.postMessage({ type: "loopStart", data: this._loopStart });
|
|
146
|
+
this.port.postMessage({ type: "loopEnd", data: this._loopEnd });
|
|
147
|
+
}
|
|
148
|
+
transferPort(port) {
|
|
149
|
+
this._hasStreamingPort = true;
|
|
150
|
+
this.port.postMessage({ type: "transferPort", data: port }, [port]);
|
|
151
|
+
}
|
|
152
|
+
initializeBuffer(totalLength, channels, options = {}) {
|
|
153
|
+
this._buffer = this.context.createBuffer(channels, totalLength, this.context.sampleRate);
|
|
154
|
+
this._bufferWriteCursor = 0;
|
|
155
|
+
const duration = totalLength / this.context.sampleRate;
|
|
156
|
+
if (this._loopStart >= duration) {
|
|
157
|
+
this._loopStart = 0;
|
|
158
|
+
}
|
|
159
|
+
if (this._loopEnd <= this._loopStart || this._loopEnd > duration) {
|
|
160
|
+
this._loopEnd = duration;
|
|
161
|
+
}
|
|
162
|
+
this.port.postMessage({
|
|
163
|
+
type: "bufferInit",
|
|
164
|
+
data: {
|
|
165
|
+
channels,
|
|
166
|
+
totalLength,
|
|
167
|
+
streaming: options.streaming ?? true,
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
this.port.postMessage({ type: "loopStart", data: this._loopStart });
|
|
171
|
+
this.port.postMessage({ type: "loopEnd", data: this._loopEnd });
|
|
172
|
+
}
|
|
173
|
+
replaceBufferRange(startSample, channelData, options = {}) {
|
|
174
|
+
this.port.postMessage({
|
|
175
|
+
type: "bufferRange",
|
|
176
|
+
data: {
|
|
177
|
+
startSample,
|
|
178
|
+
channelData,
|
|
179
|
+
totalLength: options.totalLength,
|
|
180
|
+
streamEnded: options.streamEnded,
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
this._bufferWriteCursor = Math.max(this._bufferWriteCursor, startSample + (channelData[0]?.length ?? 0));
|
|
184
|
+
}
|
|
185
|
+
appendBufferRange(channelData, options = {}) {
|
|
186
|
+
this.replaceBufferRange(this._bufferWriteCursor, channelData, options);
|
|
187
|
+
}
|
|
188
|
+
finalizeBuffer(totalLength) {
|
|
189
|
+
this.port.postMessage({ type: "bufferEnd", data: { totalLength } });
|
|
190
|
+
}
|
|
191
|
+
start(when, offset, duration) {
|
|
192
|
+
if (!this._buffer && !this._hasStreamingPort) {
|
|
193
|
+
console.error("Buffer not set.");
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
this.port.postMessage({ type: "start", data: { when, offset, duration } });
|
|
197
|
+
}
|
|
198
|
+
stop(when = this.context.currentTime, initialDelay = 0) {
|
|
199
|
+
this.port.postMessage({
|
|
200
|
+
type: "stop",
|
|
201
|
+
data: when + initialDelay + this._fadeOut + 0.2,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
pause(when = this.context.currentTime) {
|
|
205
|
+
this.port.postMessage({ type: "pause", data: when });
|
|
206
|
+
}
|
|
207
|
+
resume(when = this.context.currentTime) {
|
|
208
|
+
this.port.postMessage({ type: "resume", data: when });
|
|
209
|
+
}
|
|
210
|
+
get loop() {
|
|
211
|
+
return this._loop;
|
|
212
|
+
}
|
|
213
|
+
set loop(value) {
|
|
214
|
+
if (this._loop !== value) {
|
|
215
|
+
this._loop = value;
|
|
216
|
+
this.port.postMessage({ type: "loop", data: value });
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
get loopStart() {
|
|
220
|
+
return this._loopStart;
|
|
221
|
+
}
|
|
222
|
+
set loopStart(value) {
|
|
223
|
+
if (value !== this._loopStart) {
|
|
224
|
+
this._loopStart = value;
|
|
225
|
+
this.port.postMessage({ type: "loopStart", data: value });
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
get loopEnd() {
|
|
229
|
+
return this._loopEnd;
|
|
230
|
+
}
|
|
231
|
+
set loopEnd(value) {
|
|
232
|
+
if (value !== this._loopEnd) {
|
|
233
|
+
this._loopEnd = value;
|
|
234
|
+
this.port.postMessage({ type: "loopEnd", data: value });
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
get duration() {
|
|
238
|
+
return this._duration ?? this._buffer?.duration ?? -1;
|
|
239
|
+
}
|
|
240
|
+
set duration(value) {
|
|
241
|
+
this._duration = value;
|
|
242
|
+
}
|
|
243
|
+
get offset() {
|
|
244
|
+
return this._offset;
|
|
245
|
+
}
|
|
246
|
+
set offset(value) {
|
|
247
|
+
this._offset = value;
|
|
248
|
+
}
|
|
249
|
+
get playhead() {
|
|
250
|
+
return this._playhead;
|
|
251
|
+
}
|
|
252
|
+
set playhead(value) {
|
|
253
|
+
this.port.postMessage({ type: "playhead", data: value });
|
|
254
|
+
}
|
|
255
|
+
get playbackRate() {
|
|
256
|
+
// biome-ignore lint/style/noNonNullAssertion: it is definitely set in the processor
|
|
257
|
+
return this.parameters.get("playbackRate");
|
|
258
|
+
}
|
|
259
|
+
get detune() {
|
|
260
|
+
// biome-ignore lint/style/noNonNullAssertion: it is definitely set in the processor
|
|
261
|
+
return this.parameters.get("detune");
|
|
262
|
+
}
|
|
263
|
+
get highpass() {
|
|
264
|
+
// biome-ignore lint/style/noNonNullAssertion: it is definitely set in the processor
|
|
265
|
+
return this.parameters.get("highpass");
|
|
266
|
+
}
|
|
267
|
+
get lowpass() {
|
|
268
|
+
// biome-ignore lint/style/noNonNullAssertion: it is definitely set in the processor
|
|
269
|
+
return this.parameters.get("lowpass");
|
|
270
|
+
}
|
|
271
|
+
get gain() {
|
|
272
|
+
// biome-ignore lint/style/noNonNullAssertion: it is definitely set in the processor
|
|
273
|
+
return this.parameters.get("gain");
|
|
274
|
+
}
|
|
275
|
+
get pan() {
|
|
276
|
+
// biome-ignore lint/style/noNonNullAssertion: it is definitely set in the processor
|
|
277
|
+
return this.parameters.get("pan");
|
|
278
|
+
}
|
|
279
|
+
get fadeIn() {
|
|
280
|
+
return this._fadeIn;
|
|
281
|
+
}
|
|
282
|
+
set fadeIn(value) {
|
|
283
|
+
this._fadeIn = value;
|
|
284
|
+
this.port.postMessage({ type: "fadeIn", data: value });
|
|
285
|
+
}
|
|
286
|
+
get fadeOut() {
|
|
287
|
+
return this._fadeOut;
|
|
288
|
+
}
|
|
289
|
+
set fadeOut(value) {
|
|
290
|
+
this._fadeOut = value;
|
|
291
|
+
this.port.postMessage({ type: "fadeOut", data: value });
|
|
292
|
+
}
|
|
293
|
+
get loopCrossfade() {
|
|
294
|
+
return this._loopCrossfade;
|
|
295
|
+
}
|
|
296
|
+
set loopCrossfade(value) {
|
|
297
|
+
this._loopCrossfade = value;
|
|
298
|
+
this.port.postMessage({ type: "loopCrossfade", data: value });
|
|
299
|
+
}
|
|
300
|
+
dispose() {
|
|
301
|
+
this.port.postMessage({ type: "dispose" });
|
|
302
|
+
this.port.close();
|
|
303
|
+
this.ondisposed?.();
|
|
304
|
+
this._buffer = undefined;
|
|
305
|
+
this.onended = undefined;
|
|
306
|
+
this.onframe = undefined;
|
|
307
|
+
this.onlooped = undefined;
|
|
308
|
+
this.onpaused = undefined;
|
|
309
|
+
this.onresumed = undefined;
|
|
310
|
+
this.onstarted = undefined;
|
|
311
|
+
this.onstopped = undefined;
|
|
312
|
+
this.onscheduled = undefined;
|
|
313
|
+
this.onstatechange = undefined;
|
|
314
|
+
this.ondisposed = undefined;
|
|
315
|
+
this.state = "disposed";
|
|
316
|
+
}
|
|
317
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const processorCode = "var z={Initial:0,Started:1,Stopped:2,Paused:3,Scheduled:4,Ended:5,Disposed:6};var y=128;function o(V=[]){let F=V[0]?.length??0,A=F>0;return{totalLength:A?F:null,committedLength:A?F:0,streamEnded:A,streaming:!1,writtenSpans:A?[{startSample:0,endSample:F}]:[],pendingWrites:[],lowWaterThreshold:y*4,lowWaterNotified:!1,lastUnderrunSample:null}}function z0(V){return V[0]?.length??0}function a(V){return V.streamBuffer.totalLength??z0(V.buffer)}function P0(V,F){return Array.from({length:V},()=>new Float32Array(F))}function w0(V,F){let A=[...V,F].sort((J,k)=>J.startSample-k.startSample),T=[];for(let J of A){let k=T[T.length-1];if(!k||J.startSample>k.endSample){T.push({...J});continue}k.endSample=Math.max(k.endSample,J.endSample)}return T}function R0(V){let F=0;for(let A of V){if(A.startSample>F)break;F=Math.max(F,A.endSample)}return F}function B0(V,F){if(V.committedLength-Math.floor(F)>=V.lowWaterThreshold)V.lowWaterNotified=!1}function y0(V,F,A){let T=z0(V.buffer),J=V.buffer.length;if(T>=A&&J>=F)return;let k=Math.max(T,A),Q=Math.max(J,F),U=P0(Q,k);for(let X=0;X<J;X++)U[X].set(V.buffer[X].subarray(0,T));if(V.buffer=U,V.streamBuffer.totalLength==null||V.streamBuffer.totalLength<k)V.streamBuffer.totalLength=k}function _0(V,F){let A=Math.max(Math.floor(F.startSample),0),T=F.channelData[0]?.length??0,J=F.totalLength??null,k=Math.max(A+T,J??0);y0(V,Math.max(F.channelData.length,V.buffer.length,1),k);for(let Q=0;Q<F.channelData.length;Q++)V.buffer[Q].set(F.channelData[Q],A);if(J!=null)V.streamBuffer.totalLength=J;if(T>0)V.streamBuffer.writtenSpans=w0(V.streamBuffer.writtenSpans,{startSample:A,endSample:A+T}),V.streamBuffer.committedLength=R0(V.streamBuffer.writtenSpans);if(F.streamEnded===!0)V.streamBuffer.streamEnded=!0;B0(V.streamBuffer,V.playhead)}function b0(V){if(V.streamBuffer.pendingWrites.length===0)return;for(let F of V.streamBuffer.pendingWrites)_0(V,F);V.streamBuffer.pendingWrites=[]}function L0(V,F){V.buffer=F,V.streamBuffer=o(F)}function K0(V={},F){let{buffer:A=[],streamBuffer:T=o(A),duration:J=-1,loop:k=!1,loopStart:Q=0,loopEnd:U=(A[0]?.length??0)/F,loopCrossfade:X=0,playhead:$=0,offset:G=0,startWhen:Y=0,stopWhen:P=0,pauseWhen:K=0,resumeWhen:O=0,playedSamples:v=0,state:W=z.Initial,timesLooped:w=0,fadeInDuration:j=0,fadeOutDuration:Z=0,enableFadeIn:C=j>0,enableFadeOut:D=Z>0,enableLoopStart:R=!0,enableLoopEnd:l=!0,enableLoopCrossfade:b=X>0,enableHighpass:h=!0,enableLowpass:d=!0,enableGain:r=!0,enablePan:p=!0,enableDetune:e=!0,enablePlaybackRate:V0=!0}=V;return{buffer:A,streamBuffer:T,loop:k,loopStart:Q,loopEnd:U,loopCrossfade:X,duration:J,playhead:$,offset:G,startWhen:Y,stopWhen:P,pauseWhen:K,resumeWhen:O,playedSamples:v,state:W,timesLooped:w,fadeInDuration:j,fadeOutDuration:Z,enableFadeIn:C,enableFadeOut:D,enableLoopStart:R,enableLoopEnd:l,enableHighpass:h,enableLowpass:d,enableGain:r,enablePan:p,enableDetune:e,enablePlaybackRate:V0,enableLoopCrossfade:b}}function x0(V,F){return a(V)/F}function i(V,F){let A=x0(V,F);if(A<=0){V.loopStart=0,V.loopEnd=0;return}if(!Number.isFinite(V.loopStart)||V.loopStart<0)V.loopStart=0;if(V.loopStart>=A)V.loopStart=0;if(!Number.isFinite(V.loopEnd)||V.loopEnd<=V.loopStart||V.loopEnd>A)V.loopEnd=A}function A0(V,F,A){if(F===void 0)return V.offset=0,0;if(F<0)return A0(V,a(V)+F,A);if(F>(a(V)||1)-1)return A0(V,a(V)%F,A);let T=Math.floor(F*A);return V.offset=T,T}function m0(V){let{playhead:F,bufferLength:A,loop:T,loopStartSamples:J,loopEndSamples:k}=V,Q=128;if(!T&&F+128>A)Q=Math.max(A-F,0);let U=Array(Q);if(!T){for(let Y=0,P=F;Y<Q;Y++,P++)U[Y]=P;let G=F+Q;return{playhead:G,indexes:U,looped:!1,ended:G>=A}}let X=F,$=!1;for(let G=0;G<Q;G++,X++){if(X>=k)X=J+(X-k),$=!0;U[G]=X}return{indexes:U,looped:$,ended:!1,playhead:X}}function S0(V){let{playhead:F,bufferLength:A,loop:T,loopStartSamples:J,loopEndSamples:k,playbackRates:Q}=V,U=128;if(!T&&F+128>A)U=Math.max(A-F,0);let X=Array(U),$=F,G=!1;if(T){for(let Y=0;Y<U;Y++){X[Y]=Math.min(Math.max(Math.floor($),0),A-1);let P=Q[Y]??Q[0]??1;if($+=P,P>=0&&($>k||$>A))$=J,G=!0;else if(P<0&&($<J||$<0))$=k,G=!0}return{playhead:$,indexes:X,looped:G,ended:!1}}for(let Y=0;Y<U;Y++)X[Y]=Math.min(Math.max(Math.floor($),0),A-1),$+=Q[Y]??Q[0]??1;return{playhead:$,indexes:X,looped:!1,ended:$>=A||$<0}}function g0(V,F,A){let T=Math.min(V.length,F.length);for(let J=0;J<A.length;J++)for(let k=0;k<T;k++)V[k][J]=F[k][A[J]];for(let J=T;J<V.length;J++)for(let k=0;k<V[J].length;k++)V[J][k]=0;for(let J=A.length;J<V[0].length;J++)for(let k=0;k<T;k++)V[k][J]=0}function c(V){for(let F=0;F<V.length;F++)for(let A=0;A<V[F].length;A++)V[F][A]=0}function c0(V){if(V.length>=2)for(let F=0;F<V[0].length;F++)V[1][F]=V[0][F];else{let F=new Float32Array(V[0].length);for(let A=0;A<V[0].length;A++)F[A]=V[0][A];V.push(F)}}function F0(V,F){for(let A=F.length;A<V.length;A++)F[A]=new Float32Array(V[A].length);for(let A=0;A<V.length;A++)for(let T=0;T<V[A].length;T++)F[A][T]=V[A][T]}function h0(V){let F=0;for(let A=0;A<V.length;A++)for(let T=0;T<V[A].length;T++)if(Number.isNaN(V[A][T]))F++,V[A][T]=0;return F}function k0(){return[{x_1:0,x_2:0,y_1:0,y_2:0},{x_1:0,x_2:0,y_1:0,y_2:0}]}function d0(V,F){if(F.length===1){let T=F[0];if(T===1)return;for(let J of V)for(let k=0;k<J.length;k++)J[k]*=T;return}let A=F[0];for(let T of V)for(let J=0;J<T.length;J++)A=F[J]??A,T[J]*=A}function l0(V,F){let A=F[0];for(let T=0;T<V[0].length;T++){A=F[T]??A;let J=A<=0?1:1-A,k=A>=0?1:1+A;V[0][T]*=J,V[1][T]*=k}}function u0(V,F,A,T){for(let J=0;J<V.length;J++){let k=V[J],{x_1:Q,x_2:U,y_1:X,y_2:$}=T[J]??{x_1:0,x_2:0,y_1:0,y_2:0};if(F.length===1){let G=F[0];if(G>=20000)return;let Y=2*Math.PI*G/A,P=Math.sin(Y)/2,K=(1-Math.cos(Y))/2,O=1-Math.cos(Y),v=(1-Math.cos(Y))/2,W=1+P,w=-2*Math.cos(Y),j=1-P,Z=K/W,C=O/W,D=v/W,R=w/W,l=j/W;for(let b=0;b<k.length;b++){let h=k[b],d=Z*h+C*Q+D*U-R*X-l*$;U=Q,Q=h,$=X,X=d,k[b]=d}}else{let G=F[0];for(let Y=0;Y<k.length;Y++){let P=F[Y]??G,K=2*Math.PI*P/A,O=Math.sin(K)/2,v=(1-Math.cos(K))/2,W=1-Math.cos(K),w=(1-Math.cos(K))/2,j=1+O,Z=-2*Math.cos(K),C=1-O,D=k[Y],R=v/j*D+W/j*Q+w/j*U-Z/j*X-C/j*$;U=Q,Q=D,$=X,X=R,k[Y]=R}}T[J]={x_1:Q,x_2:U,y_1:X,y_2:$}}}function f0(V,F,A,T){for(let J=0;J<V.length;J++){let k=V[J],{x_1:Q,x_2:U,y_1:X,y_2:$}=T[J]??{x_1:0,x_2:0,y_1:0,y_2:0};if(F.length===1){let G=F[0];if(G<=20)return;let Y=2*Math.PI*G/A,P=Math.sin(Y)/2,K=(1+Math.cos(Y))/2,O=-(1+Math.cos(Y)),v=(1+Math.cos(Y))/2,W=1+P,w=-2*Math.cos(Y),j=1-P;for(let Z=0;Z<k.length;Z++){let C=k[Z],D=K/W*C+O/W*Q+v/W*U-w/W*X-j/W*$;U=Q,Q=C,$=X,X=D,k[Z]=D}}else{let G=F[0];for(let Y=0;Y<k.length;Y++){let P=F[Y]??G,K=2*Math.PI*P/A,O=Math.sin(K)/2,v=(1+Math.cos(K))/2,W=-(1+Math.cos(K)),w=(1+Math.cos(K))/2,j=1+O,Z=-2*Math.cos(K),C=1-O,D=k[Y],R=v/j*D+W/j*Q+w/j*U-Z/j*X-C/j*$;U=Q,Q=D,$=X,X=R,k[Y]=R}}T[J]={x_1:Q,x_2:U,y_1:X,y_2:$}}}function T0(V,F,A,T){let{type:J,data:k}=F;switch(J){case\"buffer\":return L0(V,k),i(V,T),[];case\"bufferInit\":{let Q=k;return V.buffer=P0(Q.channels,Q.totalLength),V.streamBuffer={...o(),totalLength:Q.totalLength,streamEnded:!1,streaming:Q.streaming??!0},i(V,T),[]}case\"bufferRange\":return V.streamBuffer.pendingWrites.push(k),[];case\"bufferEnd\":{let Q=k;if(Q?.totalLength!=null)V.streamBuffer.totalLength=Q.totalLength;return V.streamBuffer.streamEnded=!0,[]}case\"bufferReset\":return V.buffer=[],V.streamBuffer=o(),i(V,T),[];case\"start\":V.timesLooped=0;{let Q=k;if(V.duration=Q?.duration??-1,V.duration===-1)V.duration=V.loop?Number.MAX_SAFE_INTEGER:(V.buffer[0]?.length??0)/T;A0(V,Q?.offset,T),i(V,T),V.playhead=V.offset,V.startWhen=Q?.when??A,V.stopWhen=V.startWhen+V.duration,V.playedSamples=0,V.state=z.Scheduled}return[{type:\"scheduled\"}];case\"stop\":if(V.state===z.Ended||V.state===z.Initial)return[];return V.stopWhen=k??V.stopWhen,V.state=z.Stopped,[{type:\"stopped\"}];case\"pause\":return V.state=z.Paused,V.pauseWhen=k??A,[{type:\"paused\"}];case\"resume\":return V.state=z.Started,V.startWhen=k??A,[{type:\"resume\"}];case\"dispose\":return V.state=z.Disposed,V.buffer=[],V.streamBuffer=o(),[{type:\"disposed\"}];case\"loop\":{let Q=k,U=V.state;if(Q&&(U===z.Scheduled||U===z.Started))V.stopWhen=Number.MAX_SAFE_INTEGER,V.duration=Number.MAX_SAFE_INTEGER;if(V.loop=Q,Q)i(V,T);return[]}case\"loopStart\":return V.loopStart=k,[];case\"loopEnd\":return V.loopEnd=k,[];case\"loopCrossfade\":return V.loopCrossfade=k,V.enableLoopCrossfade=V.loopCrossfade>0,[];case\"playhead\":return V.playhead=Math.floor(k),[];case\"fadeIn\":return V.fadeInDuration=k,V.enableFadeIn=V.fadeInDuration>0,[];case\"fadeOut\":return V.fadeOutDuration=k,V.enableFadeOut=V.fadeOutDuration>0,[];case\"toggleGain\":return V.enableGain=k??!V.enableGain,[];case\"togglePan\":return V.enablePan=k??!V.enablePan,[];case\"toggleLowpass\":return V.enableLowpass=k??!V.enableLowpass,[];case\"toggleHighpass\":return V.enableHighpass=k??!V.enableHighpass,[];case\"toggleDetune\":return V.enableDetune=k??!V.enableDetune,[];case\"togglePlaybackRate\":return V.enablePlaybackRate=k??!V.enablePlaybackRate,[];case\"toggleFadeIn\":return V.enableFadeIn=k??!V.enableFadeIn,[];case\"toggleFadeOut\":return V.enableFadeOut=k??!V.enableFadeOut,[];case\"toggleLoopStart\":return V.enableLoopStart=k??!V.enableLoopStart,[];case\"toggleLoopEnd\":return V.enableLoopEnd=k??!V.enableLoopEnd,[];case\"toggleLoopCrossfade\":return V.enableLoopCrossfade=k??!V.enableLoopCrossfade,[];case\"logState\":return[]}return[]}function W0(V,F,A,T,J){let k=[],Q=V.state;if(Q===z.Disposed)return{keepAlive:!1,messages:k};if(b0(V),Q===z.Initial)return{keepAlive:!0,messages:k};if(Q===z.Ended)return c(F[0]),{keepAlive:!0,messages:k};if(Q===z.Scheduled)if(T.currentTime>=V.startWhen)Q=V.state=z.Started,k.push({type:\"started\"});else return c(F[0]),{keepAlive:!0,messages:k};else if(Q===z.Paused){if(T.currentTime>V.pauseWhen)return c(F[0]),{keepAlive:!0,messages:k}}if(T.currentTime>V.stopWhen)return c(F[0]),V.state=z.Ended,k.push({type:\"ended\"}),V.playedSamples=0,{keepAlive:!0,messages:k};let U=F[0],X=a(V);if(X===0)return c(U),{keepAlive:!0,messages:k};let{playbackRate:$,detune:G,lowpass:Y,highpass:P,gain:K,pan:O}=A,{buffer:v,loopStart:W,loopEnd:w,loopCrossfade:j,stopWhen:Z,playedSamples:C,enableLowpass:D,enableHighpass:R,enableGain:l,enablePan:b,enableDetune:h,enableFadeOut:d,enableFadeIn:r,enableLoopStart:p,enableLoopEnd:e,enableLoopCrossfade:V0,playhead:E,fadeInDuration:J0,fadeOutDuration:Q0}=V,U0=V.streamBuffer.streaming&&V.streamBuffer.committedLength<X,s=V.loop,L=U0&&s?Math.max(V.streamBuffer.committedLength,0):X,Z0=y*2;if(U0&&s&&L<Z0){c(U);for(let M=1;M<F.length;M++)F0(U,F[M]);return{keepAlive:!0,messages:k}}let u=Math.min(v.length,U.length),N0=V.duration*T.sampleRate,v0=Math.floor(T.sampleRate*j),D0=Math.max(L-y,0),x=p?Math.min(Math.floor(W*T.sampleRate),D0):0,m=e?Math.min(Math.floor(w*T.sampleRate),L):L,O0=m-x,X0=h&&G.length>0&&G[0]!==0,f=$;if(X0){let M=Math.max($.length,G.length,y);f=new Float32Array(M);for(let q=0;q<M;q++){let I=$[q]??$[$.length-1],H=G[q]??G[G.length-1];f[q]=I*2**(H/1200)}}let Y0=V.enablePlaybackRate||X0,C0=Y0&&f.length>0&&f.every((M)=>M===0);if(V.streamBuffer.streaming&&!V.streamBuffer.streamEnded&&!V.streamBuffer.lowWaterNotified&&V.streamBuffer.committedLength-Math.floor(E)<V.streamBuffer.lowWaterThreshold)k.push({type:\"bufferLowWater\",data:{playhead:Math.floor(E),committedLength:V.streamBuffer.committedLength}}),V.streamBuffer.lowWaterNotified=!0;if(C0){c(U);for(let M=1;M<F.length;M++)F0(U,F[M]);return{keepAlive:!0,messages:k}}let $0={bufferLength:L,loop:s,playhead:V.playhead,loopStartSamples:x,loopEndSamples:m,durationSamples:N0,playbackRates:f},{indexes:t,ended:M0,looped:G0,playhead:H0}=Y0?S0($0):m0($0),n=t.find((M)=>M>=V.streamBuffer.committedLength&&M<X);if(n!==void 0&&!V.streamBuffer.streamEnded&&V.streamBuffer.lastUnderrunSample!==n)k.push({type:\"bufferUnderrun\",data:{playhead:Math.floor(E),committedLength:V.streamBuffer.committedLength,requestedSample:n}}),V.streamBuffer.lastUnderrunSample=n;else if(n===void 0)V.streamBuffer.lastUnderrunSample=null;g0(U,v,t);let S=Math.min(Math.floor(j*T.sampleRate),O0),E0=s&&E>x&&E<m,I0=V0&&v0>0&&L>y;if(E0&&I0){{let M=x+S;if(S>0&&E>x&&E<M){let q=E-x,I=Math.min(Math.floor(M-E),y);for(let H=0;H<I;H++){let B=(q+H)/S,g=Math.cos(Math.PI*B/2),N=Math.floor(m-S+q+H);if(N>=0&&N<L)for(let _=0;_<u;_++)U[_][H]+=v[_][N]*g}}}{let M=m-S;if(S>0&&E>M&&E<m){let q=E-M,I=Math.min(Math.floor(m-E),y);for(let H=0;H<I;H++){let B=(q+H)/S,g=Math.sin(Math.PI*B/2),N=Math.floor(x+q+H);if(N>=0&&N<L)for(let _=0;_<u;_++)U[_][H]+=v[_][N]*g}}}}if(r&&J0>0){let M=Math.floor(J0*T.sampleRate),q=M-C;if(q>0){let I=Math.min(q,y);for(let H=0;H<I;H++){let B=(C+H)/M,g=B*B*B;for(let N=0;N<u;N++)U[N][H]*=g}}}if(d&&Q0>0){let M=Math.floor(Q0*T.sampleRate),q=Math.floor(T.sampleRate*(Z-T.currentTime));if(q<M+y)for(let I=0;I<y;I++){let H=q-I;if(H>=M)continue;let B=H<=0?0:H/M,g=B*B*B;for(let N=0;N<u;N++)U[N][I]*=g}}if(D)u0(U,Y,T.sampleRate,J.lowpass);if(R)f0(U,P,T.sampleRate,J.highpass);if(l)d0(U,K);if(u===1)c0(U);if(b)l0(U,O);if(G0)V.timesLooped++,k.push({type:\"looped\",data:V.timesLooped});if(M0)V.state=z.Ended,k.push({type:\"ended\"});V.playedSamples+=t.length,V.playhead=H0;let j0=h0(U);if(j0>0)return console.log({numNans:j0,indexes:t,playhead:H0,ended:M0,looped:G0,sourceLength:X}),{keepAlive:!0,messages:k};for(let M=1;M<F.length;M++)F0(U,F[M]);return{keepAlive:!0,messages:k}}class q0 extends AudioWorkletProcessor{static get parameterDescriptors(){return[{name:\"playbackRate\",automationRate:\"a-rate\",defaultValue:1},{name:\"detune\",automationRate:\"a-rate\",defaultValue:0},{name:\"gain\",automationRate:\"a-rate\",defaultValue:1,minValue:0},{name:\"pan\",automationRate:\"a-rate\",defaultValue:0},{name:\"highpass\",automationRate:\"a-rate\",defaultValue:20,minValue:20,maxValue:20000},{name:\"lowpass\",automationRate:\"a-rate\",defaultValue:20000,minValue:20,maxValue:20000}]}properties;filterState={lowpass:k0(),highpass:k0()};lastFrameTime=0;constructor(V){super(V);this.properties=K0(V?.processorOptions,sampleRate),this.port.onmessage=(F)=>{if(F.data.type===\"transferPort\"){let T=F.data.data;T.onmessage=(J)=>{let k=T0(this.properties,J.data,currentTime,sampleRate);for(let Q of k)this.port.postMessage(Q)};return}let A=T0(this.properties,F.data,currentTime,sampleRate);for(let T of A)this.port.postMessage(T);if(this.properties.state===z.Disposed)this.port.close()}}process(V,F,A){try{let T=W0(this.properties,F,A,{currentTime,currentFrame,sampleRate},this.filterState);for(let k of T.messages)this.port.postMessage(k);let J=currentTime-this.lastFrameTime;return this.lastFrameTime=currentTime,this.port.postMessage({type:\"frame\",data:[currentTime,currentFrame,Math.floor(this.properties.playhead),J*1000]}),T.keepAlive}catch(T){return this.port.postMessage({type:\"processorError\",data:{error:String(T),state:this.properties.state,bufferChannels:this.properties.buffer?.length,bufferLength:this.properties.buffer?.[0]?.length,paramKeys:Object.keys(A),hasPlaybackRate:!!A.playbackRate,hasDetune:!!A.detune,hasGain:!!A.gain,hasPan:!!A.pan,outputChannels:F[0]?.length}}),!0}}}registerProcessor(\"ClipProcessor\",q0);\n\n//# debugId=CA160104FA867FAC64756E2164756E21\n//# sourceMappingURL=processor.js.map\n";
|
package/examples/playground/node_modules/@jadujoel/web-audio-clip-node/dist/audio/processor-code.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// AUTO-GENERATED — do not edit. Run 'bun run build:lib' to regenerate.
|
|
2
|
+
export const processorCode = "var z={Initial:0,Started:1,Stopped:2,Paused:3,Scheduled:4,Ended:5,Disposed:6};var y=128;function o(V=[]){let F=V[0]?.length??0,A=F>0;return{totalLength:A?F:null,committedLength:A?F:0,streamEnded:A,streaming:!1,writtenSpans:A?[{startSample:0,endSample:F}]:[],pendingWrites:[],lowWaterThreshold:y*4,lowWaterNotified:!1,lastUnderrunSample:null}}function z0(V){return V[0]?.length??0}function a(V){return V.streamBuffer.totalLength??z0(V.buffer)}function P0(V,F){return Array.from({length:V},()=>new Float32Array(F))}function w0(V,F){let A=[...V,F].sort((J,k)=>J.startSample-k.startSample),T=[];for(let J of A){let k=T[T.length-1];if(!k||J.startSample>k.endSample){T.push({...J});continue}k.endSample=Math.max(k.endSample,J.endSample)}return T}function R0(V){let F=0;for(let A of V){if(A.startSample>F)break;F=Math.max(F,A.endSample)}return F}function B0(V,F){if(V.committedLength-Math.floor(F)>=V.lowWaterThreshold)V.lowWaterNotified=!1}function y0(V,F,A){let T=z0(V.buffer),J=V.buffer.length;if(T>=A&&J>=F)return;let k=Math.max(T,A),Q=Math.max(J,F),U=P0(Q,k);for(let X=0;X<J;X++)U[X].set(V.buffer[X].subarray(0,T));if(V.buffer=U,V.streamBuffer.totalLength==null||V.streamBuffer.totalLength<k)V.streamBuffer.totalLength=k}function _0(V,F){let A=Math.max(Math.floor(F.startSample),0),T=F.channelData[0]?.length??0,J=F.totalLength??null,k=Math.max(A+T,J??0);y0(V,Math.max(F.channelData.length,V.buffer.length,1),k);for(let Q=0;Q<F.channelData.length;Q++)V.buffer[Q].set(F.channelData[Q],A);if(J!=null)V.streamBuffer.totalLength=J;if(T>0)V.streamBuffer.writtenSpans=w0(V.streamBuffer.writtenSpans,{startSample:A,endSample:A+T}),V.streamBuffer.committedLength=R0(V.streamBuffer.writtenSpans);if(F.streamEnded===!0)V.streamBuffer.streamEnded=!0;B0(V.streamBuffer,V.playhead)}function b0(V){if(V.streamBuffer.pendingWrites.length===0)return;for(let F of V.streamBuffer.pendingWrites)_0(V,F);V.streamBuffer.pendingWrites=[]}function L0(V,F){V.buffer=F,V.streamBuffer=o(F)}function K0(V={},F){let{buffer:A=[],streamBuffer:T=o(A),duration:J=-1,loop:k=!1,loopStart:Q=0,loopEnd:U=(A[0]?.length??0)/F,loopCrossfade:X=0,playhead:$=0,offset:G=0,startWhen:Y=0,stopWhen:P=0,pauseWhen:K=0,resumeWhen:O=0,playedSamples:v=0,state:W=z.Initial,timesLooped:w=0,fadeInDuration:j=0,fadeOutDuration:Z=0,enableFadeIn:C=j>0,enableFadeOut:D=Z>0,enableLoopStart:R=!0,enableLoopEnd:l=!0,enableLoopCrossfade:b=X>0,enableHighpass:h=!0,enableLowpass:d=!0,enableGain:r=!0,enablePan:p=!0,enableDetune:e=!0,enablePlaybackRate:V0=!0}=V;return{buffer:A,streamBuffer:T,loop:k,loopStart:Q,loopEnd:U,loopCrossfade:X,duration:J,playhead:$,offset:G,startWhen:Y,stopWhen:P,pauseWhen:K,resumeWhen:O,playedSamples:v,state:W,timesLooped:w,fadeInDuration:j,fadeOutDuration:Z,enableFadeIn:C,enableFadeOut:D,enableLoopStart:R,enableLoopEnd:l,enableHighpass:h,enableLowpass:d,enableGain:r,enablePan:p,enableDetune:e,enablePlaybackRate:V0,enableLoopCrossfade:b}}function x0(V,F){return a(V)/F}function i(V,F){let A=x0(V,F);if(A<=0){V.loopStart=0,V.loopEnd=0;return}if(!Number.isFinite(V.loopStart)||V.loopStart<0)V.loopStart=0;if(V.loopStart>=A)V.loopStart=0;if(!Number.isFinite(V.loopEnd)||V.loopEnd<=V.loopStart||V.loopEnd>A)V.loopEnd=A}function A0(V,F,A){if(F===void 0)return V.offset=0,0;if(F<0)return A0(V,a(V)+F,A);if(F>(a(V)||1)-1)return A0(V,a(V)%F,A);let T=Math.floor(F*A);return V.offset=T,T}function m0(V){let{playhead:F,bufferLength:A,loop:T,loopStartSamples:J,loopEndSamples:k}=V,Q=128;if(!T&&F+128>A)Q=Math.max(A-F,0);let U=Array(Q);if(!T){for(let Y=0,P=F;Y<Q;Y++,P++)U[Y]=P;let G=F+Q;return{playhead:G,indexes:U,looped:!1,ended:G>=A}}let X=F,$=!1;for(let G=0;G<Q;G++,X++){if(X>=k)X=J+(X-k),$=!0;U[G]=X}return{indexes:U,looped:$,ended:!1,playhead:X}}function S0(V){let{playhead:F,bufferLength:A,loop:T,loopStartSamples:J,loopEndSamples:k,playbackRates:Q}=V,U=128;if(!T&&F+128>A)U=Math.max(A-F,0);let X=Array(U),$=F,G=!1;if(T){for(let Y=0;Y<U;Y++){X[Y]=Math.min(Math.max(Math.floor($),0),A-1);let P=Q[Y]??Q[0]??1;if($+=P,P>=0&&($>k||$>A))$=J,G=!0;else if(P<0&&($<J||$<0))$=k,G=!0}return{playhead:$,indexes:X,looped:G,ended:!1}}for(let Y=0;Y<U;Y++)X[Y]=Math.min(Math.max(Math.floor($),0),A-1),$+=Q[Y]??Q[0]??1;return{playhead:$,indexes:X,looped:!1,ended:$>=A||$<0}}function g0(V,F,A){let T=Math.min(V.length,F.length);for(let J=0;J<A.length;J++)for(let k=0;k<T;k++)V[k][J]=F[k][A[J]];for(let J=T;J<V.length;J++)for(let k=0;k<V[J].length;k++)V[J][k]=0;for(let J=A.length;J<V[0].length;J++)for(let k=0;k<T;k++)V[k][J]=0}function c(V){for(let F=0;F<V.length;F++)for(let A=0;A<V[F].length;A++)V[F][A]=0}function c0(V){if(V.length>=2)for(let F=0;F<V[0].length;F++)V[1][F]=V[0][F];else{let F=new Float32Array(V[0].length);for(let A=0;A<V[0].length;A++)F[A]=V[0][A];V.push(F)}}function F0(V,F){for(let A=F.length;A<V.length;A++)F[A]=new Float32Array(V[A].length);for(let A=0;A<V.length;A++)for(let T=0;T<V[A].length;T++)F[A][T]=V[A][T]}function h0(V){let F=0;for(let A=0;A<V.length;A++)for(let T=0;T<V[A].length;T++)if(Number.isNaN(V[A][T]))F++,V[A][T]=0;return F}function k0(){return[{x_1:0,x_2:0,y_1:0,y_2:0},{x_1:0,x_2:0,y_1:0,y_2:0}]}function d0(V,F){if(F.length===1){let T=F[0];if(T===1)return;for(let J of V)for(let k=0;k<J.length;k++)J[k]*=T;return}let A=F[0];for(let T of V)for(let J=0;J<T.length;J++)A=F[J]??A,T[J]*=A}function l0(V,F){let A=F[0];for(let T=0;T<V[0].length;T++){A=F[T]??A;let J=A<=0?1:1-A,k=A>=0?1:1+A;V[0][T]*=J,V[1][T]*=k}}function u0(V,F,A,T){for(let J=0;J<V.length;J++){let k=V[J],{x_1:Q,x_2:U,y_1:X,y_2:$}=T[J]??{x_1:0,x_2:0,y_1:0,y_2:0};if(F.length===1){let G=F[0];if(G>=20000)return;let Y=2*Math.PI*G/A,P=Math.sin(Y)/2,K=(1-Math.cos(Y))/2,O=1-Math.cos(Y),v=(1-Math.cos(Y))/2,W=1+P,w=-2*Math.cos(Y),j=1-P,Z=K/W,C=O/W,D=v/W,R=w/W,l=j/W;for(let b=0;b<k.length;b++){let h=k[b],d=Z*h+C*Q+D*U-R*X-l*$;U=Q,Q=h,$=X,X=d,k[b]=d}}else{let G=F[0];for(let Y=0;Y<k.length;Y++){let P=F[Y]??G,K=2*Math.PI*P/A,O=Math.sin(K)/2,v=(1-Math.cos(K))/2,W=1-Math.cos(K),w=(1-Math.cos(K))/2,j=1+O,Z=-2*Math.cos(K),C=1-O,D=k[Y],R=v/j*D+W/j*Q+w/j*U-Z/j*X-C/j*$;U=Q,Q=D,$=X,X=R,k[Y]=R}}T[J]={x_1:Q,x_2:U,y_1:X,y_2:$}}}function f0(V,F,A,T){for(let J=0;J<V.length;J++){let k=V[J],{x_1:Q,x_2:U,y_1:X,y_2:$}=T[J]??{x_1:0,x_2:0,y_1:0,y_2:0};if(F.length===1){let G=F[0];if(G<=20)return;let Y=2*Math.PI*G/A,P=Math.sin(Y)/2,K=(1+Math.cos(Y))/2,O=-(1+Math.cos(Y)),v=(1+Math.cos(Y))/2,W=1+P,w=-2*Math.cos(Y),j=1-P;for(let Z=0;Z<k.length;Z++){let C=k[Z],D=K/W*C+O/W*Q+v/W*U-w/W*X-j/W*$;U=Q,Q=C,$=X,X=D,k[Z]=D}}else{let G=F[0];for(let Y=0;Y<k.length;Y++){let P=F[Y]??G,K=2*Math.PI*P/A,O=Math.sin(K)/2,v=(1+Math.cos(K))/2,W=-(1+Math.cos(K)),w=(1+Math.cos(K))/2,j=1+O,Z=-2*Math.cos(K),C=1-O,D=k[Y],R=v/j*D+W/j*Q+w/j*U-Z/j*X-C/j*$;U=Q,Q=D,$=X,X=R,k[Y]=R}}T[J]={x_1:Q,x_2:U,y_1:X,y_2:$}}}function T0(V,F,A,T){let{type:J,data:k}=F;switch(J){case\"buffer\":return L0(V,k),i(V,T),[];case\"bufferInit\":{let Q=k;return V.buffer=P0(Q.channels,Q.totalLength),V.streamBuffer={...o(),totalLength:Q.totalLength,streamEnded:!1,streaming:Q.streaming??!0},i(V,T),[]}case\"bufferRange\":return V.streamBuffer.pendingWrites.push(k),[];case\"bufferEnd\":{let Q=k;if(Q?.totalLength!=null)V.streamBuffer.totalLength=Q.totalLength;return V.streamBuffer.streamEnded=!0,[]}case\"bufferReset\":return V.buffer=[],V.streamBuffer=o(),i(V,T),[];case\"start\":V.timesLooped=0;{let Q=k;if(V.duration=Q?.duration??-1,V.duration===-1)V.duration=V.loop?Number.MAX_SAFE_INTEGER:(V.buffer[0]?.length??0)/T;A0(V,Q?.offset,T),i(V,T),V.playhead=V.offset,V.startWhen=Q?.when??A,V.stopWhen=V.startWhen+V.duration,V.playedSamples=0,V.state=z.Scheduled}return[{type:\"scheduled\"}];case\"stop\":if(V.state===z.Ended||V.state===z.Initial)return[];return V.stopWhen=k??V.stopWhen,V.state=z.Stopped,[{type:\"stopped\"}];case\"pause\":return V.state=z.Paused,V.pauseWhen=k??A,[{type:\"paused\"}];case\"resume\":return V.state=z.Started,V.startWhen=k??A,[{type:\"resume\"}];case\"dispose\":return V.state=z.Disposed,V.buffer=[],V.streamBuffer=o(),[{type:\"disposed\"}];case\"loop\":{let Q=k,U=V.state;if(Q&&(U===z.Scheduled||U===z.Started))V.stopWhen=Number.MAX_SAFE_INTEGER,V.duration=Number.MAX_SAFE_INTEGER;if(V.loop=Q,Q)i(V,T);return[]}case\"loopStart\":return V.loopStart=k,[];case\"loopEnd\":return V.loopEnd=k,[];case\"loopCrossfade\":return V.loopCrossfade=k,V.enableLoopCrossfade=V.loopCrossfade>0,[];case\"playhead\":return V.playhead=Math.floor(k),[];case\"fadeIn\":return V.fadeInDuration=k,V.enableFadeIn=V.fadeInDuration>0,[];case\"fadeOut\":return V.fadeOutDuration=k,V.enableFadeOut=V.fadeOutDuration>0,[];case\"toggleGain\":return V.enableGain=k??!V.enableGain,[];case\"togglePan\":return V.enablePan=k??!V.enablePan,[];case\"toggleLowpass\":return V.enableLowpass=k??!V.enableLowpass,[];case\"toggleHighpass\":return V.enableHighpass=k??!V.enableHighpass,[];case\"toggleDetune\":return V.enableDetune=k??!V.enableDetune,[];case\"togglePlaybackRate\":return V.enablePlaybackRate=k??!V.enablePlaybackRate,[];case\"toggleFadeIn\":return V.enableFadeIn=k??!V.enableFadeIn,[];case\"toggleFadeOut\":return V.enableFadeOut=k??!V.enableFadeOut,[];case\"toggleLoopStart\":return V.enableLoopStart=k??!V.enableLoopStart,[];case\"toggleLoopEnd\":return V.enableLoopEnd=k??!V.enableLoopEnd,[];case\"toggleLoopCrossfade\":return V.enableLoopCrossfade=k??!V.enableLoopCrossfade,[];case\"logState\":return[]}return[]}function W0(V,F,A,T,J){let k=[],Q=V.state;if(Q===z.Disposed)return{keepAlive:!1,messages:k};if(b0(V),Q===z.Initial)return{keepAlive:!0,messages:k};if(Q===z.Ended)return c(F[0]),{keepAlive:!0,messages:k};if(Q===z.Scheduled)if(T.currentTime>=V.startWhen)Q=V.state=z.Started,k.push({type:\"started\"});else return c(F[0]),{keepAlive:!0,messages:k};else if(Q===z.Paused){if(T.currentTime>V.pauseWhen)return c(F[0]),{keepAlive:!0,messages:k}}if(T.currentTime>V.stopWhen)return c(F[0]),V.state=z.Ended,k.push({type:\"ended\"}),V.playedSamples=0,{keepAlive:!0,messages:k};let U=F[0],X=a(V);if(X===0)return c(U),{keepAlive:!0,messages:k};let{playbackRate:$,detune:G,lowpass:Y,highpass:P,gain:K,pan:O}=A,{buffer:v,loopStart:W,loopEnd:w,loopCrossfade:j,stopWhen:Z,playedSamples:C,enableLowpass:D,enableHighpass:R,enableGain:l,enablePan:b,enableDetune:h,enableFadeOut:d,enableFadeIn:r,enableLoopStart:p,enableLoopEnd:e,enableLoopCrossfade:V0,playhead:E,fadeInDuration:J0,fadeOutDuration:Q0}=V,U0=V.streamBuffer.streaming&&V.streamBuffer.committedLength<X,s=V.loop,L=U0&&s?Math.max(V.streamBuffer.committedLength,0):X,Z0=y*2;if(U0&&s&&L<Z0){c(U);for(let M=1;M<F.length;M++)F0(U,F[M]);return{keepAlive:!0,messages:k}}let u=Math.min(v.length,U.length),N0=V.duration*T.sampleRate,v0=Math.floor(T.sampleRate*j),D0=Math.max(L-y,0),x=p?Math.min(Math.floor(W*T.sampleRate),D0):0,m=e?Math.min(Math.floor(w*T.sampleRate),L):L,O0=m-x,X0=h&&G.length>0&&G[0]!==0,f=$;if(X0){let M=Math.max($.length,G.length,y);f=new Float32Array(M);for(let q=0;q<M;q++){let I=$[q]??$[$.length-1],H=G[q]??G[G.length-1];f[q]=I*2**(H/1200)}}let Y0=V.enablePlaybackRate||X0,C0=Y0&&f.length>0&&f.every((M)=>M===0);if(V.streamBuffer.streaming&&!V.streamBuffer.streamEnded&&!V.streamBuffer.lowWaterNotified&&V.streamBuffer.committedLength-Math.floor(E)<V.streamBuffer.lowWaterThreshold)k.push({type:\"bufferLowWater\",data:{playhead:Math.floor(E),committedLength:V.streamBuffer.committedLength}}),V.streamBuffer.lowWaterNotified=!0;if(C0){c(U);for(let M=1;M<F.length;M++)F0(U,F[M]);return{keepAlive:!0,messages:k}}let $0={bufferLength:L,loop:s,playhead:V.playhead,loopStartSamples:x,loopEndSamples:m,durationSamples:N0,playbackRates:f},{indexes:t,ended:M0,looped:G0,playhead:H0}=Y0?S0($0):m0($0),n=t.find((M)=>M>=V.streamBuffer.committedLength&&M<X);if(n!==void 0&&!V.streamBuffer.streamEnded&&V.streamBuffer.lastUnderrunSample!==n)k.push({type:\"bufferUnderrun\",data:{playhead:Math.floor(E),committedLength:V.streamBuffer.committedLength,requestedSample:n}}),V.streamBuffer.lastUnderrunSample=n;else if(n===void 0)V.streamBuffer.lastUnderrunSample=null;g0(U,v,t);let S=Math.min(Math.floor(j*T.sampleRate),O0),E0=s&&E>x&&E<m,I0=V0&&v0>0&&L>y;if(E0&&I0){{let M=x+S;if(S>0&&E>x&&E<M){let q=E-x,I=Math.min(Math.floor(M-E),y);for(let H=0;H<I;H++){let B=(q+H)/S,g=Math.cos(Math.PI*B/2),N=Math.floor(m-S+q+H);if(N>=0&&N<L)for(let _=0;_<u;_++)U[_][H]+=v[_][N]*g}}}{let M=m-S;if(S>0&&E>M&&E<m){let q=E-M,I=Math.min(Math.floor(m-E),y);for(let H=0;H<I;H++){let B=(q+H)/S,g=Math.sin(Math.PI*B/2),N=Math.floor(x+q+H);if(N>=0&&N<L)for(let _=0;_<u;_++)U[_][H]+=v[_][N]*g}}}}if(r&&J0>0){let M=Math.floor(J0*T.sampleRate),q=M-C;if(q>0){let I=Math.min(q,y);for(let H=0;H<I;H++){let B=(C+H)/M,g=B*B*B;for(let N=0;N<u;N++)U[N][H]*=g}}}if(d&&Q0>0){let M=Math.floor(Q0*T.sampleRate),q=Math.floor(T.sampleRate*(Z-T.currentTime));if(q<M+y)for(let I=0;I<y;I++){let H=q-I;if(H>=M)continue;let B=H<=0?0:H/M,g=B*B*B;for(let N=0;N<u;N++)U[N][I]*=g}}if(D)u0(U,Y,T.sampleRate,J.lowpass);if(R)f0(U,P,T.sampleRate,J.highpass);if(l)d0(U,K);if(u===1)c0(U);if(b)l0(U,O);if(G0)V.timesLooped++,k.push({type:\"looped\",data:V.timesLooped});if(M0)V.state=z.Ended,k.push({type:\"ended\"});V.playedSamples+=t.length,V.playhead=H0;let j0=h0(U);if(j0>0)return console.log({numNans:j0,indexes:t,playhead:H0,ended:M0,looped:G0,sourceLength:X}),{keepAlive:!0,messages:k};for(let M=1;M<F.length;M++)F0(U,F[M]);return{keepAlive:!0,messages:k}}class q0 extends AudioWorkletProcessor{static get parameterDescriptors(){return[{name:\"playbackRate\",automationRate:\"a-rate\",defaultValue:1},{name:\"detune\",automationRate:\"a-rate\",defaultValue:0},{name:\"gain\",automationRate:\"a-rate\",defaultValue:1,minValue:0},{name:\"pan\",automationRate:\"a-rate\",defaultValue:0},{name:\"highpass\",automationRate:\"a-rate\",defaultValue:20,minValue:20,maxValue:20000},{name:\"lowpass\",automationRate:\"a-rate\",defaultValue:20000,minValue:20,maxValue:20000}]}properties;filterState={lowpass:k0(),highpass:k0()};lastFrameTime=0;constructor(V){super(V);this.properties=K0(V?.processorOptions,sampleRate),this.port.onmessage=(F)=>{if(F.data.type===\"transferPort\"){let T=F.data.data;T.onmessage=(J)=>{let k=T0(this.properties,J.data,currentTime,sampleRate);for(let Q of k)this.port.postMessage(Q)};return}let A=T0(this.properties,F.data,currentTime,sampleRate);for(let T of A)this.port.postMessage(T);if(this.properties.state===z.Disposed)this.port.close()}}process(V,F,A){try{let T=W0(this.properties,F,A,{currentTime,currentFrame,sampleRate},this.filterState);for(let k of T.messages)this.port.postMessage(k);let J=currentTime-this.lastFrameTime;return this.lastFrameTime=currentTime,this.port.postMessage({type:\"frame\",data:[currentTime,currentFrame,Math.floor(this.properties.playhead),J*1000]}),T.keepAlive}catch(T){return this.port.postMessage({type:\"processorError\",data:{error:String(T),state:this.properties.state,bufferChannels:this.properties.buffer?.length,bufferLength:this.properties.buffer?.[0]?.length,paramKeys:Object.keys(A),hasPlaybackRate:!!A.playbackRate,hasDetune:!!A.detune,hasGain:!!A.gain,hasPan:!!A.pan,outputChannels:F[0]?.length}}),!0}}}registerProcessor(\"ClipProcessor\",q0);\n\n//# debugId=CA160104FA867FAC64756E2164756E21\n//# sourceMappingURL=processor.js.map\n";
|