mirror of
https://github.com/Tonejs/Tone.js
synced 2024-12-29 04:53:10 +00:00
d1c281c810
will make migrating to standardized-audio-context easier
56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
/**
|
|
* Either the online or offline audio context
|
|
*/
|
|
export type AnyAudioContext = AudioContext | OfflineAudioContext;
|
|
|
|
/**
|
|
* Interface for things that Tone.js adds to the window
|
|
*/
|
|
interface ToneWindow extends Window {
|
|
TONE_AUDIO_CONTEXT?: AnyAudioContext;
|
|
TONE_SILENCE_LOGGING?: boolean;
|
|
TONE_DEBUG_CLASS?: string;
|
|
}
|
|
|
|
/**
|
|
* A reference to the window object
|
|
*/
|
|
export const theWindow: ToneWindow | null = typeof self === "object" ? self : null;
|
|
|
|
/**
|
|
* If the browser has a window object which has an AudioContext
|
|
*/
|
|
export const hasAudioContext = theWindow &&
|
|
(theWindow.hasOwnProperty("AudioContext") || theWindow.hasOwnProperty("webkitAudioContext"));
|
|
|
|
/**
|
|
* The global audio context which is getable and assignable through
|
|
* getAudioContext and setAudioContext
|
|
*/
|
|
let globalContext: AnyAudioContext;
|
|
|
|
// if it was created already, use that one
|
|
// this enables multiple versions of Tone.js to run on the same page.
|
|
if (theWindow && theWindow.TONE_AUDIO_CONTEXT) {
|
|
globalContext = theWindow.TONE_AUDIO_CONTEXT;
|
|
}
|
|
|
|
/**
|
|
* Returns the default system-wide AudioContext
|
|
*/
|
|
export function getAudioContext(): AnyAudioContext {
|
|
if (!globalContext && hasAudioContext) {
|
|
setAudioContext(new AudioContext());
|
|
}
|
|
return globalContext;
|
|
}
|
|
|
|
/**
|
|
* Set the default audio context
|
|
*/
|
|
export function setAudioContext(context: AnyAudioContext): void {
|
|
globalContext = context;
|
|
if (theWindow) {
|
|
theWindow.TONE_AUDIO_CONTEXT = globalContext;
|
|
}
|
|
}
|