App-MHFS
view release on metacpan or search on metacpan
share/public_html/static/music_worklet_inprogress/player/mhfsplayer.js view on Meta::CPAN
import { MHFSCLDecoder } from '../decoder/mhfscl.js'
import { Float32AudioRingBufferWriter, Float32AudioRingBufferReader } from './AudioWriterReader.js'
let CDIMAGE;
// FIFO mutex
class Mutex {
constructor() {
this._locking = Promise.resolve();
this._locked = false;
}
isLocked() {
return this._locked;
}
lock() {
this._locked = true;
let unlockNext;
let willLock = new Promise(resolve => unlockNext = resolve);
willLock.then(() => this._locked = false);
let willUnlock = this._locking.then(() => unlockNext);
this._locking = this._locking.then(() => willLock);
return willUnlock;
}
}
const abortablesleep = (ms, signal) => new Promise(function(resolve) {
const onTimerDone = function() {
resolve();
signal.removeEventListener('abort', stoptimer);
};
let timer = setTimeout(function() {
//console.log('sleep done ' + ms);
onTimerDone();
}, ms);
const stoptimer = function() {
console.log('aborted sleep');
onTimerDone();
clearTimeout(timer);
};
signal.addEventListener('abort', stoptimer);
});
const abortablesleep_status = async function (ms, signal) {
await abortablesleep(ms, signal);
if(signal.aborted) {
return false;
}
return true;
}
/*
const TrackQueue = function(starttrack, time) {
let that = {};
// store the tail so we don't have to search for it
that.tail = starttrack;
for(; that.tail.next; that.tail = that.tail.next);
const waitForTrack = function() {
const _waitfortrack = new Promise((resolve) => {
that.ontrackadded = resolve;
});
return _waitfortrack;
};
that._FAQ = async function(track, time) {
if(!track) {
track = await waitForTrack();
}
};
that.push = function(track) {
that.tail.next = track;
that.tail = track;
track.prev = that.tail;
// resume FAQ
if(that.ontrackadded) {
that.ontrackadded(track);
that.ontrackadded = null;
}
};
that.stop() = function (){
};
that.onrepeattrackturnedon = function() {
// determine the currently queuing track
// stop decodes after it
// delete after it
};
that.onrepeattrackturnedoff = function() {
// stop decodes of not AQ[0]
// delete after AQ[0]
};
that._FAQ(starttrack, time);
return that;
};
( run in 2.762 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )