@symbiote-native/audio 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -52
- package/build/angular/index.d.ts +8 -0
- package/build/angular/index.js +8 -3
- package/build/angular/inject-audio-player-status.d.ts +4 -0
- package/build/angular/inject-audio-player-status.js +4 -0
- package/build/angular/inject-audio-player.d.ts +4 -0
- package/build/angular/inject-audio-player.js +8 -0
- package/build/angular/inject-audio-playlist-status.d.ts +3 -0
- package/build/angular/inject-audio-playlist-status.js +4 -0
- package/build/angular/inject-audio-playlist.d.ts +5 -0
- package/build/angular/inject-audio-playlist.js +7 -0
- package/build/angular/inject-audio-recorder-state.d.ts +5 -0
- package/build/angular/inject-audio-recorder-state.js +10 -0
- package/build/angular/inject-audio-recorder.d.ts +5 -0
- package/build/angular/inject-audio-recorder.js +13 -0
- package/build/angular/inject-audio-sample-listener.d.ts +4 -0
- package/build/angular/inject-audio-sample-listener.js +7 -0
- package/build/angular/inject-audio-stream.d.ts +4 -0
- package/build/angular/inject-audio-stream.js +17 -0
- package/build/core/audio-module.js +1 -1
- package/build/core/audio-player-controller.d.ts +7 -0
- package/build/core/audio-player-controller.js +10 -0
- package/build/core/audio-player.js +16 -4
- package/build/core/audio-playlist-controller.d.ts +4 -0
- package/build/core/audio-playlist-controller.js +5 -0
- package/build/core/audio-recorder-controller.d.ts +4 -0
- package/build/core/audio-recorder-controller.js +5 -0
- package/build/core/audio-recorder-polling.d.ts +5 -0
- package/build/core/audio-recorder-polling.js +10 -0
- package/build/core/audio-recorder-state.d.ts +2 -0
- package/build/core/audio-recorder-state.js +18 -0
- package/build/core/audio-recorder-status.d.ts +8 -0
- package/build/core/audio-recorder-status.js +6 -0
- package/build/core/audio-recorder.d.ts +2 -0
- package/build/core/audio-recorder.js +4 -0
- package/build/core/audio-sample-listener.d.ts +11 -0
- package/build/core/audio-sample-listener.js +9 -0
- package/build/core/audio-stream-controller.d.ts +4 -0
- package/build/core/audio-stream-controller.js +5 -0
- package/build/core/audio-stream-hooks.d.ts +8 -0
- package/build/core/audio-stream-hooks.js +13 -0
- package/build/core/audio-stream-lifecycle.d.ts +3 -0
- package/build/core/audio-stream-lifecycle.js +9 -0
- package/build/core/audio-stream-subscription.d.ts +10 -0
- package/build/core/audio-stream-subscription.js +12 -0
- package/build/core/audio-stream.d.ts +9 -10
- package/build/core/audio-stream.js +1 -9
- package/build/core/index.d.ts +14 -2
- package/build/core/index.js +9 -1
- package/build/core/json-keyed-resource-controller.d.ts +2 -0
- package/build/core/json-keyed-resource-controller.js +5 -0
- package/build/core/resolve-source.d.ts +2 -7
- package/build/core/resolve-source.js +69 -15
- package/build/core/subscribe-single-event.d.ts +5 -0
- package/build/core/subscribe-single-event.js +8 -0
- package/build/core/types.d.ts +11 -5
- package/build/react/index.d.ts +9 -0
- package/build/react/index.js +9 -0
- package/build/react/use-audio-player-status.d.ts +4 -0
- package/build/react/use-audio-player-status.js +4 -0
- package/build/react/use-audio-player.d.ts +3 -0
- package/build/react/use-audio-player.js +7 -0
- package/build/react/use-audio-playlist-status.d.ts +3 -0
- package/build/react/use-audio-playlist-status.js +4 -0
- package/build/react/use-audio-playlist.d.ts +4 -0
- package/build/react/use-audio-playlist.js +7 -0
- package/build/react/use-audio-recorder-state.d.ts +4 -0
- package/build/react/use-audio-recorder-state.js +9 -0
- package/build/react/use-audio-recorder.d.ts +4 -0
- package/build/react/use-audio-recorder.js +11 -0
- package/build/react/use-audio-sample-listener.d.ts +4 -0
- package/build/react/use-audio-sample-listener.js +6 -0
- package/build/react/use-audio-stream.d.ts +3 -0
- package/build/react/use-audio-stream.js +14 -0
- package/build/solid/index.d.ts +9 -0
- package/build/solid/index.js +9 -0
- package/build/solid/use-audio-player-status.d.ts +4 -0
- package/build/solid/use-audio-player-status.js +4 -0
- package/build/solid/use-audio-player.d.ts +5 -0
- package/build/solid/use-audio-player.js +7 -0
- package/build/solid/use-audio-playlist-status.d.ts +3 -0
- package/build/solid/use-audio-playlist-status.js +4 -0
- package/build/solid/use-audio-playlist.d.ts +5 -0
- package/build/solid/use-audio-playlist.js +7 -0
- package/build/solid/use-audio-recorder-state.d.ts +5 -0
- package/build/solid/use-audio-recorder-state.js +9 -0
- package/build/solid/use-audio-recorder.d.ts +5 -0
- package/build/solid/use-audio-recorder.js +13 -0
- package/build/solid/use-audio-sample-listener.d.ts +4 -0
- package/build/solid/use-audio-sample-listener.js +8 -0
- package/build/solid/use-audio-stream.d.ts +4 -0
- package/build/solid/use-audio-stream.js +16 -0
- package/build/svelte/index.d.ts +9 -0
- package/build/svelte/index.js +9 -0
- package/build/svelte/use-audio-player-status.svelte.d.ts +6 -0
- package/build/svelte/use-audio-player-status.svelte.js +4 -0
- package/build/svelte/use-audio-player.svelte.d.ts +6 -0
- package/build/svelte/use-audio-player.svelte.js +8 -0
- package/build/svelte/use-audio-playlist-status.svelte.d.ts +5 -0
- package/build/svelte/use-audio-playlist-status.svelte.js +4 -0
- package/build/svelte/use-audio-playlist.svelte.d.ts +6 -0
- package/build/svelte/use-audio-playlist.svelte.js +8 -0
- package/build/svelte/use-audio-recorder-state.svelte.d.ts +7 -0
- package/build/svelte/use-audio-recorder-state.svelte.js +14 -0
- package/build/svelte/use-audio-recorder.svelte.d.ts +6 -0
- package/build/svelte/use-audio-recorder.svelte.js +11 -0
- package/build/svelte/use-audio-sample-listener.svelte.d.ts +4 -0
- package/build/svelte/use-audio-sample-listener.svelte.js +5 -0
- package/build/svelte/use-audio-stream.svelte.d.ts +4 -0
- package/build/svelte/use-audio-stream.svelte.js +29 -0
- package/build/vue/index.d.ts +9 -0
- package/build/vue/index.js +9 -0
- package/build/vue/use-audio-player-status.d.ts +4 -0
- package/build/vue/use-audio-player-status.js +4 -0
- package/build/vue/use-audio-player.d.ts +5 -0
- package/build/vue/use-audio-player.js +8 -0
- package/build/vue/use-audio-playlist-status.d.ts +3 -0
- package/build/vue/use-audio-playlist-status.js +4 -0
- package/build/vue/use-audio-playlist.d.ts +5 -0
- package/build/vue/use-audio-playlist.js +8 -0
- package/build/vue/use-audio-recorder-state.d.ts +5 -0
- package/build/vue/use-audio-recorder-state.js +12 -0
- package/build/vue/use-audio-recorder.d.ts +5 -0
- package/build/vue/use-audio-recorder.js +11 -0
- package/build/vue/use-audio-sample-listener.d.ts +4 -0
- package/build/vue/use-audio-sample-listener.js +11 -0
- package/build/vue/use-audio-stream.d.ts +4 -0
- package/build/vue/use-audio-stream.js +18 -0
- package/build-ngc/angular/index.d.ts +8 -0
- package/build-ngc/angular/index.js +8 -3
- package/build-ngc/angular/index.js.map +1 -1
- package/build-ngc/angular/inject-audio-player-status.d.ts +4 -0
- package/build-ngc/angular/inject-audio-player-status.js +5 -0
- package/build-ngc/angular/inject-audio-player-status.js.map +1 -0
- package/build-ngc/angular/inject-audio-player.d.ts +4 -0
- package/build-ngc/angular/inject-audio-player.js +9 -0
- package/build-ngc/angular/inject-audio-player.js.map +1 -0
- package/build-ngc/angular/inject-audio-playlist-status.d.ts +3 -0
- package/build-ngc/angular/inject-audio-playlist-status.js +5 -0
- package/build-ngc/angular/inject-audio-playlist-status.js.map +1 -0
- package/build-ngc/angular/inject-audio-playlist.d.ts +5 -0
- package/build-ngc/angular/inject-audio-playlist.js +8 -0
- package/build-ngc/angular/inject-audio-playlist.js.map +1 -0
- package/build-ngc/angular/inject-audio-recorder-state.d.ts +5 -0
- package/build-ngc/angular/inject-audio-recorder-state.js +12 -0
- package/build-ngc/angular/inject-audio-recorder-state.js.map +1 -0
- package/build-ngc/angular/inject-audio-recorder.d.ts +5 -0
- package/build-ngc/angular/inject-audio-recorder.js +14 -0
- package/build-ngc/angular/inject-audio-recorder.js.map +1 -0
- package/build-ngc/angular/inject-audio-sample-listener.d.ts +4 -0
- package/build-ngc/angular/inject-audio-sample-listener.js +8 -0
- package/build-ngc/angular/inject-audio-sample-listener.js.map +1 -0
- package/build-ngc/angular/inject-audio-stream.d.ts +4 -0
- package/build-ngc/angular/inject-audio-stream.js +18 -0
- package/build-ngc/angular/inject-audio-stream.js.map +1 -0
- package/build-ngc/core/audio-module.js +1 -1
- package/build-ngc/core/audio-module.js.map +1 -1
- package/build-ngc/core/audio-player-controller.d.ts +7 -0
- package/build-ngc/core/audio-player-controller.js +11 -0
- package/build-ngc/core/audio-player-controller.js.map +1 -0
- package/build-ngc/core/audio-player.js +16 -4
- package/build-ngc/core/audio-player.js.map +1 -1
- package/build-ngc/core/audio-playlist-controller.d.ts +4 -0
- package/build-ngc/core/audio-playlist-controller.js +6 -0
- package/build-ngc/core/audio-playlist-controller.js.map +1 -0
- package/build-ngc/core/audio-recorder-controller.d.ts +4 -0
- package/build-ngc/core/audio-recorder-controller.js +6 -0
- package/build-ngc/core/audio-recorder-controller.js.map +1 -0
- package/build-ngc/core/audio-recorder-polling.d.ts +5 -0
- package/build-ngc/core/audio-recorder-polling.js +11 -0
- package/build-ngc/core/audio-recorder-polling.js.map +1 -0
- package/build-ngc/core/audio-recorder-state.d.ts +2 -0
- package/build-ngc/core/audio-recorder-state.js +19 -0
- package/build-ngc/core/audio-recorder-state.js.map +1 -0
- package/build-ngc/core/audio-recorder-status.d.ts +8 -0
- package/build-ngc/core/audio-recorder-status.js +7 -0
- package/build-ngc/core/audio-recorder-status.js.map +1 -0
- package/build-ngc/core/audio-recorder.d.ts +2 -0
- package/build-ngc/core/audio-recorder.js +4 -0
- package/build-ngc/core/audio-recorder.js.map +1 -1
- package/build-ngc/core/audio-sample-listener.d.ts +11 -0
- package/build-ngc/core/audio-sample-listener.js +10 -0
- package/build-ngc/core/audio-sample-listener.js.map +1 -0
- package/build-ngc/core/audio-stream-controller.d.ts +4 -0
- package/build-ngc/core/audio-stream-controller.js +6 -0
- package/build-ngc/core/audio-stream-controller.js.map +1 -0
- package/build-ngc/core/audio-stream-hooks.d.ts +8 -0
- package/build-ngc/core/audio-stream-hooks.js +14 -0
- package/build-ngc/core/audio-stream-hooks.js.map +1 -0
- package/build-ngc/core/audio-stream-lifecycle.d.ts +3 -0
- package/build-ngc/core/audio-stream-lifecycle.js +10 -0
- package/build-ngc/core/audio-stream-lifecycle.js.map +1 -0
- package/build-ngc/core/audio-stream-subscription.d.ts +10 -0
- package/build-ngc/core/audio-stream-subscription.js +13 -0
- package/build-ngc/core/audio-stream-subscription.js.map +1 -0
- package/build-ngc/core/audio-stream.d.ts +9 -10
- package/build-ngc/core/audio-stream.js +1 -9
- package/build-ngc/core/audio-stream.js.map +1 -1
- package/build-ngc/core/index.d.ts +14 -2
- package/build-ngc/core/index.js +9 -1
- package/build-ngc/core/index.js.map +1 -1
- package/build-ngc/core/json-keyed-resource-controller.d.ts +2 -0
- package/build-ngc/core/json-keyed-resource-controller.js +6 -0
- package/build-ngc/core/json-keyed-resource-controller.js.map +1 -0
- package/build-ngc/core/resolve-source.d.ts +2 -7
- package/build-ngc/core/resolve-source.js +69 -15
- package/build-ngc/core/resolve-source.js.map +1 -1
- package/build-ngc/core/subscribe-single-event.d.ts +5 -0
- package/build-ngc/core/subscribe-single-event.js +9 -0
- package/build-ngc/core/subscribe-single-event.js.map +1 -0
- package/build-ngc/core/types.d.ts +11 -5
- package/build-ngc/core/types.js.map +1 -1
- package/package.json +24 -23
- package/src/angular/index.ts +8 -3
- package/src/angular/inject-audio-player-status.ts +11 -0
- package/src/angular/inject-audio-player.ts +17 -0
- package/src/angular/inject-audio-playlist-status.ts +11 -0
- package/src/angular/inject-audio-playlist.ts +16 -0
- package/src/angular/inject-audio-recorder-state.ts +21 -0
- package/src/angular/inject-audio-recorder.ts +24 -0
- package/src/angular/inject-audio-sample-listener.ts +13 -0
- package/src/angular/inject-audio-stream.ts +41 -0
- package/src/core/audio-module.ts +2 -1
- package/src/core/audio-player-controller.ts +25 -0
- package/src/core/audio-player.ts +17 -4
- package/src/core/audio-playlist-controller.ts +14 -0
- package/src/core/audio-recorder-controller.ts +14 -0
- package/src/core/audio-recorder-polling.ts +20 -0
- package/src/core/audio-recorder-state.ts +26 -0
- package/src/core/audio-recorder-status.ts +22 -0
- package/src/core/audio-recorder.ts +5 -0
- package/src/core/audio-sample-listener.ts +23 -0
- package/src/core/audio-stream-controller.ts +14 -0
- package/src/core/audio-stream-hooks.ts +31 -0
- package/src/core/audio-stream-lifecycle.ts +19 -0
- package/src/core/audio-stream-subscription.ts +28 -0
- package/src/core/audio-stream.ts +11 -10
- package/src/core/index.ts +20 -1
- package/src/core/json-keyed-resource-controller.ts +16 -0
- package/src/core/resolve-source.ts +80 -18
- package/src/core/subscribe-single-event.ts +17 -0
- package/src/core/types.ts +13 -14
- package/src/react/index.ts +9 -0
- package/src/react/use-audio-player-status.ts +11 -0
- package/src/react/use-audio-player.ts +14 -0
- package/src/react/use-audio-playlist-status.ts +11 -0
- package/src/react/use-audio-playlist.ts +13 -0
- package/src/react/use-audio-recorder-state.ts +23 -0
- package/src/react/use-audio-recorder.ts +23 -0
- package/src/react/use-audio-sample-listener.ts +15 -0
- package/src/react/use-audio-stream.ts +39 -0
- package/src/solid/index.ts +9 -0
- package/src/solid/use-audio-player-status.ts +11 -0
- package/src/solid/use-audio-player.ts +15 -0
- package/src/solid/use-audio-playlist-status.ts +11 -0
- package/src/solid/use-audio-playlist.ts +14 -0
- package/src/solid/use-audio-recorder-state.ts +18 -0
- package/src/solid/use-audio-recorder.ts +22 -0
- package/src/solid/use-audio-sample-listener.ts +14 -0
- package/src/solid/use-audio-stream.ts +34 -0
- package/src/svelte/index.ts +9 -0
- package/src/svelte/svelte-ambient.d.ts +3 -0
- package/src/svelte/svelte-compile.test-helper.ts +7 -0
- package/src/svelte/use-audio-player-status.svelte.ts +11 -0
- package/src/svelte/use-audio-player.svelte.ts +20 -0
- package/src/svelte/use-audio-playlist-status.svelte.ts +11 -0
- package/src/svelte/use-audio-playlist.svelte.ts +19 -0
- package/src/svelte/use-audio-recorder-state.svelte.ts +29 -0
- package/src/svelte/use-audio-recorder.svelte.ts +25 -0
- package/src/svelte/use-audio-sample-listener.svelte.ts +11 -0
- package/src/svelte/use-audio-stream.svelte.ts +44 -0
- package/src/vue/index.ts +9 -0
- package/src/vue/use-audio-player-status.ts +11 -0
- package/src/vue/use-audio-player.ts +19 -0
- package/src/vue/use-audio-playlist-status.ts +11 -0
- package/src/vue/use-audio-playlist.ts +15 -0
- package/src/vue/use-audio-recorder-state.ts +21 -0
- package/src/vue/use-audio-recorder.ts +30 -0
- package/src/vue/use-audio-sample-listener.ts +22 -0
- package/src/vue/use-audio-stream.ts +40 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-module.js","sourceRoot":"","sources":["../../src/core/audio-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA2B,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAAe;IACzD,OAAO,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,gGAAgG;AAChG,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAyB;IAEzB,MAAM,SAAS,GACb,QAAQ,CAAC,EAAE,KAAK,KAAK;QACnB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC;YACE,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;YACnD,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;YAC3D,gBAAgB,
|
|
1
|
+
{"version":3,"file":"audio-module.js","sourceRoot":"","sources":["../../src/core/audio-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA2B,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAAe;IACzD,OAAO,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,gGAAgG;AAChG,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAyB;IAEzB,MAAM,SAAS,GACb,QAAQ,CAAC,EAAE,KAAK,KAAK;QACnB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC;YACE,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;YACnD,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;YAC3D,gBAAgB,EACd,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,uBAAuB;YACvD,yBAAyB,EAAE,IAAI,CAAC,yBAAyB;YACzD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;SAC1C,CAAC;IACR,OAAO,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,gCAAgC;IACpD,OAAO,SAAS,CAAC,gCAAgC,EAAE,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mCAAmC;IACvD,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC,mCAAmC,EAAE,CAAC;AACzD,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,4BAA4B;IAChD,OAAO,SAAS,CAAC,4BAA4B,EAAE,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,MAAoB,EACpB,UAA2B,EAAE;IAE7B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,MAAM,EAAE,8BAA8B,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IACxD,OAAO,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,8BAA8B,CAAC,CAAC;AACrE,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAoB;IAEpB,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,OAAO,SAAS,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,uCAAuC;AACvC,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,OAAO,SAAS,CAAC,wBAAwB,EAAE,CAAC;AAC9C,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,OAAO,SAAS,CAAC,mBAAmB,EAAE,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type AudioPlayer } from './audio-player';
|
|
2
|
+
import type { IAudioPlayerOptions, IAudioSource } from './types';
|
|
3
|
+
export declare function createAudioPlayerController(): {
|
|
4
|
+
resolve: (source: IAudioSource, options: IAudioPlayerOptions) => AudioPlayer;
|
|
5
|
+
flushDispose: () => void;
|
|
6
|
+
dispose: () => void;
|
|
7
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createJsonKeyedResourceController } from './json-keyed-resource-controller';
|
|
2
|
+
import { createAudioPlayer } from './audio-player';
|
|
3
|
+
export function createAudioPlayerController() {
|
|
4
|
+
const controller = createJsonKeyedResourceController(key => createAudioPlayer(key.source, key.options), player => player.remove());
|
|
5
|
+
return {
|
|
6
|
+
resolve: (source, options) => controller.resolve({ source, options }),
|
|
7
|
+
flushDispose: controller.flushDispose,
|
|
8
|
+
dispose: controller.dispose,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=audio-player-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-player-controller.js","sourceRoot":"","sources":["../../src/core/audio-player-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAoB,MAAM,gBAAgB,CAAC;AAKrE,MAAM,UAAU,2BAA2B;IAKzC,MAAM,UAAU,GAAG,iCAAiC,CAIlD,GAAG,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EACjD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAC1B,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACrE,YAAY,EAAE,UAAU,CAAC,YAAY;QACrC,OAAO,EAAE,UAAU,CAAC,OAAO;KAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Platform } from 'expo-modules-core';
|
|
2
2
|
import { expoAudio } from './native-module';
|
|
3
|
-
import { resolveSource } from './resolve-source';
|
|
3
|
+
import { resolveSource, resolveSourceWithDownload } from './resolve-source';
|
|
4
4
|
// Upstream shims these two methods onto `AudioModule.AudioPlayer.prototype` at module load
|
|
5
5
|
// (ExpoAudio.ts). We do the equivalent by subclassing instead of monkey-patching the native
|
|
6
6
|
// class's prototype — same shape packages/media-library/src/next/asset.ts uses for its own
|
|
@@ -25,8 +25,20 @@ export class AudioPlayer extends expoAudio.AudioPlayer {
|
|
|
25
25
|
* upstream's `useReleasingSharedObject`.
|
|
26
26
|
*/
|
|
27
27
|
export function createAudioPlayer(source = null, options = {}) {
|
|
28
|
-
const { updateInterval = 500, keepAudioSessionActive = false, preferredForwardBufferDuration = 0, } = options;
|
|
29
|
-
const
|
|
30
|
-
|
|
28
|
+
const { updateInterval = 500, downloadFirst = false, keepAudioSessionActive = false, preferredForwardBufferDuration = 0, } = options;
|
|
29
|
+
const player = new AudioPlayer(downloadFirst ? null : resolveSource(source), updateInterval, keepAudioSessionActive, preferredForwardBufferDuration);
|
|
30
|
+
if (downloadFirst && source) {
|
|
31
|
+
resolveSourceWithDownload(source)
|
|
32
|
+
.then(resolved => {
|
|
33
|
+
if (resolved)
|
|
34
|
+
player.replace(resolved);
|
|
35
|
+
})
|
|
36
|
+
.catch(() => {
|
|
37
|
+
const fallback = resolveSource(source);
|
|
38
|
+
if (fallback)
|
|
39
|
+
player.replace(fallback);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return player;
|
|
31
43
|
}
|
|
32
44
|
//# sourceMappingURL=audio-player.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-player.js","sourceRoot":"","sources":["../../src/core/audio-player.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"audio-player.js","sourceRoot":"","sources":["../../src/core/audio-player.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAO5E,2FAA2F;AAC3F,4FAA4F;AAC5F,2FAA2F;AAC3F,kCAAkC;AAClC,MAAM,OAAO,WAAY,SAAQ,SAAS,CAAC,WAAW;IAC3C,OAAO,CAAC,MAAoB;QACnC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,CAAC;IAEQ,eAAe,CACtB,IAAY,EACZ,sBAAgD;QAEhD,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC9B,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAuB,IAAI,EAC3B,UAA+B,EAAE;IAEjC,MAAM,EACJ,cAAc,GAAG,GAAG,EACpB,aAAa,GAAG,KAAK,EACrB,sBAAsB,GAAG,KAAK,EAC9B,8BAA8B,GAAG,CAAC,GACnC,GAAG,OAAO,CAAC;IACZ,MAAM,MAAM,GAAG,IAAI,WAAW,CAC5B,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,EAC5C,cAAc,EACd,sBAAsB,EACtB,8BAA8B,CAC/B,CAAC;IAEF,IAAI,aAAa,IAAI,MAAM,EAAE,CAAC;QAC5B,yBAAyB,CAAC,MAAM,CAAC;aAC9B,IAAI,CAAC,QAAQ,CAAC,EAAE;YACf,IAAI,QAAQ;gBAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,QAAQ;gBAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IResourceController } from '@symbiote-native/engine';
|
|
2
|
+
import { type AudioPlaylist } from './audio-playlist';
|
|
3
|
+
import type { IAudioPlaylistOptions } from './types';
|
|
4
|
+
export declare function createAudioPlaylistController(): IResourceController<IAudioPlaylistOptions, AudioPlaylist>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createJsonKeyedResourceController } from './json-keyed-resource-controller';
|
|
2
|
+
import { createAudioPlaylist } from './audio-playlist';
|
|
3
|
+
export function createAudioPlaylistController() {
|
|
4
|
+
return createJsonKeyedResourceController(createAudioPlaylist, playlist => playlist.destroy());
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=audio-playlist-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-playlist-controller.js","sourceRoot":"","sources":["../../src/core/audio-playlist-controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAsB,MAAM,kBAAkB,CAAC;AAG3E,MAAM,UAAU,6BAA6B;IAI3C,OAAO,iCAAiC,CAGtC,mBAAmB,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IResourceController } from '@symbiote-native/engine';
|
|
2
|
+
import { type AudioRecorder } from './audio-recorder';
|
|
3
|
+
import type { IRecordingOptions } from './types';
|
|
4
|
+
export declare function createAudioRecorderController(): IResourceController<IRecordingOptions, AudioRecorder>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createJsonKeyedResourceController } from './json-keyed-resource-controller';
|
|
2
|
+
import { createAudioRecorder } from './audio-recorder';
|
|
3
|
+
export function createAudioRecorderController() {
|
|
4
|
+
return createJsonKeyedResourceController(createAudioRecorder, recorder => recorder.release());
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=audio-recorder-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-recorder-controller.js","sourceRoot":"","sources":["../../src/core/audio-recorder-controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAsB,MAAM,kBAAkB,CAAC;AAG3E,MAAM,UAAU,6BAA6B;IAI3C,OAAO,iCAAiC,CACtC,mBAAmB,EACnB,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAC/B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IRecorderState } from './types';
|
|
2
|
+
export type IPollableRecorder = {
|
|
3
|
+
getStatus: () => IRecorderState;
|
|
4
|
+
};
|
|
5
|
+
export declare function pollRecorderState(recorder: IPollableRecorder, interval: number, update: (updater: (prev: IRecorderState) => IRecorderState) => void): () => void;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { shouldUpdateRecorderState } from './audio-recorder-state';
|
|
2
|
+
// Ported from `useAudioRecorderState`'s `setInterval` body; `update` matches every adapter's
|
|
3
|
+
// own state setter (`useState`, Solid's `createSignal`, a plain `(prev) => next` writer, ...)
|
|
4
|
+
export function pollRecorderState(recorder, interval, update) {
|
|
5
|
+
const id = setInterval(() => {
|
|
6
|
+
const next = recorder.getStatus();
|
|
7
|
+
update(prev => (shouldUpdateRecorderState(prev, next) ? next : prev));
|
|
8
|
+
}, interval);
|
|
9
|
+
return () => clearInterval(id);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=audio-recorder-polling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-recorder-polling.js","sourceRoot":"","sources":["../../src/core/audio-recorder-polling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAOnE,6FAA6F;AAC7F,8FAA8F;AAC9F,MAAM,UAAU,iBAAiB,CAC/B,QAA2B,EAC3B,QAAgB,EAChB,MAAmE;IAEnE,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC,EAAE,QAAQ,CAAC,CAAC;IACb,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const METERING_EPSILON = 0.1;
|
|
2
|
+
const DURATION_EPSILON_MS = 50;
|
|
3
|
+
function meteringChanged(prev, next) {
|
|
4
|
+
if ((prev.metering === undefined) !== (next.metering === undefined))
|
|
5
|
+
return true;
|
|
6
|
+
if (prev.metering === undefined || next.metering === undefined)
|
|
7
|
+
return false;
|
|
8
|
+
return Math.abs(prev.metering - next.metering) > METERING_EPSILON;
|
|
9
|
+
}
|
|
10
|
+
// Ported from `useAudioRecorderState`'s poll-diff `setState` body
|
|
11
|
+
export function shouldUpdateRecorderState(prev, next) {
|
|
12
|
+
return (prev.canRecord !== next.canRecord ||
|
|
13
|
+
prev.isRecording !== next.isRecording ||
|
|
14
|
+
prev.mediaServicesDidReset !== next.mediaServicesDidReset ||
|
|
15
|
+
prev.url !== next.url ||
|
|
16
|
+
Math.abs(prev.durationMillis - next.durationMillis) > DURATION_EPSILON_MS ||
|
|
17
|
+
meteringChanged(prev, next));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=audio-recorder-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-recorder-state.js","sourceRoot":"","sources":["../../src/core/audio-recorder-state.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,SAAS,eAAe,CAAC,IAAoB,EAAE,IAAoB;IACjE,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7E,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,gBAAgB,CAAC;AACpE,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,yBAAyB,CACvC,IAAoB,EACpB,IAAoB;IAEpB,OAAO,CACL,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS;QACjC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;QACrC,IAAI,CAAC,qBAAqB,KAAK,IAAI,CAAC,qBAAqB;QACzD,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG;QACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,mBAAmB;QACzE,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { RECORDING_STATUS_UPDATE } from './types';
|
|
2
|
+
import type { IRecordingStatus } from './types';
|
|
3
|
+
export type IStatusRecorder = {
|
|
4
|
+
addListener: (event: typeof RECORDING_STATUS_UPDATE, listener: (status: IRecordingStatus) => void) => {
|
|
5
|
+
remove: () => void;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
export declare function subscribeRecordingStatus(recorder: IStatusRecorder, statusListener: ((status: IRecordingStatus) => void) | undefined): () => void;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { RECORDING_STATUS_UPDATE } from './types';
|
|
2
|
+
import { subscribeSingleEvent } from './subscribe-single-event';
|
|
3
|
+
// Ported from `useAudioRecorder`'s status-listener `useEffect` body
|
|
4
|
+
export function subscribeRecordingStatus(recorder, statusListener) {
|
|
5
|
+
return subscribeSingleEvent(recorder, RECORDING_STATUS_UPDATE, statusListener);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=audio-recorder-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-recorder-status.js","sourceRoot":"","sources":["../../src/core/audio-recorder-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAUhE,oEAAoE;AACpE,MAAM,UAAU,wBAAwB,CACtC,QAAyB,EACzB,cAAgE;IAEhE,OAAO,oBAAoB,CACzB,QAAQ,EACR,uBAAuB,EACvB,cAAc,CACf,CAAC;AACJ,CAAC"}
|
|
@@ -3,3 +3,5 @@ import type { IRecordingOptions } from './types';
|
|
|
3
3
|
export declare class AudioRecorder extends expoAudio.AudioRecorder {
|
|
4
4
|
prepareToRecordAsync(options?: Partial<IRecordingOptions>): Promise<void>;
|
|
5
5
|
}
|
|
6
|
+
/** Does not release automatically, same lifecycle note as `createAudioPlayer` */
|
|
7
|
+
export declare function createAudioRecorder(options: IRecordingOptions): AudioRecorder;
|
|
@@ -38,4 +38,8 @@ export class AudioRecorder extends expoAudio.AudioRecorder {
|
|
|
38
38
|
return super.prepareToRecordAsync(processedOptions);
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
+
/** Does not release automatically, same lifecycle note as `createAudioPlayer` */
|
|
42
|
+
export function createAudioRecorder(options) {
|
|
43
|
+
return new AudioRecorder(createRecordingOptions(options));
|
|
44
|
+
}
|
|
41
45
|
//# sourceMappingURL=audio-recorder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-recorder.js","sourceRoot":"","sources":["../../src/core/audio-recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,OAA0B;IACxD,MAAM,aAAa,GAAG;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,KAAK;KACtD,CAAC;IAEF,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,OAAO,EAAE,GAAG,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5E,CAAC;IACD,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO;YACL,GAAG,aAAa;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,GAAG,OAAO,CAAC,OAAO;SACnB,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC9C,CAAC;AAED,6FAA6F;AAC7F,+FAA+F;AAC/F,+FAA+F;AAC/F,+EAA+E;AAC/E,MAAM,OAAO,aAAc,SAAQ,SAAS,CAAC,aAAa;IAC/C,oBAAoB,CAC3B,OAAoC;QAEpC,MAAM,gBAAgB,GAAG,OAAO;YAC9B,CAAC,CAAC,sBAAsB,CAAC,OAA4B,CAAC;YACtD,CAAC,CAAC,SAAS,CAAC;QACd,OAAO,KAAK,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"audio-recorder.js","sourceRoot":"","sources":["../../src/core/audio-recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,OAA0B;IACxD,MAAM,aAAa,GAAG;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,KAAK;KACtD,CAAC;IAEF,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,OAAO,EAAE,GAAG,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5E,CAAC;IACD,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO;YACL,GAAG,aAAa;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,GAAG,OAAO,CAAC,OAAO;SACnB,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC9C,CAAC;AAED,6FAA6F;AAC7F,+FAA+F;AAC/F,+FAA+F;AAC/F,+EAA+E;AAC/E,MAAM,OAAO,aAAc,SAAQ,SAAS,CAAC,aAAa;IAC/C,oBAAoB,CAC3B,OAAoC;QAEpC,MAAM,gBAAgB,GAAG,OAAO;YAC9B,CAAC,CAAC,sBAAsB,CAAC,OAA4B,CAAC;YACtD,CAAC,CAAC,SAAS,CAAC;QACd,OAAO,KAAK,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC;CACF;AAED,iFAAiF;AACjF,MAAM,UAAU,mBAAmB,CAAC,OAA0B;IAC5D,OAAO,IAAI,aAAa,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AUDIO_SAMPLE_UPDATE } from './types';
|
|
2
|
+
import type { IAudioSample } from './types';
|
|
3
|
+
export type IAudioSamplePlayer = {
|
|
4
|
+
isAudioSamplingSupported: boolean;
|
|
5
|
+
setAudioSamplingEnabled: (enabled: boolean) => void;
|
|
6
|
+
addListener: (event: typeof AUDIO_SAMPLE_UPDATE, listener: (data: IAudioSample) => void) => {
|
|
7
|
+
remove: () => void;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
/** Ported from `expo-audio`'s `useAudioSampleListener` (its `useEffect` body factored out) */
|
|
11
|
+
export declare function subscribeAudioSampleListener(player: IAudioSamplePlayer, listener: (data: IAudioSample) => void): () => void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AUDIO_SAMPLE_UPDATE } from './types';
|
|
2
|
+
/** Ported from `expo-audio`'s `useAudioSampleListener` (its `useEffect` body factored out) */
|
|
3
|
+
export function subscribeAudioSampleListener(player, listener) {
|
|
4
|
+
if (!player.isAudioSamplingSupported)
|
|
5
|
+
return () => { };
|
|
6
|
+
player.setAudioSamplingEnabled(true);
|
|
7
|
+
const subscription = player.addListener(AUDIO_SAMPLE_UPDATE, listener);
|
|
8
|
+
return () => subscription.remove();
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=audio-sample-listener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-sample-listener.js","sourceRoot":"","sources":["../../src/core/audio-sample-listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAY9C,8FAA8F;AAC9F,MAAM,UAAU,4BAA4B,CAC1C,MAA0B,EAC1B,QAAsC;IAEtC,IAAI,CAAC,MAAM,CAAC,wBAAwB;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAEtD,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACvE,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IResourceController } from '@symbiote-native/engine';
|
|
2
|
+
import { type AudioStream } from './audio-stream';
|
|
3
|
+
import type { IAudioStreamOptions } from './types';
|
|
4
|
+
export declare function createAudioStreamController(): IResourceController<IAudioStreamOptions, AudioStream>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createJsonKeyedResourceController } from './json-keyed-resource-controller';
|
|
2
|
+
import { createAudioStream } from './audio-stream';
|
|
3
|
+
export function createAudioStreamController() {
|
|
4
|
+
return createJsonKeyedResourceController(createAudioStream, stream => stream.release());
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=audio-stream-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-stream-controller.js","sourceRoot":"","sources":["../../src/core/audio-stream-controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAoB,MAAM,gBAAgB,CAAC;AAGrE,MAAM,UAAU,2BAA2B;IAIzC,OAAO,iCAAiC,CACtC,iBAAiB,EACjB,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IResourceController } from '@symbiote-native/engine';
|
|
2
|
+
import { AUDIO_STREAM_STATUS } from './types';
|
|
3
|
+
import type { AudioStream } from './audio-stream';
|
|
4
|
+
import type { IAudioStreamOptions, IAudioStreamStatus } from './types';
|
|
5
|
+
export declare function createAudioStreamHooks<TResourceBox, TStatusBox>(createResourceHook: (createController: () => IResourceController<IAudioStreamOptions, AudioStream>) => (getArgs: () => [IAudioStreamOptions]) => TResourceBox, createEventValueHook: (event: typeof AUDIO_STREAM_STATUS, getValue: (source: AudioStream) => IAudioStreamStatus) => (getSource: () => AudioStream) => TStatusBox): {
|
|
6
|
+
useStreamResource: (getArgs: () => [IAudioStreamOptions]) => TResourceBox;
|
|
7
|
+
useStreamStatus: (getSource: () => AudioStream) => TStatusBox;
|
|
8
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createAudioStreamController } from './audio-stream-controller';
|
|
2
|
+
import { AUDIO_STREAM_STATUS } from './types';
|
|
3
|
+
// Binds `createAudioStreamController`/`AUDIO_STREAM_STATUS` behind the getter-based
|
|
4
|
+
// `createResourceHook`/`createEventValueHook` shape Vue/Solid/Angular share (React keeps its own
|
|
5
|
+
// ref-based wiring, same split as `runAudioStreamBufferEffect`)
|
|
6
|
+
export function createAudioStreamHooks(createResourceHook, createEventValueHook) {
|
|
7
|
+
return {
|
|
8
|
+
useStreamResource: createResourceHook(createAudioStreamController),
|
|
9
|
+
useStreamStatus: createEventValueHook(AUDIO_STREAM_STATUS, stream => ({
|
|
10
|
+
isStreaming: stream.isStreaming,
|
|
11
|
+
})),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=audio-stream-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-stream-hooks.js","sourceRoot":"","sources":["../../src/core/audio-stream-hooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAI9C,oFAAoF;AACpF,iGAAiG;AACjG,gEAAgE;AAChE,MAAM,UAAU,sBAAsB,CACpC,kBAK2D,EAC3D,oBAGiD;IAKjD,OAAO;QACL,iBAAiB,EAAE,kBAAkB,CAAC,2BAA2B,CAAC;QAClE,eAAe,EAAE,oBAAoB,CAAC,mBAAmB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACpE,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { IAudioStreamBufferSource } from './audio-stream-subscription';
|
|
2
|
+
import type { IAudioStreamBuffer } from './types';
|
|
3
|
+
export declare function runAudioStreamBufferEffect<TStream extends IAudioStreamBufferSource>(getStream: () => TStream, getOnBuffer: () => ((buffer: IAudioStreamBuffer) => void) | undefined, runEffect: (effect: () => void) => void, registerCleanup: (cleanup: () => void) => void): void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { subscribeAudioStreamBuffer } from './audio-stream-subscription';
|
|
2
|
+
// Shared by adapters whose reactivity auto-tracks reads inside a plain effect (Vue's
|
|
3
|
+
// `watchEffect`, Solid's `createEffect`, Angular's `effect`); React's render model doesn't, so
|
|
4
|
+
// it keeps its own ref-based wiring - same split as `createNetworkRequestObserverLifecycle`
|
|
5
|
+
export function runAudioStreamBufferEffect(getStream, getOnBuffer, runEffect, registerCleanup) {
|
|
6
|
+
runEffect(() => {
|
|
7
|
+
registerCleanup(subscribeAudioStreamBuffer(getStream(), getOnBuffer()));
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=audio-stream-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-stream-lifecycle.js","sourceRoot":"","sources":["../../src/core/audio-stream-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAIzE,qFAAqF;AACrF,+FAA+F;AAC/F,4FAA4F;AAC5F,MAAM,UAAU,0BAA0B,CAGxC,SAAwB,EACxB,WAAqE,EACrE,SAAuC,EACvC,eAA8C;IAE9C,SAAS,CAAC,GAAG,EAAE;QACb,eAAe,CAAC,0BAA0B,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AUDIO_STREAM_BUFFER } from './types';
|
|
2
|
+
import type { IAudioStreamBuffer, IAudioStreamOptions } from './types';
|
|
3
|
+
import type { IUseAudioStreamOptions } from './audio-stream';
|
|
4
|
+
export type IAudioStreamBufferSource = {
|
|
5
|
+
addListener: (event: typeof AUDIO_STREAM_BUFFER, listener: (buffer: IAudioStreamBuffer) => void) => {
|
|
6
|
+
remove: () => void;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
export declare function subscribeAudioStreamBuffer(stream: IAudioStreamBufferSource, onBuffer: ((buffer: IAudioStreamBuffer) => void) | undefined): () => void;
|
|
10
|
+
export declare function toAudioStreamKey(options: IUseAudioStreamOptions): IAudioStreamOptions;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AUDIO_STREAM_BUFFER } from './types';
|
|
2
|
+
import { subscribeSingleEvent } from './subscribe-single-event';
|
|
3
|
+
// Ported from `useAudioStream`'s buffer-listener `useEffect` body
|
|
4
|
+
export function subscribeAudioStreamBuffer(stream, onBuffer) {
|
|
5
|
+
return subscribeSingleEvent(stream, AUDIO_STREAM_BUFFER, onBuffer);
|
|
6
|
+
}
|
|
7
|
+
// Drops `onBuffer` so a callback identity change doesn't recreate the native stream - matches
|
|
8
|
+
// upstream's own `[sampleRate, channels, encoding]` dependency array
|
|
9
|
+
export function toAudioStreamKey(options) {
|
|
10
|
+
const { sampleRate, channels, encoding } = options;
|
|
11
|
+
return { sampleRate, channels, encoding };
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=audio-stream-subscription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-stream-subscription.js","sourceRoot":"","sources":["../../src/core/audio-stream-subscription.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAWhE,kEAAkE;AAClE,MAAM,UAAU,0BAA0B,CACxC,MAAgC,EAChC,QAA4D;IAE5D,OAAO,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC;AACrE,CAAC;AAED,8FAA8F;AAC9F,qEAAqE;AACrE,MAAM,UAAU,gBAAgB,CAC9B,OAA+B;IAE/B,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACnD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import type { IAudioStreamOptions } from './types';
|
|
1
|
+
import type { IAudioStreamBuffer, IAudioStreamOptions } from './types';
|
|
2
2
|
export declare const AudioStream: typeof import("./native-module").NativeAudioStream;
|
|
3
3
|
export type AudioStream = InstanceType<typeof AudioStream>;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
*/
|
|
4
|
+
export type IUseAudioStreamOptions = IAudioStreamOptions & {
|
|
5
|
+
onBuffer?: (buffer: IAudioStreamBuffer) => void;
|
|
6
|
+
};
|
|
7
|
+
export type IAudioStreamResult = {
|
|
8
|
+
stream: AudioStream;
|
|
9
|
+
isStreaming: boolean;
|
|
10
|
+
};
|
|
11
|
+
/** Requires microphone permission - see `requestRecordingPermissionsAsync`. */
|
|
13
12
|
export declare function createAudioStream(options?: IAudioStreamOptions): AudioStream;
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import { expoAudio } from './native-module';
|
|
2
2
|
// Plain re-export — upstream has no prototype shim for `AudioStream` either.
|
|
3
3
|
export const AudioStream = expoAudio.AudioStream;
|
|
4
|
-
/**
|
|
5
|
-
* Creates a native `AudioStream` for real-time PCM microphone capture. Call `.start()` to
|
|
6
|
-
* begin and `.stop()` to end; requires microphone permission — see
|
|
7
|
-
* `requestRecordingPermissionsAsync`. Upstream only exposes this via the `useAudioStream` hook
|
|
8
|
-
* (React-only, see the package README); this factory is the framework-agnostic equivalent — the
|
|
9
|
-
* hook itself just applies these same defaults and wires `addListener` for
|
|
10
|
-
* `AUDIO_STREAM_STATUS`/`AUDIO_STREAM_BUFFER` on top, which each adapter's own lifecycle wrapper
|
|
11
|
-
* is responsible for.
|
|
12
|
-
*/
|
|
4
|
+
/** Requires microphone permission - see `requestRecordingPermissionsAsync`. */
|
|
13
5
|
export function createAudioStream(options = {}) {
|
|
14
6
|
const { sampleRate = 48000, channels = 1, encoding = 'float32' } = options;
|
|
15
7
|
return new AudioStream({ sampleRate, channels, encoding });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-stream.js","sourceRoot":"","sources":["../../src/core/audio-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"audio-stream.js","sourceRoot":"","sources":["../../src/core/audio-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;AAYjD,+EAA+E;AAC/E,MAAM,UAAU,iBAAiB,CAC/B,UAA+B,EAAE;IAEjC,MAAM,EAAE,UAAU,GAAG,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC;IAC3E,OAAO,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
export { AudioPlayer, createAudioPlayer } from './audio-player';
|
|
2
|
-
export { AudioRecorder } from './audio-recorder';
|
|
2
|
+
export { AudioRecorder, createAudioRecorder } from './audio-recorder';
|
|
3
3
|
export { AudioPlaylist, createAudioPlaylist } from './audio-playlist';
|
|
4
4
|
export { AudioStream, createAudioStream } from './audio-stream';
|
|
5
|
+
export type { IUseAudioStreamOptions, IAudioStreamResult, } from './audio-stream';
|
|
6
|
+
export { createAudioStreamController } from './audio-stream-controller';
|
|
7
|
+
export { subscribeAudioStreamBuffer, toAudioStreamKey, } from './audio-stream-subscription';
|
|
8
|
+
export type { IAudioStreamBufferSource } from './audio-stream-subscription';
|
|
9
|
+
export { runAudioStreamBufferEffect } from './audio-stream-lifecycle';
|
|
10
|
+
export { createAudioStreamHooks } from './audio-stream-hooks';
|
|
5
11
|
export { setIsAudioActiveAsync, setAudioModeAsync, requestRecordingPermissionsAsync, requestNotificationPermissionsAsync, getRecordingPermissionsAsync, preload, clearPreloadedSource, clearAllPreloadedSources, getPreloadedSources, } from './audio-module';
|
|
6
12
|
export { resolveSource, resolveSources } from './resolve-source';
|
|
13
|
+
export { subscribeAudioSampleListener } from './audio-sample-listener';
|
|
14
|
+
export type { IAudioSamplePlayer } from './audio-sample-listener';
|
|
15
|
+
export { subscribeRecordingStatus } from './audio-recorder-status';
|
|
16
|
+
export type { IStatusRecorder } from './audio-recorder-status';
|
|
17
|
+
export { shouldUpdateRecorderState } from './audio-recorder-state';
|
|
18
|
+
export { pollRecorderState } from './audio-recorder-polling';
|
|
7
19
|
export { RecordingPresets, IOSOutputFormat, AudioQuality, } from './recording-presets';
|
|
8
20
|
export { PLAYBACK_STATUS_UPDATE, AUDIO_SAMPLE_UPDATE, RECORDING_STATUS_UPDATE, PLAYLIST_STATUS_UPDATE, TRACK_CHANGED, AUDIO_STREAM_BUFFER, AUDIO_STREAM_STATUS, } from './types';
|
|
9
|
-
export type { IAudioSource, IAudioSourceInfo, IAudioPlayerOptions, IPreloadOptions, IRecordingInput, IPitchCorrectionQuality, IAudioStatus, IRecordingStatus, IRecorderState, IAndroidOutputFormat, IAndroidAudioEncoder, IRecordingStartOptions, IRecordingDirectory, IRecordingOptions, IRecordingOptionsWeb, IRecordingOptionsIos, IRecordingOptionsAndroid, IRecordingSource, IAudioMode, IInterruptionMode, IAudioMetadata, IAudioPlaylistLoopMode, IAudioPlaylistOptions, IAudioPlaylistStatus, IAudioLockScreenOptions, IAudioSample, IAudioStreamEncoding, IAudioStreamOptions, IAudioStreamBuffer, IAudioStreamStatus, } from './types';
|
|
21
|
+
export type { IAudioSource, IAudioSourceInfo, IAudioPlayerOptions, IAudioLoadOptions, IPreloadOptions, IRecordingInput, IPitchCorrectionQuality, IAudioStatus, IRecordingStatus, IRecorderState, IAndroidOutputFormat, IAndroidAudioEncoder, IRecordingStartOptions, IRecordingDirectory, IRecordingOptions, IRecordingOptionsWeb, IRecordingOptionsIos, IRecordingOptionsAndroid, IRecordingSource, IAudioMode, IInterruptionMode, IAudioMetadata, IAudioPlaylistLoopMode, IAudioPlaylistOptions, IAudioPlaylistStatus, IAudioLockScreenOptions, IAudioSample, IAudioStreamEncoding, IAudioStreamOptions, IAudioStreamBuffer, IAudioStreamStatus, } from './types';
|
package/build-ngc/core/index.js
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
export { AudioPlayer, createAudioPlayer } from './audio-player';
|
|
2
|
-
export { AudioRecorder } from './audio-recorder';
|
|
2
|
+
export { AudioRecorder, createAudioRecorder } from './audio-recorder';
|
|
3
3
|
export { AudioPlaylist, createAudioPlaylist } from './audio-playlist';
|
|
4
4
|
export { AudioStream, createAudioStream } from './audio-stream';
|
|
5
|
+
export { createAudioStreamController } from './audio-stream-controller';
|
|
6
|
+
export { subscribeAudioStreamBuffer, toAudioStreamKey, } from './audio-stream-subscription';
|
|
7
|
+
export { runAudioStreamBufferEffect } from './audio-stream-lifecycle';
|
|
8
|
+
export { createAudioStreamHooks } from './audio-stream-hooks';
|
|
5
9
|
export { setIsAudioActiveAsync, setAudioModeAsync, requestRecordingPermissionsAsync, requestNotificationPermissionsAsync, getRecordingPermissionsAsync, preload, clearPreloadedSource, clearAllPreloadedSources, getPreloadedSources, } from './audio-module';
|
|
6
10
|
export { resolveSource, resolveSources } from './resolve-source';
|
|
11
|
+
export { subscribeAudioSampleListener } from './audio-sample-listener';
|
|
12
|
+
export { subscribeRecordingStatus } from './audio-recorder-status';
|
|
13
|
+
export { shouldUpdateRecorderState } from './audio-recorder-state';
|
|
14
|
+
export { pollRecorderState } from './audio-recorder-polling';
|
|
7
15
|
export { RecordingPresets, IOSOutputFormat, AudioQuality, } from './recording-presets';
|
|
8
16
|
export { PLAYBACK_STATUS_UPDATE, AUDIO_SAMPLE_UPDATE, RECORDING_STATUS_UPDATE, PLAYLIST_STATUS_UPDATE, TRACK_CHANGED, AUDIO_STREAM_BUFFER, AUDIO_STREAM_STATUS, } from './types';
|
|
9
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAKhE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,gCAAgC,EAChC,mCAAmC,EACnC,4BAA4B,EAC5B,OAAO,EACP,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createResourceController, } from '@symbiote-native/engine';
|
|
2
|
+
// Shared shape behind the player/playlist/recorder controllers, keyed by JSON.stringify
|
|
3
|
+
export function createJsonKeyedResourceController(create, dispose) {
|
|
4
|
+
return createResourceController(create, dispose, (a, b) => JSON.stringify(a) === JSON.stringify(b));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=json-keyed-resource-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-keyed-resource-controller.js","sourceRoot":"","sources":["../../src/core/json-keyed-resource-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,GAEzB,MAAM,yBAAyB,CAAC;AAEjC,wFAAwF;AACxF,MAAM,UAAU,iCAAiC,CAC/C,MAAgC,EAChC,OAAsC;IAEtC,OAAO,wBAAwB,CAC7B,MAAM,EACN,OAAO,EACP,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAClD,CAAC;AACJ,CAAC"}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import type { IAudioSource } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Normalizes a source into the shape the native player accepts. A `number` (a `require()`'d
|
|
4
|
-
* local asset) resolves via `@symbiote-native/engine`'s `resolveAssetSource` seam — RN's own
|
|
5
|
-
* generic asset-registry lookup, wired by `bootstrapHost`. An actual `expo-asset` `Asset`
|
|
6
|
-
* instance is still not ported, see `types.ts`'s header comment on `IAudioSource`. A plain
|
|
7
|
-
* string is treated as a URI, matching upstream.
|
|
8
|
-
*/
|
|
9
2
|
export declare function resolveSource(source?: IAudioSource): IAudioSource | null;
|
|
10
3
|
export declare function resolveSources(sources: IAudioSource[]): NonNullable<IAudioSource>[];
|
|
4
|
+
/** Resolves `source` and, unlike `resolveSource`, downloads it to a local cache file first. */
|
|
5
|
+
export declare function resolveSourceWithDownload(source?: IAudioSource): Promise<IAudioSource | null>;
|
|
@@ -1,27 +1,61 @@
|
|
|
1
|
-
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
function
|
|
5
|
-
|
|
1
|
+
// Ported from expo-audio/src/utils/resolveSource.ts (sdk-57), against @symbiote-native/asset's
|
|
2
|
+
// Asset class instead of importing expo-asset directly (same pattern as packages/font).
|
|
3
|
+
import { Asset } from '@symbiote-native/asset';
|
|
4
|
+
function getAssetFromSource(source) {
|
|
5
|
+
if (!source) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
if (source instanceof Asset) {
|
|
9
|
+
return source;
|
|
10
|
+
}
|
|
11
|
+
if (typeof source === 'number') {
|
|
12
|
+
return Asset.fromModule(source);
|
|
13
|
+
}
|
|
14
|
+
if (typeof source === 'object') {
|
|
15
|
+
if ('assetId' in source && typeof source.assetId === 'number') {
|
|
16
|
+
return Asset.fromModule(source.assetId);
|
|
17
|
+
}
|
|
18
|
+
if ('uri' in source && typeof source.uri === 'string') {
|
|
19
|
+
return Asset.fromURI(source.uri);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (typeof source === 'string') {
|
|
23
|
+
return Asset.fromURI(source);
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
function createSourceFromAsset(asset, extras = {}) {
|
|
28
|
+
const result = {
|
|
29
|
+
uri: asset.localUri ?? asset.uri,
|
|
30
|
+
};
|
|
31
|
+
if (asset.name) {
|
|
32
|
+
result.name = asset.name;
|
|
33
|
+
}
|
|
34
|
+
if (extras.assetId != null) {
|
|
35
|
+
result.assetId = extras.assetId;
|
|
36
|
+
}
|
|
37
|
+
if (extras.headers) {
|
|
38
|
+
result.headers = extras.headers;
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
6
41
|
}
|
|
7
|
-
/**
|
|
8
|
-
* Normalizes a source into the shape the native player accepts. A `number` (a `require()`'d
|
|
9
|
-
* local asset) resolves via `@symbiote-native/engine`'s `resolveAssetSource` seam — RN's own
|
|
10
|
-
* generic asset-registry lookup, wired by `bootstrapHost`. An actual `expo-asset` `Asset`
|
|
11
|
-
* instance is still not ported, see `types.ts`'s header comment on `IAudioSource`. A plain
|
|
12
|
-
* string is treated as a URI, matching upstream.
|
|
13
|
-
*/
|
|
14
42
|
export function resolveSource(source) {
|
|
15
43
|
if (source == null) {
|
|
16
44
|
return null;
|
|
17
45
|
}
|
|
18
|
-
if (
|
|
19
|
-
|
|
20
|
-
return isAudioSourceObject(resolved) ? resolved : null;
|
|
46
|
+
if (source instanceof Asset) {
|
|
47
|
+
return createSourceFromAsset(source);
|
|
21
48
|
}
|
|
22
49
|
if (typeof source === 'string') {
|
|
23
50
|
return { uri: source };
|
|
24
51
|
}
|
|
52
|
+
if (typeof source === 'number') {
|
|
53
|
+
return createSourceFromAsset(Asset.fromModule(source), { assetId: source });
|
|
54
|
+
}
|
|
55
|
+
if ('assetId' in source && typeof source.assetId === 'number') {
|
|
56
|
+
const asset = Asset.fromModule(source.assetId);
|
|
57
|
+
return { ...source, uri: asset.localUri ?? asset.uri };
|
|
58
|
+
}
|
|
25
59
|
return source;
|
|
26
60
|
}
|
|
27
61
|
export function resolveSources(sources) {
|
|
@@ -29,4 +63,24 @@ export function resolveSources(sources) {
|
|
|
29
63
|
.map(source => resolveSource(source))
|
|
30
64
|
.filter((source) => source != null);
|
|
31
65
|
}
|
|
66
|
+
/** Resolves `source` and, unlike `resolveSource`, downloads it to a local cache file first. */
|
|
67
|
+
export async function resolveSourceWithDownload(source) {
|
|
68
|
+
const asset = getAssetFromSource(source);
|
|
69
|
+
const fallback = resolveSource(source);
|
|
70
|
+
if (!asset) {
|
|
71
|
+
return fallback;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
await asset.downloadAsync();
|
|
75
|
+
if (asset.localUri) {
|
|
76
|
+
return fallback && typeof fallback === 'object'
|
|
77
|
+
? { ...fallback, uri: asset.localUri }
|
|
78
|
+
: { uri: asset.localUri };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// Falls through to the un-downloaded source below, matching upstream's own recovery path.
|
|
83
|
+
}
|
|
84
|
+
return fallback;
|
|
85
|
+
}
|
|
32
86
|
//# sourceMappingURL=resolve-source.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-source.js","sourceRoot":"","sources":["../../src/core/resolve-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"resolve-source.js","sourceRoot":"","sources":["../../src/core/resolve-source.ts"],"names":[],"mappings":"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"}
|