// Original deterministic cue track, not a recording of ceramic or an AI provider output. import { writeFile } from "node:fs/promises"; const sampleRate = 24000, duration = 6, total = sampleRate * duration; const wav = Buffer.alloc(44 + total * 2); wav.write("RIFF", 0); wav.writeUInt32LE(36 + total * 2, 4); wav.write("WAVEfmt ", 8); wav.writeUInt32LE(16, 16); wav.writeUInt16LE(1, 20); wav.writeUInt16LE(1, 22); wav.writeUInt32LE(sampleRate, 24); wav.writeUInt32LE(sampleRate * 2, 28); wav.writeUInt16LE(2, 32); wav.writeUInt16LE(16, 34); wav.write("data", 36); wav.writeUInt32LE(total * 2, 40); for (let i = 0; i < total; i++) { const time = i / sampleRate; let value = 0; for (const onset of [1, 3, 5]) { const t = time - onset; if (t >= 0 && t < 0.25) { const envelope = Math.min(1, t / 0.002) * Math.exp(-t * 35); value += 0.22 * envelope * (0.7 * Math.sin(2 * Math.PI * 720 * t) + 0.3 * Math.sin(2 * Math.PI * 1170 * t)); } } wav.writeInt16LE(Math.round(value * 32767), 44 + i * 2); } await writeFile("public/blog/asmr-timing-reference.wav", wav);