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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@ultimateshadsform/universal-media

v1.0.3

Published

A Node.js native module for controlling media playback and system audio. Built with Rust and OS specific APIs.

Downloads

518

Readme

universal-media 🎵

A Node.js native module for controlling media playback and system audio. Built with Rust and OS specific APIs.

Example app built using @ultimateshadsform/universal-media:

image

Please always refer to GitHub README for the most up to date information.

Features 🚀

Media Control 🎮

  • Get current media info (title, artist, album, albumArtist) 📝
  • Get media thumbnail 🖼️
  • Play/Pause/Stop control ⏯️
  • Next/Previous track navigation ⏭️
  • Get playback status 📊
  • Event-based media state changes 🔄

Volume Control 🔊

  • Get/Set system volume 🎚️
  • Get/Set system mute status 🔇
  • [TODO] Control individual application volumes 🎛️

Installation 📦

[!NOTE] This is a work in progress. API might change rapidly between releases. Right now only Windows is supported.

npm install @ultimateshadsform/universal-media

Usage 📖

Basic Usage

import { MediaController } from '@ultimateshadsform/universal-media';

// Create a media controller instance
const media = new MediaController();

// Get media info
const mediaInfo = await media.getMediaInfo();
console.log(mediaInfo);
// {
//   title: 'Song Title',
//   artist: 'Artist Name',
//   album: 'Album Name',
//   albumArtist: 'Album Artist',
//   playbackStatus: 'playing',
//   hasThumbnail: true,
//   thumbnailData: 'base64...'
// }

// Control playback
await media.play();
await media.pause();
await media.next();
await media.previous();
await media.stop();

// Control system audio
await media.setSystemVolume(0.5); // 0.0 to 1.0
await media.setSystemMute(true);

const volume = await media.getSystemVolume();
const isMuted = await media.getSystemMute();

Event System

Subscribe to media and system audio events:

const subscription = media.subscribeToEvents((event) => {
  switch (event.eventType) {
    case EventType.MediaChange:
    case EventType.PlaybackChange:
      console.log('Media Info:', event.mediaInfo);
      break;
    case EventType.VolumeChange:
      console.log('Volume:', event.volume);
      break;
    case EventType.MuteChange:
      console.log('Muted:', event.muted);
      break;
  }
});

// Clean up subscription when done
subscription.stop();

If you're still not sure how to use you can check out the testing directory on how I have implemented it in a Vue.js project.

Extras

Why does Spotify logo appear and why does it look so weird?

We grab image data directly from the system, so we cannot control how it looks. Try using some external tool such as sharp to process it.

Contributing 🤝

See CONTRIBUTING.md

License 📄

This project is licensed under the MIT License. See the LICENSE file for details.