UNPKG

audio-context-timers

Version:

A replacement for setInterval() and setTimeout() which works in unfocused windows.

33 lines 2.04 kB
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