mock-audio-element-adv
v0.1.2
Published
minimum implementation of HTML5 Audio events
Downloads
14
Readme
MockAudioElement
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'