@pixi/sound
Version:
WebAudio API playback library with filters
1 lines • 5.96 kB
Source Map (JSON)
{"version":3,"file":"WebAudioNodes.mjs","sources":["../../src/webaudio/WebAudioNodes.ts"],"sourcesContent":["import { Filterable } from '../Filterable';\nimport { WebAudioContext } from './WebAudioContext';\nimport { WebAudioUtils } from './WebAudioUtils';\n\n/** Output for cloning source node. */\ninterface SourceClone\n{\n /** Cloned audio buffer source */\n source: AudioBufferSourceNode;\n /** Independent volume control */\n gain: GainNode;\n}\n\n/**\n * @memberof webaudio\n */\nclass WebAudioNodes extends Filterable\n{\n /**\n * The buffer size for script processor, default is `0` which auto-detects. If you plan to use\n * script node on iOS, you'll need to provide a non-zero amount.\n * @default 0\n */\n public static BUFFER_SIZE = 0;\n\n /**\n * Get the buffer source node\n * @readonly\n */\n public bufferSource: AudioBufferSourceNode;\n\n /**\n * Get the gain node\n * @readonly\n */\n public gain: GainNode;\n\n /**\n * Get the analyser node\n * @readonly\n */\n public analyser: AnalyserNode;\n\n /**\n * Reference to the SoundContext\n * @readonly\n */\n public context: WebAudioContext;\n\n /** Private reference to the script processor node. */\n private _script: ScriptProcessorNode;\n\n /**\n * @param context - The audio context.\n */\n constructor(context: WebAudioContext)\n {\n const audioContext: AudioContext = context.audioContext;\n\n const bufferSource: AudioBufferSourceNode = audioContext.createBufferSource();\n const gain: GainNode = audioContext.createGain();\n const analyser: AnalyserNode = audioContext.createAnalyser();\n\n bufferSource.connect(analyser);\n analyser.connect(gain);\n gain.connect(context.destination);\n\n super(analyser, gain);\n\n this.context = context;\n this.bufferSource = bufferSource;\n this.gain = gain;\n this.analyser = analyser;\n }\n\n /**\n * Get the script processor node.\n * @readonly\n */\n public get script(): ScriptProcessorNode\n {\n if (!this._script)\n {\n this._script = this.context.audioContext.createScriptProcessor(WebAudioNodes.BUFFER_SIZE);\n this._script.connect(this.context.destination);\n }\n\n return this._script;\n }\n\n /** Cleans up. */\n public destroy(): void\n {\n super.destroy();\n\n this.bufferSource.disconnect();\n if (this._script)\n {\n this._script.disconnect();\n }\n this.gain.disconnect();\n this.analyser.disconnect();\n\n this.bufferSource = null;\n this._script = null;\n this.gain = null;\n this.analyser = null;\n\n this.context = null;\n }\n\n /**\n * Clones the bufferSource. Used just before playing a sound.\n * @returns {SourceClone} The clone AudioBufferSourceNode.\n */\n public cloneBufferSource(): SourceClone\n {\n const orig: AudioBufferSourceNode = this.bufferSource;\n const source: AudioBufferSourceNode = this.context.audioContext.createBufferSource();\n\n source.buffer = orig.buffer;\n WebAudioUtils.setParamValue(source.playbackRate, orig.playbackRate.value);\n source.loop = orig.loop;\n\n const gain: GainNode = this.context.audioContext.createGain();\n\n source.connect(gain);\n gain.connect(this.destination);\n\n return { source, gain };\n }\n\n /**\n * Get buffer size of `ScriptProcessorNode`.\n * @readonly\n */\n get bufferSize(): number\n {\n return this.script.bufferSize;\n }\n}\n\nexport type { SourceClone };\nexport { WebAudioNodes };\n"],"names":[],"mappings":"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"}