// The interface shared by the CPU and the GPU time loops. export interface ChunkResult { firstSample: number; // audio index of pressureFront[0] pressureFront: Float32Array; // baffled Rayleigh pressure [Pa] pressureBack: Float32Array; // diffracted back term [Pa]; unbaffled = front - back frames: Float32Array[]; // displacement w at every node, captured every `movieEvery` audio samples frameSamples: number[]; // audio sample index of each frame } export interface HitState { peakForce: number; contactTime: number; velocity: number; height: number } export interface Diagnostics { time: number; kinetic: number; membrane: number; bending: number; exciters: number; maxWoverH: number; hits: HitState[]; } export interface SimulatorBackend { readonly kind: "cpu" | "gpu"; readonly samplesDone: number; /** Largest chunk (audio samples) runChunk accepts. */ readonly maxChunk: number; /** Advance by nSamples audio samples and return the pressure samples completed meanwhile. */ runChunk(nSamples: number): Promise; diagnostics(): Promise; /** Transverse displacement w at every node, for the plate view. */ displacement(): Promise; dispose(): void; }