@symbiote-native/audio 0.1.2 → 0.1.4
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 +1 -0
- package/build/core/json-keyed-resource-controller.js +1 -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 +1 -0
- package/build-ngc/core/json-keyed-resource-controller.js +2 -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 +1 -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
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createMemo, onCleanup } from 'solid-js';
|
|
2
|
+
import { createResourceHook, createEventValueHook, } from '@symbiote-native/solid';
|
|
3
|
+
import { createAudioStreamHooks } from '../core/audio-stream-hooks.js';
|
|
4
|
+
import { toAudioStreamKey } from '../core/audio-stream-subscription.js';
|
|
5
|
+
import { runAudioStreamBufferEffect } from '../core/audio-stream-lifecycle.js';
|
|
6
|
+
const { useStreamResource, useStreamStatus } = createAudioStreamHooks(createResourceHook, createEventValueHook);
|
|
7
|
+
/** Solid twin of `expo-audio`'s `useAudioStream` */
|
|
8
|
+
export function useAudioStream(getOptions) {
|
|
9
|
+
const stream = useStreamResource(() => [toAudioStreamKey(getOptions())]);
|
|
10
|
+
const status = useStreamStatus(stream);
|
|
11
|
+
runAudioStreamBufferEffect(stream, () => getOptions().onBuffer, fn => fn(), onCleanup);
|
|
12
|
+
return createMemo(() => ({
|
|
13
|
+
stream: stream(),
|
|
14
|
+
isStreaming: status().isStreaming,
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from '../core';
|
|
2
|
+
export { useAudioPlayer } from './use-audio-player.svelte';
|
|
3
|
+
export { useAudioPlayerStatus } from './use-audio-player-status.svelte';
|
|
4
|
+
export { useAudioSampleListener } from './use-audio-sample-listener.svelte';
|
|
5
|
+
export { useAudioPlaylist } from './use-audio-playlist.svelte';
|
|
6
|
+
export { useAudioPlaylistStatus } from './use-audio-playlist-status.svelte';
|
|
7
|
+
export { useAudioRecorder } from './use-audio-recorder.svelte';
|
|
8
|
+
export { useAudioRecorderState } from './use-audio-recorder-state.svelte';
|
|
9
|
+
export { useAudioStream } from './use-audio-stream.svelte';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from '../core/index.js';
|
|
2
|
+
export { useAudioPlayer } from './use-audio-player.svelte';
|
|
3
|
+
export { useAudioPlayerStatus } from './use-audio-player-status.svelte';
|
|
4
|
+
export { useAudioSampleListener } from './use-audio-sample-listener.svelte';
|
|
5
|
+
export { useAudioPlaylist } from './use-audio-playlist.svelte';
|
|
6
|
+
export { useAudioPlaylistStatus } from './use-audio-playlist-status.svelte';
|
|
7
|
+
export { useAudioRecorder } from './use-audio-recorder.svelte';
|
|
8
|
+
export { useAudioRecorderState } from './use-audio-recorder-state.svelte';
|
|
9
|
+
export { useAudioStream } from './use-audio-stream.svelte';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AudioPlayer } from '../core';
|
|
2
|
+
import type { IAudioStatus } from '../core';
|
|
3
|
+
/** Svelte twin of `expo-audio`'s `useAudioPlayerStatus` */
|
|
4
|
+
export declare const useAudioPlayerStatus: (getSource: () => AudioPlayer) => {
|
|
5
|
+
readonly current: IAudioStatus;
|
|
6
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createEventValueHook } from '@symbiote-native/svelte/runes/create-event-value-hook';
|
|
2
|
+
import { PLAYBACK_STATUS_UPDATE } from '../core/types.js';
|
|
3
|
+
/** Svelte twin of `expo-audio`'s `useAudioPlayerStatus` */
|
|
4
|
+
export const useAudioPlayerStatus = createEventValueHook(PLAYBACK_STATUS_UPDATE, player => player.currentStatus);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AudioPlayer } from '../core';
|
|
2
|
+
import type { IAudioPlayerOptions, IAudioSource } from '../core';
|
|
3
|
+
export type IUseAudioPlayerResult = {
|
|
4
|
+
readonly current: AudioPlayer;
|
|
5
|
+
};
|
|
6
|
+
export declare function useAudioPlayer(getSource?: () => IAudioSource, getOptions?: () => IAudioPlayerOptions): IUseAudioPlayerResult;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Svelte twin of `expo-audio`'s `useAudioPlayer`, boxed getter shape matching
|
|
2
|
+
// `use-image-manipulator.svelte.ts` (`components_split_logic_view_lifecycle`)
|
|
3
|
+
import { createResourceHook } from '@symbiote-native/svelte/runes/create-resource-hook';
|
|
4
|
+
import { createAudioPlayerController } from '../core/audio-player-controller.js';
|
|
5
|
+
const usePlayerResource = createResourceHook(createAudioPlayerController);
|
|
6
|
+
export function useAudioPlayer(getSource = () => null, getOptions = () => ({})) {
|
|
7
|
+
return usePlayerResource(() => [getSource(), getOptions()]);
|
|
8
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IAudioPlaylistStatus } from '../core';
|
|
2
|
+
/** Svelte twin of `expo-audio`'s `useAudioPlaylistStatus` */
|
|
3
|
+
export declare const useAudioPlaylistStatus: (getSource: () => import("../core/native-module").NativeAudioPlaylist) => {
|
|
4
|
+
readonly current: IAudioPlaylistStatus;
|
|
5
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createEventValueHook } from '@symbiote-native/svelte/runes/create-event-value-hook';
|
|
2
|
+
import { PLAYLIST_STATUS_UPDATE } from '../core/types.js';
|
|
3
|
+
/** Svelte twin of `expo-audio`'s `useAudioPlaylistStatus` */
|
|
4
|
+
export const useAudioPlaylistStatus = createEventValueHook(PLAYLIST_STATUS_UPDATE, playlist => playlist.currentStatus);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AudioPlaylist } from '../core';
|
|
2
|
+
import type { IAudioPlaylistOptions } from '../core';
|
|
3
|
+
export type IUseAudioPlaylistResult = {
|
|
4
|
+
readonly current: AudioPlaylist;
|
|
5
|
+
};
|
|
6
|
+
export declare function useAudioPlaylist(getOptions?: () => IAudioPlaylistOptions): IUseAudioPlaylistResult;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Svelte twin of `expo-audio`'s `useAudioPlaylist`, boxed getter shape matching
|
|
2
|
+
// `use-audio-player.svelte.ts` (`components_split_logic_view_lifecycle`)
|
|
3
|
+
import { createResourceHook } from '@symbiote-native/svelte/runes/create-resource-hook';
|
|
4
|
+
import { createAudioPlaylistController } from '../core/audio-playlist-controller.js';
|
|
5
|
+
const usePlaylistResource = createResourceHook(createAudioPlaylistController);
|
|
6
|
+
export function useAudioPlaylist(getOptions = () => ({})) {
|
|
7
|
+
return usePlaylistResource(() => [getOptions()]);
|
|
8
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AudioRecorder } from '../core';
|
|
2
|
+
import type { IRecorderState } from '../core';
|
|
3
|
+
export type IUseAudioRecorderStateResult = {
|
|
4
|
+
readonly current: IRecorderState;
|
|
5
|
+
};
|
|
6
|
+
/** Svelte twin of `expo-audio`'s `useAudioRecorderState` */
|
|
7
|
+
export declare function useAudioRecorderState(recorder: AudioRecorder, interval?: number): IUseAudioRecorderStateResult;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { pollRecorderState } from '../core/audio-recorder-polling.js';
|
|
2
|
+
const DEFAULT_POLL_INTERVAL_MS = 500;
|
|
3
|
+
/** Svelte twin of `expo-audio`'s `useAudioRecorderState` */
|
|
4
|
+
export function useAudioRecorderState(recorder, interval = DEFAULT_POLL_INTERVAL_MS) {
|
|
5
|
+
let state = $state(recorder.getStatus());
|
|
6
|
+
$effect(() => pollRecorderState(recorder, interval, updater => {
|
|
7
|
+
state = updater(state);
|
|
8
|
+
}));
|
|
9
|
+
return {
|
|
10
|
+
get current() {
|
|
11
|
+
return state;
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AudioRecorder } from '../core';
|
|
2
|
+
import type { IRecordingOptions, IRecordingStatus } from '../core';
|
|
3
|
+
export type IUseAudioRecorderResult = {
|
|
4
|
+
readonly current: AudioRecorder;
|
|
5
|
+
};
|
|
6
|
+
export declare function useAudioRecorder(getOptions: () => IRecordingOptions, statusListener?: (status: IRecordingStatus) => void): IUseAudioRecorderResult;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Svelte twin of `expo-audio`'s `useAudioRecorder`, boxed getter shape matching
|
|
2
|
+
// `use-audio-player.svelte.ts` (`components_split_logic_view_lifecycle`)
|
|
3
|
+
import { createResourceHook } from '@symbiote-native/svelte/runes/create-resource-hook';
|
|
4
|
+
import { createAudioRecorderController } from '../core/audio-recorder-controller.js';
|
|
5
|
+
import { subscribeRecordingStatus } from '../core/audio-recorder-status.js';
|
|
6
|
+
const useRecorderResource = createResourceHook(createAudioRecorderController);
|
|
7
|
+
export function useAudioRecorder(getOptions, statusListener) {
|
|
8
|
+
const recorder = useRecorderResource(() => [getOptions()]);
|
|
9
|
+
$effect(() => subscribeRecordingStatus(recorder.current, statusListener));
|
|
10
|
+
return recorder;
|
|
11
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IAudioSamplePlayer } from '../core/audio-sample-listener';
|
|
2
|
+
import type { IAudioSample } from '../core/types';
|
|
3
|
+
/** Svelte twin of `expo-audio`'s `useAudioSampleListener` */
|
|
4
|
+
export declare function useAudioSampleListener(player: IAudioSamplePlayer, listener: (data: IAudioSample) => void): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { subscribeAudioSampleListener } from '../core/audio-sample-listener.js';
|
|
2
|
+
/** Svelte twin of `expo-audio`'s `useAudioSampleListener` */
|
|
3
|
+
export function useAudioSampleListener(player, listener) {
|
|
4
|
+
$effect(() => subscribeAudioSampleListener(player, listener));
|
|
5
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// `$effect` is a compiler macro, can't be passed by reference like `watchEffect`/`createEffect`,
|
|
2
|
+
// so it's wrapped instead of handed to `runAudioStreamBufferEffect` directly.
|
|
3
|
+
// Approved cross-framework duplicate vs Solid's use-audio-stream.ts (.claude/reuse.json)
|
|
4
|
+
import { createResourceHook } from '@symbiote-native/svelte/runes/create-resource-hook';
|
|
5
|
+
import { createEventValueHook } from '@symbiote-native/svelte/runes/create-event-value-hook';
|
|
6
|
+
import { createAudioStreamHooks } from '../core/audio-stream-hooks.js';
|
|
7
|
+
import { toAudioStreamKey } from '../core/audio-stream-subscription.js';
|
|
8
|
+
import { runAudioStreamBufferEffect } from '../core/audio-stream-lifecycle.js';
|
|
9
|
+
const { useStreamResource, useStreamStatus } = createAudioStreamHooks(createResourceHook, createEventValueHook);
|
|
10
|
+
export function useAudioStream(getOptions) {
|
|
11
|
+
const stream = useStreamResource(() => [toAudioStreamKey(getOptions())]);
|
|
12
|
+
const status = useStreamStatus(() => stream.current);
|
|
13
|
+
const cleanups = [];
|
|
14
|
+
runAudioStreamBufferEffect(() => stream.current, () => getOptions().onBuffer, effect => {
|
|
15
|
+
$effect(effect);
|
|
16
|
+
}, cleanup => cleanups.push(cleanup));
|
|
17
|
+
$effect(() => () => {
|
|
18
|
+
for (const cleanup of cleanups)
|
|
19
|
+
cleanup();
|
|
20
|
+
});
|
|
21
|
+
return {
|
|
22
|
+
get current() {
|
|
23
|
+
return {
|
|
24
|
+
stream: stream.current,
|
|
25
|
+
isStreaming: status.current.isStreaming,
|
|
26
|
+
};
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from '../core';
|
|
2
|
+
export { useAudioPlayer } from './use-audio-player';
|
|
3
|
+
export { useAudioPlayerStatus } from './use-audio-player-status';
|
|
4
|
+
export { useAudioSampleListener } from './use-audio-sample-listener';
|
|
5
|
+
export { useAudioPlaylist } from './use-audio-playlist';
|
|
6
|
+
export { useAudioPlaylistStatus } from './use-audio-playlist-status';
|
|
7
|
+
export { useAudioRecorder } from './use-audio-recorder';
|
|
8
|
+
export { useAudioRecorderState } from './use-audio-recorder-state';
|
|
9
|
+
export { useAudioStream } from './use-audio-stream';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from '../core/index.js';
|
|
2
|
+
export { useAudioPlayer } from './use-audio-player.js';
|
|
3
|
+
export { useAudioPlayerStatus } from './use-audio-player-status.js';
|
|
4
|
+
export { useAudioSampleListener } from './use-audio-sample-listener.js';
|
|
5
|
+
export { useAudioPlaylist } from './use-audio-playlist.js';
|
|
6
|
+
export { useAudioPlaylistStatus } from './use-audio-playlist-status.js';
|
|
7
|
+
export { useAudioRecorder } from './use-audio-recorder.js';
|
|
8
|
+
export { useAudioRecorderState } from './use-audio-recorder-state.js';
|
|
9
|
+
export { useAudioStream } from './use-audio-stream.js';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createEventValueHook } from '@symbiote-native/vue';
|
|
2
|
+
import { PLAYBACK_STATUS_UPDATE } from '../core/types.js';
|
|
3
|
+
/** Vue twin of `expo-audio`'s `useAudioPlayerStatus` */
|
|
4
|
+
export const useAudioPlayerStatus = createEventValueHook(PLAYBACK_STATUS_UPDATE, player => player.currentStatus);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ComputedRef, type MaybeRefOrGetter } from '@vue/runtime-core';
|
|
2
|
+
import type { AudioPlayer } from '../core';
|
|
3
|
+
import type { IAudioPlayerOptions, IAudioSource } from '../core';
|
|
4
|
+
/** Vue twin of `expo-audio`'s `useAudioPlayer` */
|
|
5
|
+
export declare function useAudioPlayer(source?: MaybeRefOrGetter<IAudioSource>, options?: MaybeRefOrGetter<IAudioPlayerOptions>): ComputedRef<AudioPlayer>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { toValue, } from '@vue/runtime-core';
|
|
2
|
+
import { createResourceHook } from '@symbiote-native/vue';
|
|
3
|
+
import { createAudioPlayerController } from '../core/audio-player-controller.js';
|
|
4
|
+
const usePlayerResource = createResourceHook(createAudioPlayerController);
|
|
5
|
+
/** Vue twin of `expo-audio`'s `useAudioPlayer` */
|
|
6
|
+
export function useAudioPlayer(source = null, options = {}) {
|
|
7
|
+
return usePlayerResource(() => [toValue(source), toValue(options)]);
|
|
8
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { IAudioPlaylistStatus } from '../core';
|
|
2
|
+
/** Vue twin of `expo-audio`'s `useAudioPlaylistStatus` */
|
|
3
|
+
export declare const useAudioPlaylistStatus: (getSource: () => import("../core/native-module").NativeAudioPlaylist) => import("vue").ShallowRef<IAudioPlaylistStatus>;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createEventValueHook } from '@symbiote-native/vue';
|
|
2
|
+
import { PLAYLIST_STATUS_UPDATE } from '../core/types.js';
|
|
3
|
+
/** Vue twin of `expo-audio`'s `useAudioPlaylistStatus` */
|
|
4
|
+
export const useAudioPlaylistStatus = createEventValueHook(PLAYLIST_STATUS_UPDATE, playlist => playlist.currentStatus);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ComputedRef, MaybeRefOrGetter } from '@vue/runtime-core';
|
|
2
|
+
import type { AudioPlaylist } from '../core';
|
|
3
|
+
import type { IAudioPlaylistOptions } from '../core';
|
|
4
|
+
/** Vue twin of `expo-audio`'s `useAudioPlaylist` */
|
|
5
|
+
export declare function useAudioPlaylist(getOptions?: MaybeRefOrGetter<IAudioPlaylistOptions>): ComputedRef<AudioPlaylist>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { toValue } from '@vue/runtime-core';
|
|
2
|
+
import { createResourceHook } from '@symbiote-native/vue';
|
|
3
|
+
import { createAudioPlaylistController } from '../core/audio-playlist-controller.js';
|
|
4
|
+
const usePlaylistResource = createResourceHook(createAudioPlaylistController);
|
|
5
|
+
/** Vue twin of `expo-audio`'s `useAudioPlaylist` */
|
|
6
|
+
export function useAudioPlaylist(getOptions = {}) {
|
|
7
|
+
return usePlaylistResource(() => [toValue(getOptions)]);
|
|
8
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ShallowRef } from '@vue/runtime-core';
|
|
2
|
+
import type { AudioRecorder } from '../core';
|
|
3
|
+
import type { IRecorderState } from '../core';
|
|
4
|
+
/** Vue twin of `expo-audio`'s `useAudioRecorderState` */
|
|
5
|
+
export declare function useAudioRecorderState(recorder: AudioRecorder, interval?: number): ShallowRef<IRecorderState>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { onUnmounted, shallowRef } from '@vue/runtime-core';
|
|
2
|
+
import { pollRecorderState } from '../core/audio-recorder-polling.js';
|
|
3
|
+
const DEFAULT_POLL_INTERVAL_MS = 500;
|
|
4
|
+
/** Vue twin of `expo-audio`'s `useAudioRecorderState` */
|
|
5
|
+
export function useAudioRecorderState(recorder, interval = DEFAULT_POLL_INTERVAL_MS) {
|
|
6
|
+
const state = shallowRef(recorder.getStatus());
|
|
7
|
+
const stop = pollRecorderState(recorder, interval, updater => {
|
|
8
|
+
state.value = updater(state.value);
|
|
9
|
+
});
|
|
10
|
+
onUnmounted(stop);
|
|
11
|
+
return state;
|
|
12
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ComputedRef, type MaybeRefOrGetter } from '@vue/runtime-core';
|
|
2
|
+
import type { AudioRecorder } from '../core';
|
|
3
|
+
import type { IRecordingOptions, IRecordingStatus } from '../core';
|
|
4
|
+
/** Vue twin of `expo-audio`'s `useAudioRecorder` */
|
|
5
|
+
export declare function useAudioRecorder(getOptions: MaybeRefOrGetter<IRecordingOptions>, statusListener?: (status: IRecordingStatus) => void): ComputedRef<AudioRecorder>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { toValue, watch, } from '@vue/runtime-core';
|
|
2
|
+
import { createResourceHook } from '@symbiote-native/vue';
|
|
3
|
+
import { createAudioRecorderController } from '../core/audio-recorder-controller.js';
|
|
4
|
+
import { subscribeRecordingStatus } from '../core/audio-recorder-status.js';
|
|
5
|
+
const useRecorderResource = createResourceHook(createAudioRecorderController);
|
|
6
|
+
/** Vue twin of `expo-audio`'s `useAudioRecorder` */
|
|
7
|
+
export function useAudioRecorder(getOptions, statusListener) {
|
|
8
|
+
const recorder = useRecorderResource(() => [toValue(getOptions)]);
|
|
9
|
+
watch(recorder, (current, _previous, onCleanup) => onCleanup(subscribeRecordingStatus(current, statusListener)), { immediate: true });
|
|
10
|
+
return recorder;
|
|
11
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IAudioSamplePlayer } from '../core/audio-sample-listener';
|
|
2
|
+
import type { IAudioSample } from '../core/types';
|
|
3
|
+
/** Vue twin of `expo-audio`'s `useAudioSampleListener` */
|
|
4
|
+
export declare function useAudioSampleListener(player: IAudioSamplePlayer, listener: (data: IAudioSample) => void): void;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { onUnmounted, watch } from '@vue/runtime-core';
|
|
2
|
+
import { subscribeAudioSampleListener } from '../core/audio-sample-listener.js';
|
|
3
|
+
/** Vue twin of `expo-audio`'s `useAudioSampleListener` */
|
|
4
|
+
export function useAudioSampleListener(player, listener) {
|
|
5
|
+
let unsubscribe = subscribeAudioSampleListener(player, listener);
|
|
6
|
+
watch(() => player, next => {
|
|
7
|
+
unsubscribe();
|
|
8
|
+
unsubscribe = subscribeAudioSampleListener(next, listener);
|
|
9
|
+
});
|
|
10
|
+
onUnmounted(() => unsubscribe());
|
|
11
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ComputedRef, type MaybeRefOrGetter } from '@vue/runtime-core';
|
|
2
|
+
import type { IAudioStreamResult, IUseAudioStreamOptions } from '../core';
|
|
3
|
+
/** Vue twin of `expo-audio`'s `useAudioStream` */
|
|
4
|
+
export declare function useAudioStream(getOptions: MaybeRefOrGetter<IUseAudioStreamOptions>): ComputedRef<IAudioStreamResult>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { computed, onUnmounted, toValue, watchEffect, } from '@vue/runtime-core';
|
|
2
|
+
import { createResourceHook, createEventValueHook } from '@symbiote-native/vue';
|
|
3
|
+
import { createAudioStreamHooks } from '../core/audio-stream-hooks.js';
|
|
4
|
+
import { toAudioStreamKey } from '../core/audio-stream-subscription.js';
|
|
5
|
+
import { runAudioStreamBufferEffect } from '../core/audio-stream-lifecycle.js';
|
|
6
|
+
const { useStreamResource, useStreamStatus } = createAudioStreamHooks(createResourceHook, createEventValueHook);
|
|
7
|
+
/** Vue twin of `expo-audio`'s `useAudioStream` */
|
|
8
|
+
export function useAudioStream(getOptions) {
|
|
9
|
+
const stream = useStreamResource(() => [
|
|
10
|
+
toAudioStreamKey(toValue(getOptions)),
|
|
11
|
+
]);
|
|
12
|
+
const status = useStreamStatus(() => stream.value);
|
|
13
|
+
runAudioStreamBufferEffect(() => stream.value, () => toValue(getOptions).onBuffer, watchEffect, onUnmounted);
|
|
14
|
+
return computed(() => ({
|
|
15
|
+
stream: stream.value,
|
|
16
|
+
isStreaming: status.value.isStreaming,
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
@@ -1 +1,9 @@
|
|
|
1
1
|
export * from '../core';
|
|
2
|
+
export { injectAudioPlayer } from './inject-audio-player';
|
|
3
|
+
export { injectAudioPlayerStatus } from './inject-audio-player-status';
|
|
4
|
+
export { injectAudioSampleListener } from './inject-audio-sample-listener';
|
|
5
|
+
export { injectAudioPlaylist } from './inject-audio-playlist';
|
|
6
|
+
export { injectAudioPlaylistStatus } from './inject-audio-playlist-status';
|
|
7
|
+
export { injectAudioRecorder } from './inject-audio-recorder';
|
|
8
|
+
export { injectAudioRecorderState } from './inject-audio-recorder-state';
|
|
9
|
+
export { injectAudioStream } from './inject-audio-stream';
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
// @symbiote-native/audio/angular: the Angular entry over the framework-agnostic core. Same
|
|
2
|
-
// reasoning as the React/Vue entries — every export here is a plain class/function with no
|
|
3
|
-
// framework-specific lifecycle to wrap, so this is a plain re-export.
|
|
4
1
|
export * from '../core';
|
|
2
|
+
export { injectAudioPlayer } from './inject-audio-player';
|
|
3
|
+
export { injectAudioPlayerStatus } from './inject-audio-player-status';
|
|
4
|
+
export { injectAudioSampleListener } from './inject-audio-sample-listener';
|
|
5
|
+
export { injectAudioPlaylist } from './inject-audio-playlist';
|
|
6
|
+
export { injectAudioPlaylistStatus } from './inject-audio-playlist-status';
|
|
7
|
+
export { injectAudioRecorder } from './inject-audio-recorder';
|
|
8
|
+
export { injectAudioRecorderState } from './inject-audio-recorder-state';
|
|
9
|
+
export { injectAudioStream } from './inject-audio-stream';
|
|
5
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/angular/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/angular/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AudioPlayer } from '../core';
|
|
2
|
+
import type { IAudioStatus } from '../core';
|
|
3
|
+
/** Angular twin of `expo-audio`'s `useAudioPlayerStatus` */
|
|
4
|
+
export declare const injectAudioPlayerStatus: (getSource: () => AudioPlayer) => import("@angular/core").Signal<IAudioStatus>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createEventValueHook } from '@symbiote-native/angular';
|
|
2
|
+
import { PLAYBACK_STATUS_UPDATE } from '../core/types';
|
|
3
|
+
/** Angular twin of `expo-audio`'s `useAudioPlayerStatus` */
|
|
4
|
+
export const injectAudioPlayerStatus = createEventValueHook(PLAYBACK_STATUS_UPDATE, player => player.currentStatus);
|
|
5
|
+
//# sourceMappingURL=inject-audio-player-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-audio-player-status.js","sourceRoot":"","sources":["../../src/angular/inject-audio-player-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAIvD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,uBAAuB,GAAG,oBAAoB,CAIzD,sBAAsB,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Signal } from '@angular/core';
|
|
2
|
+
import type { AudioPlayer } from '../core';
|
|
3
|
+
import type { IAudioPlayerOptions, IAudioSource } from '../core';
|
|
4
|
+
export declare function injectAudioPlayer(source: () => IAudioSource, options?: () => IAudioPlayerOptions): Signal<AudioPlayer>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Angular twin of `useAudioPlayer`, `injectX` shape matching
|
|
2
|
+
// `@symbiote-native/navigation`'s `injectLinkingIntegration`
|
|
3
|
+
import { createResourceHook } from '@symbiote-native/angular';
|
|
4
|
+
import { createAudioPlayerController } from '../core/audio-player-controller';
|
|
5
|
+
const injectPlayerResource = createResourceHook(createAudioPlayerController);
|
|
6
|
+
export function injectAudioPlayer(source, options = () => ({})) {
|
|
7
|
+
return injectPlayerResource(() => [source(), options()]);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=inject-audio-player.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-audio-player.js","sourceRoot":"","sources":["../../src/angular/inject-audio-player.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,6DAA6D;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAI9E,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,2BAA2B,CAAC,CAAC;AAE7E,MAAM,UAAU,iBAAiB,CAC/B,MAA0B,EAC1B,UAAqC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;IAE/C,OAAO,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { IAudioPlaylistStatus } from '../core';
|
|
2
|
+
/** Angular twin of `expo-audio`'s `useAudioPlaylistStatus` */
|
|
3
|
+
export declare const injectAudioPlaylistStatus: (getSource: () => import("../core/native-module").NativeAudioPlaylist) => import("@angular/core").Signal<IAudioPlaylistStatus>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createEventValueHook } from '@symbiote-native/angular';
|
|
2
|
+
import { PLAYLIST_STATUS_UPDATE } from '../core/types';
|
|
3
|
+
/** Angular twin of `expo-audio`'s `useAudioPlaylistStatus` */
|
|
4
|
+
export const injectAudioPlaylistStatus = createEventValueHook(PLAYLIST_STATUS_UPDATE, playlist => playlist.currentStatus);
|
|
5
|
+
//# sourceMappingURL=inject-audio-playlist-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-audio-playlist-status.js","sourceRoot":"","sources":["../../src/angular/inject-audio-playlist-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAIvD,8DAA8D;AAC9D,MAAM,CAAC,MAAM,yBAAyB,GAAG,oBAAoB,CAI3D,sBAAsB,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Signal } from '@angular/core';
|
|
2
|
+
import type { AudioPlaylist } from '../core';
|
|
3
|
+
import type { IAudioPlaylistOptions } from '../core';
|
|
4
|
+
/** Angular twin of `expo-audio`'s `useAudioPlaylist` */
|
|
5
|
+
export declare function injectAudioPlaylist(getOptions: () => IAudioPlaylistOptions): Signal<AudioPlaylist>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createResourceHook } from '@symbiote-native/angular';
|
|
2
|
+
import { createAudioPlaylistController } from '../core/audio-playlist-controller';
|
|
3
|
+
const injectPlaylistResource = createResourceHook(createAudioPlaylistController);
|
|
4
|
+
/** Angular twin of `expo-audio`'s `useAudioPlaylist` */
|
|
5
|
+
export function injectAudioPlaylist(getOptions) {
|
|
6
|
+
return injectPlaylistResource(() => [getOptions()]);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=inject-audio-playlist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-audio-playlist.js","sourceRoot":"","sources":["../../src/angular/inject-audio-playlist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAIlF,MAAM,sBAAsB,GAAG,kBAAkB,CAC/C,6BAA6B,CAC9B,CAAC;AAEF,wDAAwD;AACxD,MAAM,UAAU,mBAAmB,CACjC,UAAuC;IAEvC,OAAO,sBAAsB,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type Signal } from '@angular/core';
|
|
2
|
+
import type { AudioRecorder } from '../core';
|
|
3
|
+
import type { IRecorderState } from '../core';
|
|
4
|
+
/** Angular twin of `expo-audio`'s `useAudioRecorderState` */
|
|
5
|
+
export declare function injectAudioRecorderState(recorder: AudioRecorder, interval?: number): Signal<IRecorderState>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DestroyRef, inject, signal } from '@angular/core';
|
|
2
|
+
import { pollRecorderState } from '../core/audio-recorder-polling';
|
|
3
|
+
const DEFAULT_POLL_INTERVAL_MS = 500;
|
|
4
|
+
/** Angular twin of `expo-audio`'s `useAudioRecorderState` */
|
|
5
|
+
export function injectAudioRecorderState(recorder, interval = DEFAULT_POLL_INTERVAL_MS) {
|
|
6
|
+
const state = signal(recorder.getStatus(), /* @ts-ignore */
|
|
7
|
+
...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
|
|
8
|
+
const stop = pollRecorderState(recorder, interval, updater => state.set(updater(state())));
|
|
9
|
+
inject(DestroyRef).onDestroy(stop);
|
|
10
|
+
return state.asReadonly();
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=inject-audio-recorder-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-audio-recorder-state.js","sourceRoot":"","sources":["../../src/angular/inject-audio-recorder-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAe,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAInE,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAErC,6DAA6D;AAC7D,MAAM,UAAU,wBAAwB,CACtC,QAAuB,EACvB,WAAmB,wBAAwB;IAE3C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE;8EAAC,CAAC;IAE3C,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAC3D,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAC5B,CAAC;IACF,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEnC,OAAO,KAAK,CAAC,UAAU,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type Signal } from '@angular/core';
|
|
2
|
+
import type { AudioRecorder } from '../core';
|
|
3
|
+
import type { IRecordingOptions, IRecordingStatus } from '../core';
|
|
4
|
+
/** Angular twin of `expo-audio`'s `useAudioRecorder` */
|
|
5
|
+
export declare function injectAudioRecorder(getOptions: () => IRecordingOptions, statusListener?: (status: IRecordingStatus) => void): Signal<AudioRecorder>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { effect } from '@angular/core';
|
|
2
|
+
import { createResourceHook } from '@symbiote-native/angular';
|
|
3
|
+
import { createAudioRecorderController } from '../core/audio-recorder-controller';
|
|
4
|
+
import { subscribeRecordingStatus } from '../core/audio-recorder-status';
|
|
5
|
+
const injectRecorderResource = createResourceHook(createAudioRecorderController);
|
|
6
|
+
/** Angular twin of `expo-audio`'s `useAudioRecorder` */
|
|
7
|
+
export function injectAudioRecorder(getOptions, statusListener) {
|
|
8
|
+
const recorder = injectRecorderResource(() => [getOptions()]);
|
|
9
|
+
effect(onCleanup => {
|
|
10
|
+
onCleanup(subscribeRecordingStatus(recorder(), statusListener));
|
|
11
|
+
});
|
|
12
|
+
return recorder;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=inject-audio-recorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-audio-recorder.js","sourceRoot":"","sources":["../../src/angular/inject-audio-recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAe,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAIzE,MAAM,sBAAsB,GAAG,kBAAkB,CAC/C,6BAA6B,CAC9B,CAAC;AAEF,wDAAwD;AACxD,MAAM,UAAU,mBAAmB,CACjC,UAAmC,EACnC,cAAmD;IAEnD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAE9D,MAAM,CAAC,SAAS,CAAC,EAAE;QACjB,SAAS,CAAC,wBAAwB,CAAC,QAAQ,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IAudioSamplePlayer } from '../core/audio-sample-listener';
|
|
2
|
+
import type { IAudioSample } from '../core/types';
|
|
3
|
+
/** Angular twin of `expo-audio`'s `useAudioSampleListener` */
|
|
4
|
+
export declare function injectAudioSampleListener(player: IAudioSamplePlayer, listener: (data: IAudioSample) => void): void;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DestroyRef, inject } from '@angular/core';
|
|
2
|
+
import { subscribeAudioSampleListener } from '../core/audio-sample-listener';
|
|
3
|
+
/** Angular twin of `expo-audio`'s `useAudioSampleListener` */
|
|
4
|
+
export function injectAudioSampleListener(player, listener) {
|
|
5
|
+
const unsubscribe = subscribeAudioSampleListener(player, listener);
|
|
6
|
+
inject(DestroyRef).onDestroy(unsubscribe);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=inject-audio-sample-listener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-audio-sample-listener.js","sourceRoot":"","sources":["../../src/angular/inject-audio-sample-listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAI7E,8DAA8D;AAC9D,MAAM,UAAU,yBAAyB,CACvC,MAA0B,EAC1B,QAAsC;IAEtC,MAAM,WAAW,GAAG,4BAA4B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACnE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Signal } from '@angular/core';
|
|
2
|
+
import type { IAudioStreamResult, IUseAudioStreamOptions } from '../core';
|
|
3
|
+
/** Angular twin of `expo-audio`'s `useAudioStream` */
|
|
4
|
+
export declare function injectAudioStream(getOptions: () => IUseAudioStreamOptions): Signal<IAudioStreamResult>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { computed, DestroyRef, effect, inject, } from '@angular/core';
|
|
2
|
+
import { createResourceHook, createEventValueHook, } from '@symbiote-native/angular';
|
|
3
|
+
import { createAudioStreamHooks } from '../core/audio-stream-hooks';
|
|
4
|
+
import { toAudioStreamKey } from '../core/audio-stream-subscription';
|
|
5
|
+
import { runAudioStreamBufferEffect } from '../core/audio-stream-lifecycle';
|
|
6
|
+
const { useStreamResource, useStreamStatus } = createAudioStreamHooks(createResourceHook, createEventValueHook);
|
|
7
|
+
/** Angular twin of `expo-audio`'s `useAudioStream` */
|
|
8
|
+
export function injectAudioStream(getOptions) {
|
|
9
|
+
const destroyRef = inject(DestroyRef);
|
|
10
|
+
const stream = useStreamResource(() => [toAudioStreamKey(getOptions())]);
|
|
11
|
+
const status = useStreamStatus(stream);
|
|
12
|
+
runAudioStreamBufferEffect(stream, () => getOptions().onBuffer, effect, cleanup => destroyRef.onDestroy(cleanup));
|
|
13
|
+
return computed(() => ({
|
|
14
|
+
stream: stream(),
|
|
15
|
+
isStreaming: status().isStreaming,
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=inject-audio-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-audio-stream.js","sourceRoot":"","sources":["../../src/angular/inject-audio-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,UAAU,EACV,MAAM,EACN,MAAM,GAEP,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAG5E,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,GAAG,sBAAsB,CACnE,kBAAkB,EAClB,oBAAoB,CACrB,CAAC;AAEF,sDAAsD;AACtD,MAAM,UAAU,iBAAiB,CAC/B,UAAwC;IAExC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEvC,0BAA0B,CACxB,MAAM,EACN,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,EAC3B,MAAM,EACN,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CACzC,CAAC;IAEF,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACrB,MAAM,EAAE,MAAM,EAAE;QAChB,WAAW,EAAE,MAAM,EAAE,CAAC,WAAW;KAClC,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -12,7 +12,7 @@ export async function setAudioModeAsync(mode) {
|
|
|
12
12
|
: {
|
|
13
13
|
shouldPlayInBackground: mode.shouldPlayInBackground,
|
|
14
14
|
shouldRouteThroughEarpiece: mode.shouldRouteThroughEarpiece,
|
|
15
|
-
interruptionMode: mode.interruptionMode,
|
|
15
|
+
interruptionMode: mode.interruptionMode ?? mode.interruptionModeAndroid,
|
|
16
16
|
allowsBackgroundRecording: mode.allowsBackgroundRecording,
|
|
17
17
|
playsInSilentMode: mode.playsInSilentMode,
|
|
18
18
|
};
|