@solid-primitives/audio
Advanced tools
Comparing version
@@ -1,2 +0,2 @@ | ||
export declare enum AudioState { | ||
declare enum AudioState { | ||
LOADING = "loading", | ||
@@ -17,3 +17,3 @@ PLAYING = "playing", | ||
*/ | ||
export declare const createAudioPlayer: (src: AudioSource, handlers: Array<[string, EventListener]>) => { | ||
declare const createAudioPlayer: (src: AudioSource, handlers: Array<[string, EventListener]>) => { | ||
player: HTMLAudioElement; | ||
@@ -38,3 +38,3 @@ state: () => AudioState; | ||
*/ | ||
export declare const createAudio: (src: AudioSource) => { | ||
declare const createAudio: (src: AudioSource) => { | ||
play: () => void; | ||
@@ -65,3 +65,3 @@ pause: () => void; | ||
*/ | ||
export declare const createAudioManager: (src: AudioSource, volume?: number) => { | ||
declare const createAudioManager: (src: AudioSource, volume?: number) => { | ||
play: () => void; | ||
@@ -76,2 +76,3 @@ pause: () => void; | ||
}; | ||
export {}; | ||
export { AudioState, createAudio, createAudioManager, createAudioPlayer }; |
@@ -0,109 +1,68 @@ | ||
// src/index.ts | ||
import { createSignal, batch, onMount, onCleanup, createEffect } from "solid-js"; | ||
// Set of control enums | ||
export var AudioState; | ||
(function (AudioState) { | ||
AudioState["LOADING"] = "loading"; | ||
AudioState["PLAYING"] = "playing"; | ||
AudioState["PAUSED"] = "paused"; | ||
AudioState["COMPLETE"] = "complete"; | ||
AudioState["STOPPED"] = "stopped"; | ||
AudioState["READY"] = "ready"; | ||
var AudioState; | ||
(function(AudioState2) { | ||
AudioState2["LOADING"] = "loading"; | ||
AudioState2["PLAYING"] = "playing"; | ||
AudioState2["PAUSED"] = "paused"; | ||
AudioState2["COMPLETE"] = "complete"; | ||
AudioState2["STOPPED"] = "stopped"; | ||
AudioState2["READY"] = "ready"; | ||
})(AudioState || (AudioState = {})); | ||
/** | ||
* Creates an extremely basic audio generator method. | ||
* | ||
* @param src Audio file path or MediaSource to be played | ||
* @param handlers An array of handlers to bind against the player | ||
* @return | ||
*/ | ||
export const createAudioPlayer = (src, handlers) => { | ||
const [state, setState] = createSignal(AudioState.STOPPED); | ||
const player = new Audio(); | ||
if (src instanceof Function) { | ||
const srcKey = typeof src() === "string" ? "src" : "srcObject"; | ||
player[srcKey] = src(); | ||
createEffect(() => (player[srcKey] = src())); | ||
} | ||
else { | ||
player[typeof src === "string" ? "src" : "srcObject"] = src; | ||
} | ||
// Handle management on create and clean-up | ||
onMount(() => handlers.forEach(([evt, handler]) => player.addEventListener(evt, handler))); | ||
onCleanup(() => handlers.forEach(([evt, handler]) => player.removeEventListener(evt, handler))); | ||
return { player, state, setState }; | ||
var createAudioPlayer = (src, handlers) => { | ||
const [state, setState] = createSignal(AudioState.STOPPED); | ||
const player = new Audio(); | ||
if (src instanceof Function) { | ||
const srcKey = typeof src() === "string" ? "src" : "srcObject"; | ||
player[srcKey] = src(); | ||
createEffect(() => player[srcKey] = src()); | ||
} else { | ||
player[typeof src === "string" ? "src" : "srcObject"] = src; | ||
} | ||
onMount(() => handlers.forEach(([evt, handler]) => player.addEventListener(evt, handler))); | ||
onCleanup(() => handlers.forEach(([evt, handler]) => player.removeEventListener(evt, handler))); | ||
return { player, state, setState }; | ||
}; | ||
/** | ||
* Creates a simple audio manager with basic pause and play. | ||
* | ||
* @param src Audio file path or MediaSource to be played | ||
* @return options - @type Object | ||
* @return options.start - Start playing | ||
* @return options.stop - Stop playing | ||
* @return options.state - Current state of the player as a Symbol | ||
* @return Returns a location signal and one-off async query callback | ||
* | ||
* @example | ||
* ```ts | ||
* const [start, pause] = createAudio('./example1.mp3); | ||
* ``` | ||
*/ | ||
export const createAudio = (src) => { | ||
const { player, state, setState } = createAudioPlayer(src, [ | ||
["loadeddata", () => setState(AudioState.READY)], | ||
["loadstart", () => setState(AudioState.LOADING)], | ||
["playing", () => setState(AudioState.PLAYING)], | ||
["pause", () => setState(AudioState.PAUSED)] | ||
]); | ||
// Audio controls | ||
const play = () => player.play(); | ||
const pause = () => player.pause(); | ||
return { play, pause, state, player }; | ||
var createAudio = (src) => { | ||
const { player, state, setState } = createAudioPlayer(src, [ | ||
["loadeddata", () => setState(AudioState.READY)], | ||
["loadstart", () => setState(AudioState.LOADING)], | ||
["playing", () => setState(AudioState.PLAYING)], | ||
["pause", () => setState(AudioState.PAUSED)] | ||
]); | ||
const play = () => player.play(); | ||
const pause = () => player.pause(); | ||
return { play, pause, state, player }; | ||
}; | ||
/** | ||
* Creates a simple audio manager with most control actions. | ||
* | ||
* @param src Audio file path or MediaSource to be played | ||
* @param volume Volume setting for the audio file | ||
* @return options - @type Object | ||
* @return options.start - Start playing | ||
* @return options.stop - Stop playing | ||
* @return options.currentTime - Current time that the player is at | ||
* @return options.state - Current state of the player as a Symbol | ||
* @return options.duration - Duration of the audio clip | ||
* @return options.seek - A function to support seeking | ||
* @return options.setVolume - A function to change the volume setting | ||
* @return Returns a location signal and one-off async query callback | ||
* | ||
* @example | ||
* ```ts | ||
* const [start, pause, seek, currentTime, duration] = createAudioManager('./example1.mp3); | ||
* ``` | ||
*/ | ||
export const createAudioManager = (src, volume = 1) => { | ||
const [currentTime, setCurrentTime] = createSignal(0); | ||
const [duration, setDuration] = createSignal(0); | ||
// Bind recording events to the player | ||
const { player, state, setState } = createAudioPlayer(src, [ | ||
[ | ||
"loadeddata", | ||
() => batch(() => { | ||
setState(AudioState.READY); | ||
setDuration(player.duration); | ||
}) | ||
], | ||
["loadstart", () => setState(AudioState.LOADING)], | ||
["playing", () => setState(AudioState.PLAYING)], | ||
["pause", () => setState(AudioState.PAUSED)], | ||
["loadstart", () => setState(AudioState.LOADING)], | ||
["playing", () => setState(AudioState.PLAYING)], | ||
["pause", () => setState(AudioState.PAUSED)], | ||
["timeupdate", () => setCurrentTime(player.currentTime)] | ||
]); | ||
// Audio controls | ||
const play = () => player.play(); | ||
const pause = () => player.pause(); | ||
const seek = (time) => player.fastSeek(time); | ||
const setVolume = (volume) => (player.volume = volume); | ||
createEffect(() => (player.volume = volume)); | ||
return { play, pause, currentTime, state, duration, seek, setVolume, player }; | ||
var createAudioManager = (src, volume = 1) => { | ||
const [currentTime, setCurrentTime] = createSignal(0); | ||
const [duration, setDuration] = createSignal(0); | ||
const { player, state, setState } = createAudioPlayer(src, [ | ||
[ | ||
"loadeddata", | ||
() => batch(() => { | ||
setState(AudioState.READY); | ||
setDuration(player.duration); | ||
}) | ||
], | ||
["loadstart", () => setState(AudioState.LOADING)], | ||
["playing", () => setState(AudioState.PLAYING)], | ||
["pause", () => setState(AudioState.PAUSED)], | ||
["loadstart", () => setState(AudioState.LOADING)], | ||
["playing", () => setState(AudioState.PLAYING)], | ||
["pause", () => setState(AudioState.PAUSED)], | ||
["timeupdate", () => setCurrentTime(player.currentTime)] | ||
]); | ||
const play = () => player.play(); | ||
const pause = () => player.pause(); | ||
const seek = (time) => player.fastSeek(time); | ||
const setVolume = (volume2) => player.volume = volume2; | ||
createEffect(() => player.volume = volume); | ||
return { play, pause, currentTime, state, duration, seek, setVolume, player }; | ||
}; | ||
export { | ||
AudioState, | ||
createAudio, | ||
createAudioManager, | ||
createAudioPlayer | ||
}; |
{ | ||
"name": "@solid-primitives/audio", | ||
"version": "1.0.3", | ||
"version": "1.0.5", | ||
"description": "Primitives to manage audio and single sounds.", | ||
@@ -8,7 +8,10 @@ "author": "David Di Biase <dave.dibiase@gmail.com>", | ||
"homepage": "https://github.com/davedbase/solid-primitives/tree/main/packages/audio", | ||
"private": false, | ||
"main": "dist/index.js", | ||
"module": "dist/index.js", | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/davedbase/solid-primitives/tree/main/packages/template-primitive" | ||
}, | ||
"main": "./dist/server.cjs", | ||
"module": "./dist/index.js", | ||
"types": "./dist/index.d.ts", | ||
"type": "module", | ||
"types": "dist/index.d.ts", | ||
"files": [ | ||
@@ -18,11 +21,11 @@ "dist" | ||
"exports": { | ||
"require": "./dist/cjs/index.js", | ||
"import": "./dist/index.js", | ||
"default": "./dist/index.js" | ||
".": { | ||
"require": "./dist/server.cjs", | ||
"import": "./dist/index.js", | ||
"types": "./dist/index.d.ts" | ||
} | ||
}, | ||
"sideEffects": "false", | ||
"scripts": { | ||
"prebuild": "npm run clean", | ||
"clean": "rimraf dist/", | ||
"build": "tsc && tsc --target es5 --module commonjs --declaration false --outDir ./dist/cjs", | ||
"start": "vite -r ./dev/ -c ./dev/vite.config.ts", | ||
"build": "tsup src/index.ts --clean --format esm && tsup src/server.ts --format cjs", | ||
"test": "jest" | ||
@@ -40,2 +43,3 @@ }, | ||
"jest": "^27.2.5", | ||
"tsup": "^5.10.0", | ||
"prettier": "^2.0.5", | ||
@@ -42,0 +46,0 @@ "solid-testing-library": "^0.2.0", |
@@ -58,3 +58,3 @@ --- | ||
1.0.3 | ||
1.0.5 | ||
@@ -61,0 +61,0 @@ Added CJS support. |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
7
16.67%0
-100%13188
-22.36%10
11.11%258
-15.69%1
Infinity%