import AudioNode from './AudioNode'; import type BaseAudioContext from './BaseAudioContext'; import { AudioWorkletRuntime } from '../types'; import AudioAPIModule from '../AudioAPIModule'; export default class WorkletProcessingNode extends AudioNode { constructor( context: BaseAudioContext, runtime: AudioWorkletRuntime, callback: ( inputData: Array, outputData: Array, framesToProcess: number, currentTime: number ) => void ) { const shareableWorklet = AudioAPIModule.workletsModule!.makeShareableCloneRecursive( ( inputBuffers: Array, outputBuffers: Array, framesToProcess: number, currentTime: number ) => { 'worklet'; const inputData: Array = inputBuffers.map( (buffer) => new Float32Array(buffer, 0, framesToProcess) ); const outputData: Array = outputBuffers.map( (buffer) => new Float32Array(buffer, 0, framesToProcess) ); callback(inputData, outputData, framesToProcess, currentTime); } ); const node = context.context.createWorkletProcessingNode( shareableWorklet, runtime === 'UIRuntime' ); super(context, node); } }