Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@solid-primitives/audio

Package Overview
Dependencies
Maintainers
0
Versions
32
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@solid-primitives/audio

Primitives to manage audio and single sounds.

  • 1.3.18
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
0
Created
Source

Solid Primitives Audio

@solid-primitives/audio

turborepo size size stage

Primitive to manage audio playback in the browser. The primitives are easily composable and extended. To create your own audio element, consider using makeAudioPlayer which allows you to supply a player instance that matches the built-in standard Audio API.

Each primitive also exposes the audio instance for further custom extensions. Within an SSR context this audio primitive performs noops but never interrupts the process. Time values and durations are zero'd and in LOADING state.

Installation

npm install @solid-primitives/audio
# or
yarn add @solid-primitives/audio

How to use it

makeAudio

A foundational primitive with no player controls but exposes the raw player object.

const player = makeAudio("example.mp3");
Definition
function makeAudio(src: AudioSource, handlers: AudioEventHandlers = {}): HTMLAudioElement;

makeAudioPlayer

Provides a very basic interface for wrapping listeners to a supplied or default audio player.

const { play, pause, seek } = makeAudioPlayer("example.mp3");
Definition
function makeAudioPlayer(
  src: AudioSource,
  handlers: AudioEventHandlers = {},
): {
  play: VoidFunction;
  pause: VoidFunction;
  seek: (time: number) => void;
  setVolume: (volume: number) => void;
  player: HTMLAudioElement;
};

The seek function falls back to fastSeek when on supporting browsers.

createAudio

Creates a very basic audio/sound player with reactive properties to control the audio. Be careful not to destructure the value properties provided by the primitive as it will likely break reactivity.

const [playing, setPlaying] = createSignal(false);
const [volume, setVolume] = createSignal(false);
const [audio, controls] = createAudio("sample.mp3", playing, volume);
setPlaying(true); // or controls.play()
controls.seek(4000);

The audio primitive exports an reactive properties that provides you access to state, duration and current time.

Note: Initializing the primitive with playing as true works, however note that the user has to interact with the page first (on a fresh page load).

function makeAudioPlayer(
  src: AudioSource | Accessor<AudioSource>,
  playing?: Accessor<boolean>,
  volume?: Accessor<number>,
): [
  {
    state: AudioState;
    currentTime: number;
    duration: number;
    volume: number;
    player: HTMLAudioElement;
  },
  {
    seek: (time: number) => void;
    setVolume: (volume: number) => void;
    play: VoidFunction;
    pause: VoidFunction;
  },
];
Dynamic audio changes

The source property can be a signal as well as a media source. Upon switching the source via a signal it will continue playing from the head.

const [src, setSrc] = createSignal("sample.mp3");
const audio = createAudio(src);
setSrc("sample2.mp3");

Audio Source

createAudio as well as makeAudio and makeAudioPlayer all accept MediaSource as a property.

const media = new MediaSource();
const audio = createAudio(URL.createObjectURL(media));

This allows you to managed streamed or Blob supplied media. In essence the primitives in this package are very flexible and allow direct access to the base browser API.

Demo

You may view a working example here: https://stackblitz.com/edit/vitejs-vite-zwfs6h?file=src%2Fmain.tsx

Changelog

See CHANGELOG.md

Keywords

FAQs

Package last updated on 20 Sep 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc