diff --git a/types/wav/index.d.ts b/types/wav/index.d.ts new file mode 100644 index 0000000000..2401775e8c --- /dev/null +++ b/types/wav/index.d.ts @@ -0,0 +1,74 @@ +// Type definitions for wav 1.0 +// Project: https://github.com/TooTallNate/node-wav#readme +// Definitions by: Matthew Peveler +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +import { Transform, TransformOptions } from "stream"; +import { WriteStream } from 'fs'; + +export interface Format { + audioFormat: number; + endianness: 'LE' | 'BE'; + channels: number; + sampleRate: number; + byteRate: number; + blockAlign: number; + bitDepth: number; + signed: boolean; +} + +export interface UnknownChunk { + id: string; + data: any; +} + +export class Reader extends Transform { + constructor(opts?: TransformOptions); + + addListener(event: "format", listener: (format: Format) => void): this; + addListener(event: "chunk", listener: (unknownChunk: UnknownChunk) => void): this; + addListener(event: string, listener: (...args: any[]) => void): this; + + on(event: "format", listener: (format: Format) => void): this; + on(event: "chunk", listener: (unknownChunk: UnknownChunk) => void): this; + on(event: string, listener: (...args: any[]) => void): this; +} + +export interface WriterOptions extends TransformOptions { + format?: number; + channels?: number; + sampleRate?: number; + bitDepth?: number; +} + +export class Writer extends Transform { + endianness: 'LE'; + format: number; + channels: number; + sampleRate: number; + bitDepth: number; + bytesProcessed: number; + + constructor(opts?: WriterOptions); + + addListener(event: "header", listener: (header: Buffer) => void): this; + addListener(event: string, listener: (...args: any[]) => void): this; + + on(event: "header", listener: (header: Buffer) => void): this; + on(event: string, listener: (...args: any[]) => void): this; +} + +export class FileWriter extends Writer { + path: string; + file: WriteStream; + + constructor(path: string, opts?: WriterOptions); + + addListener(event: "done", listener: () => void): this; + addListener(event: string, listener: (...args: any[]) => void): this; + + on(event: "done", listener: () => void): this; + on(event: string, listener: (...args: any[]) => void): this; +} diff --git a/types/wav/tsconfig.json b/types/wav/tsconfig.json new file mode 100644 index 0000000000..39b141ac09 --- /dev/null +++ b/types/wav/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "wav-tests.ts" + ] +} diff --git a/types/wav/tslint.json b/types/wav/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/wav/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" } diff --git a/types/wav/wav-tests.ts b/types/wav/wav-tests.ts new file mode 100644 index 0000000000..d0ea989450 --- /dev/null +++ b/types/wav/wav-tests.ts @@ -0,0 +1,28 @@ +import { createReadStream } from 'fs'; +import { Reader, Writer, FileWriter } from 'wav'; + +const file = createReadStream('track01.wav'); +const reader = new Reader(); +const reader2 = new Reader(); + +const writer = new Writer({ + sampleRate: 16000, + channels: 1 +}); + +const fileWriter = new FileWriter('./test.wav', { + sampleRate: 16000, + channels: 1 +}); + +reader.on('format', (format) => { + console.log(format); + reader.pipe(writer); +}); + +reader2.on('format', (format) => { + console.log(format); + reader2.pipe(fileWriter); +}); + +file.pipe(reader);