npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

wsaudioplayer

v0.0.3

Published

Stencil Component Starter

Readme

Wavesurfer Audio Player

The Wavesurfer Audio Player is a lightweight and standalone custom web component for seamless audio playback with a modern waveform visualization. Built using Stencil.js and WaveSurfer.js, it enables developers to integrate responsive and interactive audio players into any web application without additional frameworks.

This component offers simple playback controls, customizable styles, event-based communication, and the ability to handle audio playback and looping regions. It is fully responsive and works across web applications.

Demo

Visit https://www.bizzle.dev/wavesurfer-audio-player/ to see a demo


Getting Started

To integrate the ws-audio-player into your web project, include the required <script> tags in your HTML file to register the custom element.

Adding <script> Tags

For seamless integration, add these script tags to your HTML's <head>:

<script type="module" src="/build/wsaudioplayer.esm.js"></script>
<script nomodule src="/build/wsaudioplayer.js"></script>

CDN Scripts

Modern script (esmodule): https://unpkg.com/[email protected]/dist/wsaudioplayer/wsaudioplayer.esm.js Legacy browsers (cjs): https://unpkg.com/[email protected]/dist/cjs/wsaudioplayer.cjs.js

If you are targeting only modern browsers, you may include the ES module version only:

<script type="module" src="/build/wsaudioplayer.esm.js"></script>

or CDN link

<script type="module" src="https://unpkg.com/[email protected]/dist/wsaudioplayer/wsaudioplayer.esm.js"></script>

Usage

The <ws-audio-player> component is easy to implement in your application. Below is an example of how to use it, including attributes to customize the player’s behavior and design.

Example HTML

<ws-audio-player 
  style="--font-family: Courier; --waveform-color: #1e90ff;" 
  audio="audio-file.wav" 
  resolution="100" 
  audio-title="Sample Audio Title" 
  color="blue" 
  height="80">
</ws-audio-player>

Attributes

The component supports several configurable attributes for customizing audio playback and design:

| Attribute | Type | Default Value | Description | |----------------|-----------------|-----------------|----------------------------------------------------------------------------------------------| | audio | string | - | The relative or absolute file path of the audio file to be played. | | audioTitle| string | - | The title of the audio playback track. | | color | string | - | Color of the audio waveform. | | height | string | - | Height of the waveform visualization in pixels. | | resolution| number | 100 | Determines the detail resolution of the waveform. The higher the value, the more detailed. | | theme | string | "basic" | Determines the UI theme of the player. Options: "basic" or "dark". | | progress | string | "#666666" | The color of the progress bar displayed during playback. |

Example of Customizing Attributes

<ws-audio-player 
  audio="assets/track.mp3" 
  audio-title="My Cool Track" 
  color="orange" 
  height="120" 
  resolution="150" 
  theme="dark">
</ws-audio-player>

Events

The component emits one global custom event that allows developers to track when the audio player starts playing. This event bubbles and crosses Shadow DOM boundaries, making it easy to listen for and respond to.

wsAudioPlaying

The wsAudioPlaying event is emitted whenever playback starts. It provides detailed information about the player and the currently active audio track.

  • Event Payload:
    • source: A reference to the <ws-audio-player> element emitting the event.
    • title: The title of the track being played.
    • audio: The source file of the track.

Listening for the Event

Add an event listener to capture the playback event:

window.addEventListener('wsAudioPlaying', (event: CustomEvent) => {
  const { source, title, audio } = event.detail;
  console.log(`Playing: ${title} (File: ${audio})`, source);
});

This enables you to track playback for analytics or update UI dynamically.


Style Control

Customization of the component’s styles can be done using CSS variables and component parts. This enables developers to control and adapt the player’s appearance to match application design requirements.

Style Customization with CSS Variables

To customize the component’s styles, use the following CSS variables in your HTML or CSS files: | CSS Variable | Description | |--------------------|-------------------------------------------------| | --font-family | Font family for the audio player. | | --button-color | Background color of buttons. | | --waveform-color | Color of the waveform visualization. |

Example of CSS Variables Usage

<ws-audio-player
  style="--font-family: monospace; --button-color: #ff6600; --waveform-color: #336699;"
  audio="track.mp3"
  audio-title="My Audio"
></ws-audio-player>

Style Customization with Shadow Parts

The component exposes custom shadow parts that allow direct control of specific sections of the player via the ::part() pseudo-element.

| Shadow Part | Description | |---------------------|-----------------------------------------| | waveform | The waveform visualization area. | | play-button | The main play/pause button. | | play-main | The main container around the play area.|

Example of Styling with Shadow Parts

<ws-audio-player audio="song.mp3" audio-title="Styled Player"></ws-audio-player>
<style>
  ws-audio-player::part(waveform) {
    background-color: #1e90ff; /* Waveform area */
  }

  ws-audio-player::part(play-button) {
    background-color: orange; /* Play button background */
    font-size: 16px;
  }

  ws-audio-player::part(play-main) {
    border: 2px solid #ccc; /* Container border */
  }
</style>

Keyboard Interactions

The component supports keyboard controls:

  • Spacebar (Space): Pause or play the audio. This works only when the component or a child element is focused.

Example HTML for Complete Implementation

Here’s a complete example of how to seamlessly integrate and use the player:

<!DOCTYPE html>
<html dir="ltr" lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Audio Player Example</title>
  <script type="module" src="/build/wsaudioplayer.esm.js"></script>
  <script nomodule src="/build/wsaudioplayer.js"></script>
</head>
<body>
  <h1>My Audio Player</h1>

  <!-- Customized audio player -->
  <ws-audio-player 
    style="--font-family: monospace; --button-color: orange; --waveform-color: #1e90ff;" 
    audio="assets/sample.mp3" 
    resolution="80" 
    audio-title="Sample Track" 
    color="blue" 
    height="100">
  </ws-audio-player>

  <script>
    window.addEventListener('wsAudioPlaying', (event) => {
      console.log('Playing:', event.detail.title, event.detail.audio);
    });
  </script>
</body>
</html>

Conclusion

The Wavesurfer Audio Player is a powerful yet lightweight web component for audio playback. With full customization options, event-driven design, and responsive behavior, this player is ideal for modern web applications. Have fun building amazing audio experiences!