// SPDX-License-Identifier: GPL-3.0-or-later const definitions={ 'Small room':{seconds:.5,rt60:.25,seed:0x51a11}, Hall:{seconds:2,rt60:1.4,seed:0x4a11}, Plate:{seconds:1.5,rt60:1,seed:0x91a7e}, Cathedral:{seconds:5,rt60:4,seed:0xca7ed}, }; export const BUILTIN_IRS=Object.freeze(Object.fromEntries(Object.entries(definitions).map(([name,d])=>[name,Object.freeze({...d,version:1})]))); export function generateIR(name,sampleRate,channels=2,{maxFrames=65536}={}) { const spec=BUILTIN_IRS[name];if(!spec||!Number.isInteger(sampleRate)||sampleRate<8000||sampleRate>96000||![1,2,4].includes(channels)) throw new RangeError('Unsupported generated IR'); const frames=Math.max(1,Math.min(Math.round(spec.seconds*sampleRate),maxFrames));let seed=spec.seed>>>0; const paths=Array.from({length:channels},()=>new Float32Array(frames)); const next=()=>{seed=(Math.imul(seed,1664525)+1013904223)>>>0;return seed/0x100000000*2-1;}; for(let path=0;pathpaths[i]}; }