import AudioScheduledSourceNode from './AudioScheduledSourceNode'; import type BaseAudioContext from './BaseAudioContext'; import { AudioWorkletRuntime } from '../types'; import AudioAPIModule from '../AudioAPIModule'; export default class WorkletSourceNode extends AudioScheduledSourceNode { constructor( context: BaseAudioContext, runtime: AudioWorkletRuntime, callback: ( audioData: Array, framesToProcess: number, currentTime: number, startOffset: number ) => void ) { const shareableWorklet = AudioAPIModule.workletsModule!.makeShareableCloneRecursive( ( audioBuffers: Array, framesToProcess: number, currentTime: number, startOffset: number ) => { 'worklet'; const floatAudioData: Array = audioBuffers.map( (buffer) => new Float32Array(buffer) ); callback(floatAudioData, framesToProcess, currentTime, startOffset); } ); const node = context.context.createWorkletSourceNode( shareableWorklet, runtime === 'UIRuntime' ); super(context, node); } }