New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@solid-primitives/audio

Package Overview
Dependencies
Maintainers
2
Versions
34
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@solid-primitives/audio - npm Package Compare versions

Comparing version

to
1.0.5

dist/server.cjs

11

dist/index.d.ts

@@ -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.