1// The interface shared by the CPU and the GPU time loops.
2export interface ChunkResult {
3 firstSample: number; // audio index of pressureFront[0]
4 pressureFront: Float32Array; // baffled Rayleigh pressure [Pa]
5 pressureBack: Float32Array; // diffracted back term [Pa]; unbaffled = front - back
6 frames: Float32Array[]; // displacement w at every node, captured every `movieEvery` audio samples
7 frameSamples: number[]; // audio sample index of each frame
8}
10export interface HitState { peakForce: number; contactTime: number; velocity: number; height: number }
12export interface Diagnostics {
13 time: number; kinetic: number; membrane: number; bending: number; exciters: number; maxWoverH: number; hits: HitState[];
14}
16export interface SimulatorBackend {
17 readonly kind: "cpu" | "gpu";
18 readonly samplesDone: number;
19 /** Largest chunk (audio samples) runChunk accepts. */
20 readonly maxChunk: number;
21 /** Advance by nSamples audio samples and return the pressure samples completed meanwhile. */
22 runChunk(nSamples: number): Promise<ChunkResult>;
23 diagnostics(): Promise<Diagnostics>;
24 /** Transverse displacement w at every node, for the plate view. */
25 displacement(): Promise<Float32Array>;
26 dispose(): void;
27}