/ proof-of-concept / toy-instruments
Sign in
proof-of-concept / toy-instruments
toy-instruments / src / sim / worker.ts
20 lines · 676 BBlameHistoryRaw
1import { simulate } from './solver';
2import type { BeadSystem, Excitation, SimOptions } from './types';
4export interface WorkerRequest {
5 sys: BeadSystem;
6 exc: Excitation;
7 opt: SimOptions;
8}
10self.onmessage = (ev: MessageEvent<WorkerRequest>) => {
11 const { sys, exc, opt } = ev.data;
12 try {
13 const result = simulate(sys, exc, opt, (f) => self.postMessage({ type: 'progress', fraction: f }));
14 self.postMessage({ type: 'done', result }, {
15 transfer: [result.audio.buffer, result.frames.buffer, result.frameTimes.buffer, result.energy.buffer, result.balance.buffer],
16 });
17 } catch (e) {
18 self.postMessage({ type: 'error', message: String(e) });
19 }
20};
↑↓ move↵openescclose