jsfft icon indicating copy to clipboard operation
jsfft copied to clipboard

Some types

Open ierehon1905 opened this issue 2 years ago • 1 comments

In case someone needs types. There are some unknown parts which I did not have time to explore

declare module "jsfft" {
  type Frequency = { real: number; imag: number };
  type InputValue = ComplexArray | number[] | number;
  type Filterer = (frequency: Frequency, i: number, n: number) => void;

  function FFT(input: InputValue): ComplexArray;
  function InvFFT(input: InputValue): ComplexArray;
  function frequencyMap(input: InputValue, filterer: Filterer): ComplexArray;

  class ComplexArray {
    constructor(input: InputValue);

    length: number;
    real: Float32Array;
    imag: Float32Array;

    ArrayType(args: unknown): Float32Array;

    FFT(): ComplexArray;
    InvFFT(): ComplexArray;
    frequencyMap(filterer: Filterer): ComplexArray;

    conjugate(): unknown;

    forEach(iterator: Filterer): unknown;

    magnitude(): Float32Array;

    map(mapper: Filterer): ComplexArray;

    toString(): string;
  }
}

ierehon1905 avatar May 23 '22 17:05 ierehon1905

FWIW, here's what I came up with

type Value = { real: number, imag: number };

declare module 'jsfft' {
  function FFT(input: ComplexArray): ComplexArray;
  function InvFFT(input: ComplexArray): ComplexArray;
  function frequencyMap(input: ComplexArray, filterer: (value: Value, i: number, n: number) => Value): ComplexArray;

  class ComplexArray<TypedArray extends ArrayLike<number> = Float32Array> {
    real: TypedArray;
    imag: TypedArray;
    ArrayType: TypedArray;
    constructor(other: ComplexArray | number | ArrayLike<number> | ArrayBufferLike, arrayType?: TypedArray);
    toSting(): string;
    forEach(iterator: (value: Value, i: number, n: number) => void): void;
    map(iterator: (value: Value, i: number, n: number) => Value): ComplexArray<TypedArray>;
    conjugate(): ComplexArray<TypedArray>;
    magnitude(): TypedArray;
    FFT(): ComplexArray<TypedArray>;
    InvFFT(): ComplexArray<TypedArray>;
    frequencyMap(filterer: (value: Value, i: number, n: number) => Value): ComplexArray<TypedArray>;
  }
}

jthoward64 avatar Jul 13 '23 18:07 jthoward64