audio-context-timers
Version:
A replacement for setInterval() and setTimeout() which works in unfocused windows.
33 lines • 2.04 kB
JavaScript
import { generateUniqueNumber } from 'fast-unique-numbers';
import { AudioBuffer, AudioBufferSourceNode, MinimalAudioContext, isSupported } from 'standardized-audio-context';
import { createCallFunction } from './factories/call-function';
import { createClearFunction } from './factories/clear-function';
import { createScheduleFunction } from './factories/schedule-function';
const SCHEDULED_INTERVAL_FUNCTIONS = new Map();
const callIntervalFunction = createCallFunction(SCHEDULED_INTERVAL_FUNCTIONS, 'interval');
export const clearInterval = createClearFunction(SCHEDULED_INTERVAL_FUNCTIONS);
const SCHEDULED_TIMEOUT_FUNCTIONS = new Map();
const callTimeoutFunction = createCallFunction(SCHEDULED_TIMEOUT_FUNCTIONS, 'timeout');
export const clearTimeout = createClearFunction(SCHEDULED_TIMEOUT_FUNCTIONS);
export { isSupported };
const createAudioBuffer = (length, sampleRate) => new AudioBuffer({ length, sampleRate });
const createAudioBufferSourceNode = (minimalAudioContext, audioBuffer) => new AudioBufferSourceNode(minimalAudioContext, { buffer: audioBuffer });
const createMinimalAudioContext = () => new MinimalAudioContext();
const scheduleIntervalFunction = createScheduleFunction(callIntervalFunction, createAudioBuffer, createAudioBufferSourceNode, createMinimalAudioContext, performance);
export const setInterval = (func, delay) => {
const id = generateUniqueNumber(SCHEDULED_INTERVAL_FUNCTIONS);
SCHEDULED_INTERVAL_FUNCTIONS.set(id, () => {
func();
scheduleIntervalFunction(id, delay, 'interval');
});
scheduleIntervalFunction(id, delay, 'interval');
return id;
};
const scheduleTimeoutFunction = createScheduleFunction(callTimeoutFunction, createAudioBuffer, createAudioBufferSourceNode, createMinimalAudioContext, performance);
export const setTimeout = (func, delay) => {
const id = generateUniqueNumber(SCHEDULED_TIMEOUT_FUNCTIONS);
SCHEDULED_TIMEOUT_FUNCTIONS.set(id, func);
scheduleTimeoutFunction(id, delay, 'timeout');
return id;
};
//# sourceMappingURL=module.js.map