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

mock-audio-element-adv

v0.1.2

Published

minimum implementation of HTML5 Audio events

Downloads

14

Readme

MockAudioElement NPM version Build Status Coverage Status Climate Status

minimum implementation of HTML5 Audio events

Installation

$ npm install mock-audio-element-adv --save

class Audio

(WIP) an unreal audio elements. dispatch few events and change the limited properties.

import {Audio} from 'mock-audio-element-adv';

let audio= new Audio();
console.log(audio)
// {
//   src: '',
//   loop: false,
//   autoplay: false,
//   paused: true,
//   ended: false,
//   error: null,
//   currentTime: 0,
//   duration: NaN
// }

If audio.src is true, to fetch the src.duration via http.

let audio= new Audio('http://static.edgy.black/fixture.mp3')
// or ...
let audio= new Audio
audio.src= 'http://static.edgy.black/fixture.mp3'
audio.addEventListener('canplaythrough',()=>{
  console.log(audio.duration) // 120.63985
})

If audio.autoplay is true(or .play()), to playback(simulation) until src.duration.

let audio= new Audio
audio.src= 'http://static.edgy.black/fixture.mp3'
audio.autoplay= true
audio.currentTime= 120

audio.addEventListener('timeupdate',()=>{
  console.log(audio.currentTime,audio.paused)
})
audio.addEventListener('ended',()=>{
  console.log(audio.currentTime,audio.paused)
})
// 120.104 false
// 120.205 false
// 120.308 false
// 120.412 false
// 120.514 false
// 120.616 false
// 120.63985 false
// 120.63985 true

But, if the src.loop is true, do repeat the playback.


let audio= new Audio
audio.src= fixtureURL
audio.autoplay= true
audio.currentTime= 120
audio.loop= true

audio.addEventListener('timeupdate',()=>{
  console.log(audio.currentTime,audio.paused)
})
// 120.1 false
// 120.203 false
// 120.304 false
// 120.404 false
// 120.507 false
// 120.611 false
// 120.64 false
// 0.104 false
// 0.209 false
// ...

There is a possibility to dispatch an following events only.

  • play
  • loadstart
  • durationchange
  • loadedmetadata
  • canplay
  • playing
  • canplaythrough
  • timeupdate
  • pause
  • ended

In addition, only dispatch the event. nothing sends data.

audio.addEventListener('timeupdate',(data)=>{
  console.log(data)// undefined
})

Additional methods

createWithAbortError

Create Audio class that has play method that return promise and rejects it when content is not downloaded or called pause

import {createWithAbortError} from 'mock-audio-element-adv';

const {Audio} = createWithAbortError();
const audio = new Audio('file.mp3');
audio.play()
  .catch(reason => console.error(reason)); // Will log error with name 'AbortError'
audio.pause();

createWithNotAllowed

Create Audio class that has play method that return promise and rejects when action was not made by user.

import {createAudioWithNotAllowedError} from 'mock-audio-element-adv';

const {Audio, testkit} = createAudioWithNotAllowedError();
const audioByUser = new Audio('file.mp3');
audio.play().then(() => console.log('ok'));
testkit.setIsByUserAction(false);
const audioByProgram = new Audio('file.mp3');
audio.play().catch(reason => console.error(reason)); // Will log error with name 'NotAllowedError'

License

MIT