wad icon indicating copy to clipboard operation
wad copied to clipboard

TypeScript Typings

Open sebastiansandqvist opened this issue 3 years ago • 2 comments

I have been using wad for a few projects and recently began using TypeScript, which made interfacing with this library a bit more difficult. As a result I've come up with some incomplete type definitions that have gotten me pretty far for my own projects, pasted below (based on the API documentation in the readme).

Is there any interest in me opening a PR in order to kickstart adding more complete type definitions for this library? In case it is useful to anyone else, the typedefs I've been using (which don't currently include anything for polywads) are here:

declare module 'web-audio-daw' {

  interface Envelope {
    attack?: number;
    decay?: number;
    sustain?: number;
    hold?: number;
    release?: number;
  }

  interface Filter {
    type: 'lowpass' | 'highpass' | 'bandpass' | 'lowshelf' | 'highshelf' | 'peaking' | 'notch' | 'allpass';
    frequency: number;
    q: number;
    env?: {
      frequency?: number;
      attack?: number;
    }
  }

  interface Reverb {
    wet?: number;
    impulse?: string;
  }

  interface Delay {
    delayTime?: number;
    wet?: number;
    feedback?: number;
  }

  type Shape = 'sine' | 'sawtooth' | 'square' | 'triangle';

  interface Vibrato {
    shape?: Shape;
    magnitude?: number;
    speed?: number;
    attack?: number;
  }

  interface Tremolo {
    shape?: Shape;
    magnitude?: number;
    speed?: number;
    attack?: number;
  }

  interface ConstructorArgs {
    source: string;
    volume?: number;
    loop?: boolean;
    rate?: number;
    pitch?: string | number;
    detune?: number;
    panning?: number | number[];
    panningModel?: 'HRTF' | 'equalpower';
    rolloffFactor?: number;
    env?: Envelope;
    filter?: Filter;
    reverb?: Reverb;
    delay?: Delay;
    vibrato?: Vibrato;
    tuna?: any;
  }

  interface PlayArgs {
    volume?: number;
    wait?: number;
    loop?: boolean;
    offset?: number;
    rate?: number;
    pitch?: string;
    label?: string;
    env?: Envelope;
    panning?: number | number[];
    filter?: Filter;
    delay?: Delay;
  }

  class Wad {
    constructor(args: ConstructorArgs);
    public static audioContext: AudioContext;
    play: (args?: PlayArgs) => Promise<this>;
    stop: (label?: string) => void;
    pause: (label?: string) => void;
    unpause: (args?: PlayArgs) => void;
    setVolume: (volume: number, timeConstant?: string, label?: string) => void;
    setPitch: (pitch: string, timeConstant?: string, label?: string) => void;
    setDetune: (detune: number, timeConstant?: string, label?: string) => void;
    setPanning: (panning: {} | any[], timeConstant?: string) => void;
    setRate: (rate: number) => void;
    setReverb: (wet: number) => void;
    setDelay: (delayTime?: number, wet?: number, feedback?: number) => void;
    reverse: () => void;
  }

  export = Wad;
}

sebastiansandqvist avatar Apr 24 '21 01:04 sebastiansandqvist

That sounds great. Feel free to open a PR.

rserota avatar Apr 24 '21 19:04 rserota

Yes, I would love some typings for Wad.

frastlin avatar Jul 07 '22 19:07 frastlin

I just updated WadJS to version 4.13, which includes type definitions. I hope you all enjoy it.

rserota avatar Sep 10 '22 23:09 rserota