App-MHFS
view release on metacpan or search on metacpan
share/public_html/static/music_inc/music_inc_module.js view on Meta::CPAN
//import {default as NetworkDrFlac} from './music_drflac_module.js'
import {default as NetworkDrFlac} from './music_drflac_module.cache.js'
// times in seconds
const AQMaxDecodedTime = 20; // maximum time decoded, but not queued
const AQStartLookahead = 0.100; // minimum time to buffer before starting playback
const AQLookahead = 5; // buffer as long as less than AQLookahead is buffered
let MainAudioContext;
let GainNode;
let AQID = -1;
let AudioQueue = [];
let Tracks_HEAD;
let Tracks_TAIL;
let Tracks_QueueCurrent;
let FACAbortController = new AbortController();
let SBAR_UPDATING = 0;
let NWDRFLAC;
function DeclareGlobalFunc(name, value) {
Object.defineProperty(window, name, {
value: value,
configurable: false,
writable: false
});
};
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;
}
}
function CreateAudioContext(options) {
let mycontext = (window.hasWebKit) ? new webkitAudioContext(options) : (typeof AudioContext != "undefined") ? new AudioContext(options) : null;
GainNode = mycontext.createGain();
GainNode.connect(mycontext.destination);
return mycontext;
}
let lastMALtime;
function MainAudioLoop() {
if(lastMALtime) {
const MALDelta = MainAudioContext.currentTime - lastMALtime;
if((MALDelta) > 0.100) {
console.log('MAL called super late ' + MALDelta);
}
}
lastMALtime= MainAudioContext.currentTime;
AQ_clean();
( run in 0.518 second using v1.01-cache-2.11-cpan-d7f47b0818f )