@symbiote-native/audio 0.1.2 → 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
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Accessor } from 'solid-js';
|
|
2
|
+
import type { IAudioStreamResult, IUseAudioStreamOptions } from '../core';
|
|
3
|
+
/** Solid twin of `expo-audio`'s `useAudioStream` */
|
|
4
|
+
export declare function useAudioStream(getOptions: Accessor<IUseAudioStreamOptions>): Accessor<IAudioStreamResult>;
|
|
@@ -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
|
};
|