Newer
Older
rpg / packages / engine / tools / synth.d.mts
/**
 * Типы для synth.mjs: чистые примитивы синтеза без node-зависимостей
 * (их можно импортировать и в браузере — в отличие от wav.mjs с node:fs).
 * Сам .mjs без JSDoc-типов, декларация рядом покрывает оба tsconfig-проекта.
 */

/** Частота дискретизации синтеза, Гц. */
export declare const RATE: number;

/** Детерминированный ГПСЧ (mulberry32): (seed) → функция () => [0..1). */
export declare function makeRng(seed: number): () => number;

/** Сэмплы длительностью seconds: fn(t секунды, i индекс) → значение волны. */
export declare function synth(seconds: number, fn: (t: number, i: number) => number, rate?: number): Float32Array;

/** Огибающая затухания: 1 на старте → 0 к концу (кривая t^power). */
export declare function decay(t: number, dur: number, power?: number): number;

/** Партиал колокола: sin(2π·freq·stretch·t) с затуханием decay. */
export declare function bellPartial(freq: number, stretch: number, dur: number, power?: number): (t: number) => number;

/** Полосовой шум: детерминированная последовательность сэмплов в полосе. */
export declare function bandNoise(seed: number, lowHz: number, highHz: number, dur: number): () => number;

/** Нормализация к пику (по модулю), дефолт 0.9. */
export declare function normalize(samples: Float32Array, peak?: number): Float32Array;

/** Сшить края в луп коротким кроссфейдом (возвращает копию без хвоста фейда). */
export declare function loopify(samples: Float32Array, fadeSeconds?: number): Float32Array;