Skip to content

Commit

Permalink
Milestone 1.2: Type definitions for midi, skulpt, math expressions (#…
Browse files Browse the repository at this point in the history
…9266)

* Add definitions for MIDI

* Add definitions for MathExpression, Incomplete definitions for Skulpt

* Type definitions for skulpt
  • Loading branch information
nishantwrp committed May 10, 2020
1 parent c24cc70 commit 1ca0cdb
Show file tree
Hide file tree
Showing 4 changed files with 406 additions and 3 deletions.
24 changes: 24 additions & 0 deletions typings/math-expressions-defs.d.ts
@@ -0,0 +1,24 @@
// Code - third_party/static/math-expressions-1.7.0/math-expressions.js

interface Expression {
derivative: (variable: string) => string;
equals: (expression: Expression) => boolean;
toLatex: () => string;
toString: () => string;
variables: () => string[];
}

interface MathExpression {
fromAst: (ast: boolean | string | string[]) => Expression;
fromLatex: (latex: string) => Expression;
fromLaTeX: (latex: string) => Expression;
fromMml: (mml: string) => Expression;
fromTex: (latex: string) => Expression;
fromTeX: (latex: string) => Expression;
fromText: (text: string) => Expression;
parse: (text: string) => Expression;
// eslint-disable-next-line camelcase
parse_tex: (latex: string) => Expression;
}

declare var MathExpression: MathExpression;
149 changes: 149 additions & 0 deletions typings/midi-defs.d.ts
@@ -0,0 +1,149 @@
// Code - third_party/static/midi-js-a8a842/build/MIDI.js

interface MidiPlayer {
BPM: number;
currentTime: number;
endTime: number;
playing: boolean;
startDelay: number;
restart: number;
timeWarp: number;

addListener: (onsuccess: Function) => void;
clearAnimation: () => void;
getFileInstruments: () => string[];
pause: () => void;
loadFile: (
file: File, onsuccess: Function, onprogress: Function,
onerror: Function) => void;
loadMidiFile: (
onsuccess: Function, onprogress: Function, onerror: Function) => void;
setAnimation: (callback: Function) => void;
start: (onsuccess: Function) => void;
stop: () => void;
removeListener: () => void;
resume: (onsuccess: Function) => void;
}

interface MidiAudioTag {
api: string;
audioBuffers: HTMLAudioElement[];

connect: (opts: Object) => void;
chordOff: (channel: number, notes: number[], delay: number) => void;
chordOn: (
channel: number, notes: number[], velocity: number, delay: number) => void;
noteOff: (channel: number, note: number, delay: number) => void;
noteOn: (
channel: number, note: number, velocity: number, delay: number) => void;
pitchBend: (channel: number, program: Object, delay: number) => void;
programChange: (channel: number, program: Object) => void;
send: (data: Object, delay: number) => void;
setController: (
channelId: number, type: Object, value: Object, delay: number) => void;
setVolume: (channel: number, n: number) => void;
stopAllNotes: () => void;
}

interface MidiWebAudio {
api: string;
audioBuffers: HTMLAudioElement[];

connect: (opts: Object) => void;
chordOn: (
channel: number, notes: number[], velocity: number, delay: number) => void;
chordOff: (channel: number, notes: number[], delay: number) => void;
noteOn: (
channel: number, note: number, velocity: number, delay: number) => void;
noteOff: (channel: number, note: number, delay: number) => void;
getContext: () => Object;
setContext: (
newCtx: Object, onload: Function, onprogress: Function,
onerror: Function) => void;
pitchBend: (channel: number, program: Object, delay: number) => void;
setEffects: (list: Array<Object>) => void;
stopAllNotes: () => void;
programChange: (channel: number, program: Object) => void;
send: (data: Object, delay: number) => void;
setController: (
channelId: number, type: Object, value: Object, delay: number) => void;
setVolume: (channel: number, n: number) => void;
}

interface WebMidi {
api: string;

connect: (opts: Object) => void;
chordOff: (channel: number, notes: number[], delay: number) => void;
chordOn: (
channel: number, notes: number[], velocity: number, delay: number) => void;
noteOff: (channel: number, note: number, delay: number) => void;
noteOn: (
channel: number, note: number, velocity: number, delay: number) => void;
pitchBend: (channel: number, program: Object, delay: number) => void;
programChange: (channel: number, program: Object) => void;
send: (data: Object, delay: number) => void;
setController: (
channelId: number, type: Object, value: Object, delay: number) => void;
setVolume: (channel: number, n: number) => void;
stopAllNotes: () => void;
}

interface MidiKeyToNote {
[key: string]: number;
}

interface MidiNoteToKey {
[note: number]: string;
}

interface MIDI {
audioBuffers: Object;
AudioTag: MidiAudioTag;
channels: Array<Object>;
GM: Object;
keyToNote: MidiKeyToNote;
noteToKey: MidiNoteToKey;
Player: MidiPlayer;
supports: Object;
util: Object;
WebAudio: MidiWebAudio;
WebMIDI: WebMidi;

audioDetect: (onsuccess: Function) => Object;
chordOff: (channel: number, notes: number[], delay: number) => void;
chordOn: (
channel: number, notes: number[], velocity: number, delay: number) => void;
getContext: () => Object;
getInstrument: (channelId: number) => Object;
getMono: (channelId: number) => Object;
getOmni: (channelId: number) => Object;
getSolo: (channelId: number) => Object;
loadPlugin: (opts: Object) => void;
loadResource: (opts: Object) => void;
noteOff: (channel: number, note: number, delay: number) => void;
noteOn: (
channel: number, note: number, velocity: number, delay: number) => void;
pitchBend: (channel: number, program: Object, delay: number) => void;
programChange: (channel: number, program: Object) => void;
send: (data: Object, delay: number) => void;
setContext: (
newCtx: Object, onload: Function, onprogress: Function,
onerror: Function) => void;
setController: (
channelId: number, type: Object, value: Object, delay: number) => void;
setDefaultPlugin: (midi: Obejct) => void;
setEffects: (list: Array<Object>) => void;
setInstrument: (
channelId: number, program: Object, dealy: number) => NodeJS.Timeout;
setMono: (
channelId: number, truthy: Object, delay: number) => NodeJS.Timeout;
setOmni: (
channelId: number, truthy: Object) => NodeJS.Timeout;
setSolo: (
channelId: number, truthy: Object) => NodeJS.Timeout;
setVolume: (channel: number, n: number) => void;
stopAllNotes: () => void;
}

declare var MIDI: MIDI;

0 comments on commit 1ca0cdb

Please sign in to comment.